如何使用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
- HanLP使用教程——NLP初體驗HanLP
- 在 Maven 專案中使用 HanLPMavenHanLP
- HanLP-停用詞表的使用示例HanLP
- 如何通過預載入器提升網頁載入速度網頁
- HanLP Analysis for ElasticsearchHanLPElasticsearch
- Angular 中使用惰性載入Angular
- 使用Lottie做載入動畫動畫
- 使用duckdb載入mysqlMySql
- Spark中分散式使用HanLP(1.7.0)分詞示例Spark分散式HanLP分詞
- Hanlp在ubuntu中的使用方法介紹HanLPUbuntu
- Hanlp中使用純JAVA實現CRF分詞HanLPJavaCRF分詞
- 如何實現圖片預載入和載入進度條
- Yelp app是如何使用Glide優化圖片載入的APPIDE優化
- jvm如何載入一個類JVM
- OrchardCore 如何動態載入模組?
- VUE如何實現按需載入?Vue
- 039.Vue3入門,非同步載入元件,初始時不全部載入,使用時才載入Vue非同步元件
- Hanlp漢字轉拼音使用python呼叫詳解HanLPPython
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- Hanlp自然語言處理工具的使用演練HanLP自然語言處理
- 使用dlopen載入動態庫
- 結合載入檢視使用
- 使用jQuery載入js指令碼jQueryJS指令碼
- HTML使用canvas載入圖片HTMLCanvas
- MapGis載入及使用方法
- 使用Web元件載入頁面Web元件
- php webman使用fileboy熱載入PHPWeb
- HanLP Android 示例HanLPAndroid
- 如何編譯執行HanLP自然語言處理包編譯HanLP自然語言處理
- Tomcat是如何載入類的Tomcat
- 如何動態載入js檔案JS
- Activity 是如何載入佈局的?
- 如何只用CSS 完成漂亮的載入CSS
- 如何只用 CSS 完成漂亮的載入CSS