基於IK3.2.8
1,詞典的加載和詞典的數據結構
1.1 詞典的加載
IKanalyzer的詞典採用單例模式實現。
可以通過以下方法獲取詞典實例:
Dictionary.getInstance();
Dictionary 實例化的時候將會加載多個詞典,包括:
主詞典(main.dic)姓氏詞典(surname.dic)量詞詞典(quantifier.dic)後綴詞典(suffix.dic)介詞\副詞詞典(prep.dic)停止詞詞典(stopword.dic)
其中主詞典、停止詞詞典可以通過IKAnalyzer.cfg.xml配置文件進行擴展。
1.2 詞典的數據結構:
IKanalyzer 用樹的結構實現詞典,每一個詞典,都以空字符(char)0作爲根節點,將詞的第一個字做爲1級子節點,第二個字作爲2級子節點。如果另有一個詞的第一個字與之前的詞相同,則直接將詞的第二個字放在第一個字下作爲子節點。如果第二個字也有相同的,則把第三個字放在第二個字下作爲子節點。
示意圖如下:
其中,每一個節點用DictSegment實現,當節點的子節點不超過3個時,用數組來存儲子節點,當子節點數量超過3個時,用HashMap來存儲子節點。
同時DictSegment中有一個靜態的MAP,用來存放所有的漢字。因此整個詞典中的每一個字都只存放了一份,減小了詞典的最終大小。