一、IKanalyzer简介
IK analyzer是lucence的中文分词部件。主要才用了正向最大匹配算法(词典 + 文法分析),即从左到右进行最大匹配,支持中、日、韩、英文处理。其处理流程如下图所示。预处理主要是对输入文本进行必要的处理,比如大小写转换,全、半角转换。它主要有三个分词器:CJK分词器(处理中、韩文)、量词分词器(处理数字与量词单位的组合,如“一丈”)、英文分词器(处理英文及阿拉伯数字)。
二、分词程序原理
1、切分:
从最大词到最小词层层迭代切分,比如词:“中华人民共和国成立了”,首先到词库中检索该词的最大分割词,即分割为:“中华人民共和国”、“成立了”,然后对“中华人民共和国”切分成“中华人民”和“人民共和国”,以此类推。最后,“中华人民共和国成立了”切分成:“中华人民 | 中华 | 华人 | 人民 | 人民共和国 | 共和国 | 共和 | 成立 | 立了”,若按最大切分,结果为:“中华人民共和国 | 成立 | 立了”。
2、词典存储:
源码自含main核心词典,另外用户可以按需添加扩展词典。词典的存储才用了前缀树数据结构,对应的数据结构如下图所示,除了根节点,任意一个子节点都包含两个数据项:nodeChar表示该节点对应的字符,nodeState表示根节点到本节点是否是一个完整的词。