使用過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)這些詞典的格式與原理都是類似的,請閱讀相應的文章或代碼修改它。