基于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,用来存放所有的汉字。因此整个词典中的每一个字都只存放了一份,减小了词典的最终大小。