1. 程式人生 > >HanLP自定義詞典注意事項

HanLP自定義詞典注意事項

對於詞典,直接載入文字會很慢,所以HanLP對於文字檔案做了一些預處理,生成了字尾名為.txt.bin的二進位制檔案。
這些二進位制檔案相當於快取,避免了每次載入去讀取多個檔案。
通過這種txt和bin結合的方式,HanLP一方面方便使用者編輯檢視詞典,另一方面bin方便載入,這種方式可謂是兼二者之長,設計上堪稱典範。

開啟hanlp的data目錄data\dictionary\custom,刪除所有的.txt.bin檔案,這樣一來,HanLP下次載入詞典時會自動構建.txt.bin,這樣一來,你對文字檔案所做的更改才會生效。對於HanLP中的字典,每次更改之後,都必須重新生成bin才可以,否則不會生效。
實際上,這種方式不夠智慧,可以改進為檢查檔案日期的方式,如果當前目錄下的最新的詞典檔案比bin檔案新,那麼bin檔案失效,需要重新構建bin。
構建bin的過程是比較緩慢的,它需要把所有的相關文字檔案中的詞語合併到一個裡面,每次構建大概需要2min,構建完成之後下次啟動就很快了。

更改hanlp.properties,新增mine.txt.

#自定義詞典路徑,用;隔開多個自定義詞典,空格開頭表示在同一個目錄,使用“檔名 詞性”形式則表示這個詞典的詞性預設是該詞性。優先順序遞減。
#另外data/dictionary/custom/CustomDictionary.txt是個高質量的詞庫,請不要刪除
CustomDictionaryPath=data/dictionary/custom/mine.txt; CustomDictionary.txt; 現代漢語補充詞庫.txt; 全國地名大全.txt ns; 人名詞典.txt; 機構名詞典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf

在data/dictionary/custom/目錄下新建mine.txt,新增一些詞語。比如裡面加上”蘭陵笑笑生“。

隨便編一個程式測試一下

    List<Term> res = HanLP.segment("蘭陵笑笑生笑道:你他孃的真是個天才");
    System.out.println(res);//[蘭陵笑笑生/nr, 笑/v, 道/q, :/w, 你/r, 他/r, 娘/n, 的/uj, 真/d, 是/v, 個/q, 天才/n]
    for (String i : HanLP.Config.CustomDictionaryPath) {
        System.out.println(i);
    }

 

  

#1樓 2018-03-08 11:24 hapjin  

確實。https://github.com/hankcs/HanLP/issues/182 第6點已經說了。不過作者說,主要是基於統計來分詞……