使用過hanlp的都知道hanlp中有許多詞典,它們的格式都是非常相似的,形式都是文本文檔,随時可以修改。本篇文章詳細介紹了hanlp中的詞典格式,以滿足使用者自定義的需要。
基本格式詞典分為詞頻詞性詞典和詞頻詞典。
1、詞頻詞性詞典(如CoreNatureDictionary.txt)
(1)每一行代表一個單詞,格式遵從[單詞] [詞性A] [A的頻次] [詞性B] [B的頻次] ...。
(2)支援省略詞性和頻次,直接一行一個單詞。
(3).txt詞典檔案的分隔符為空格或制表符,是以不支援含有空格的詞語。如果需要支援空格,請使用英文逗号,分割的純文字.csv檔案。在使用Excel等富文本編輯器時,則請注意儲存為純文字形式。
2、詞頻詞典(如CoreNatureDictionary.ngram.txt)
(1)每一行代表一個單詞或條目,格式遵從[單詞] [單詞的頻次]。
(2)每一行的分隔符為空格或制表符。
少數詞典有自己的專用格式,比如同義詞詞典相容《同義詞詞林擴充版》的文本格式,而轉移矩陣詞典則是一個csv表格。
下文主要介紹通用詞典,如不注明,詞典特指通用詞典。
資料結構Trie樹(字典樹)是HanLP中使用最多的資料結構,為此,我實作了通用的Trie樹,支援泛型、周遊、儲存、載入。
使用者自定義詞典采用AhoCorasickDoubleArrayTrie和二分Trie樹儲存,其他詞典采用基于雙數組Trie樹(DoubleArrayTrie)實作的AC自動機AhoCorasickDoubleArrayTrie。關于一些常用資料結構的性能評估,請參考wiki。
儲存形式詞典有兩個形态:文本檔案(filename.txt)和緩存檔案(filename.txt.bin或filename.txt.trie.dat和filename.txt.trie.value)。
1、文本檔案
·采用明文儲存,UTF-8編碼,CRLF換行符。
2、緩存檔案
(1)就是一些二進制檔案,通常在文本檔案的檔案名後面加上.bin表示。有時候是.trie.dat和.trie.value。後者是曆史遺留産物,分别代表trie樹的數組和值。
(2)如果你修改了任何詞典,隻有删除緩存才能生效。
修改方法HanLP的核心詞典訓練自人民日報2014語料,語料不是完美的,總會存在一些錯誤。這些錯誤可能會導緻分詞出現奇怪的結果,這時請打開調試模式排查問題:
HanLP.Config.enableDebug();
(1)核心詞性詞頻詞典
a)比如你在data/dictionary/CoreNatureDictionary.txt中發現了一個不是詞的詞,或者詞性标注得明顯不對,那麼你可以修改它,然後删除緩存檔案使其生效。
B)目前CoreNatureDictionary.ngram.txt的緩存依賴于CoreNatureDictionary.txt的緩存,修改了後者之後必須同步删除前者的緩存,否則可能出錯
(2)核心二進制文法詞典
a) 二進制文法詞典data/dictionary/CoreNatureDictionary.ngram.txt儲存的是兩個詞的接續,如果你發現不可能存在這種接續時,删掉即可。
B)你也可以添加你認為合理的接續,但是這兩個詞必須同時在核心詞典中才會生效。
(3)命名實體識别詞典
a)基于角色标注的命名實體識别比較依賴詞典,是以詞典的品質大幅影響識别品質。
b)這些詞典的格式與原理都是類似的,請閱讀相應的文章或代碼修改它。