如何使用Hanlp載入大字典
問題
因為需要載入一個 近 1G 的字典到 Hanlp 中,一開始使用了 CustomDictionay.add() 方法來一條條的載入,果然到了中間,維護 DoubleArraTre 的成本太高,新增一個節點,都會很長時間,本來時間長一點沒有關係,只要訓練出 .bin 的檔案,第二次載入就會很快,然而作為以空間換時間的 DAT 結構,記憶體消耗很大,預料之內的出現了
1 out of memory: heap size
的問題。後來嘗試直接載入了 1G 的字典,顯然更不行。
思路
閱讀了 Hanlp 的部分原始碼,也請教了原作者一部分問題,就打算從原始碼入手。初步想法大概是將原始字典 split 成多份,然後分別將多份的小字典 訓練成 多個小的 .bin 檔案,再完整的載入到記憶體中,基於的原則則是:載入兩個 10M 的字典的消耗比一個 20M 的要小。
然後又最佳化了一部分,現在載入一個大概 1G 的字典,佔記憶體約 3g+ ,已經可以使用了。
大概流程
1 修改 CustomDictionary.java 設定一個 hashmap 或者 一個 list 來儲存所有的小 Dat
2 將所有的 dat 載入完,這裡就不再區分主副字典了。
3 修改 Segment.java 裡面的 combineByCustomDictionary 函式,原始碼中只有一個 dat , 這裡我們需要選擇我們容器中其中某一個 dat 作為要匹配使用,之前使用的方案是,遍歷所有的 dat ,知道有了匹配,但是這樣缺陷很明顯,解決不了多個字典匹配同一個詞的字串的情況,這裡我的考察方案是,字典中的同一個字開始的詞條對映到同一個檔案,這樣不會出現字串問題了。
以上就 是個大概的修改,可以參考。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2564514/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hanlp 載入遠端詞庫示例HanLP
- 如何載入使用天地圖地圖
- 如何在linux伺服器上使用hanlpLinux伺服器HanLP
- NLP入門學習中關於分詞庫HanLP匯入使用教程分詞HanLP
- 在 Maven 專案中使用 HanLPMavenHanLP
- HanLP使用教程——NLP初體驗HanLP
- HanLP-停用詞表的使用示例HanLP
- 使用duckdb載入mysqlMySql
- Angular 中使用惰性載入Angular
- 039.Vue3入門,非同步載入元件,初始時不全部載入,使用時才載入Vue非同步元件
- Spark中分散式使用HanLP(1.7.0)分詞示例Spark分散式HanLP分詞
- Hanlp漢字轉拼音使用python呼叫詳解HanLPPython
- Hanlp中使用純JAVA實現CRF分詞HanLPJavaCRF分詞
- Hanlp在ubuntu中的使用方法介紹HanLPUbuntu
- 如何實現圖片預載入和載入進度條
- 使用Web元件載入頁面Web元件
- php webman使用fileboy熱載入PHPWeb
- Pytorch資料載入與使用PyTorch
- 使用Lottie做載入動畫動畫
- 使用dlopen載入動態庫
- VUE如何實現按需載入?Vue
- jvm如何載入一個類JVM
- Tomcat是如何載入類的Tomcat
- HanLP Analysis for ElasticsearchHanLPElasticsearch
- HanLP Android 示例HanLPAndroid
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- Hanlp自然語言處理工具的使用演練HanLP自然語言處理
- hanlp自然語言處理包的基本使用--pythonHanLP自然語言處理Python
- 使用 preloadComponents 進行元件預載入元件
- mui上拉載入更多的使用UI
- Android 使用ArrayAdapter 載入Bean資料AndroidAPTBean
- vue專案中如何載入markdownVue
- OrchardCore 如何動態載入模組?
- Activity 是如何載入佈局的?
- 如何編譯執行HanLP自然語言處理包編譯HanLP自然語言處理
- 如何使用 autofs 掛載 NFS 共享NFS
- 使用 useLazyAsyncData 提升資料載入體驗
- Spring如何控制Bean的載入順序SpringBean