IKanalyzer中文分詞源碼分析<一>字典的數據結構

基於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,用來存放所有的漢字。因此整個詞典中的每一個字都只存放了一份,減小了詞典的最終大小。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章