My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members
Links
注意:如有使用需要请直接checkout source。
ki-analyzer是基于ik-analyzer修改而来的分词库。在我之前使用ik时,因为ik提供的分词效果不能满足我的需求,就在ik之上做了一层封装。这种封装既丑陋并且低效,而随着我的分词需求和ik提供的效果渐行渐远,就打算着手修改ik词库,便有了ki-analyzer。ki-analyzer当然不能适合所有人,就像ik-analyzer不能适合我一样,但如果你正在寻找一个开源的分词程序,可以看看ki-analyzer是否能适合你,以多一种选择。

ki-analyzer功能特点

  1. 对于汉字分词,ik除了支持基本词库匹配以外,还格外处理了可能存在的姓氏、后缀、量词的分析。如果可以将此理解为词性标注,那么它显然做的不够彻底,最为重要的名词、动词、形容词没有被标注出来,使得这种分析毫无实用价值。所以,ki-analyzer直接去掉了相关代码,将这些不可识别的汉字标注为TYPE_CJK_UNKNOWN。
  2. ik只支持全中文的词库,这使得诸如"酷6"、"乐phone"等不能被分成一个词。而我觉得,词库应该支持的不单单是汉字组合,而可以是任意有效字符的组合,也就说,支持的是短语匹配,比如"酷6"、"c#"、".net"、"data mine"都应该可以被切割出来。在我的主题词提取场景中,这种短语粒度的切割就很有必要,否则我只能在分词之上检查每个词条,看是否有构成短语的情况。而就搜索应用来说,这种切割对于查询来说也会得到更好的效果。这也是ki-analyzer诞生的重要原由。
  3. ik内置了一个基本词库,并支持通过配置文件和程序接口外挂词库。ki-analyzer对此更进一步,可以不使用程序提供的内置词库而外置基本词库。另外,分出的词条Lexeme多出一个属性表示该词条是不是来自扩展词库的。以我的应用场景举例,我除了有一个基本词库,还有一个扩展的IT领域词库,而在分词时,我是希望知道这个词条是来自哪个词库的,以便我做不同处理。
  4. ik的IKSegmentation的构造函数有一个isMaxWordLength参数,表示切出的词是不要最大粒度的。对于搜索应用来说,建索引时可以将isMaxWordLength=false,查询时将isMaxWordLength=true。当isMaxWordLength=true,ik在输出词条前会过滤掉文本位置完全属于另一个词条的词条。ki-analyzer将isMaxWordLength扩展成三个参数:isMaxCJKLength、isMaxLetterLength、isMaxPhraseLength,可以针对应用场景分别设置。
  5. ki-analyzer使用了maven,分成ki-core和ki-lucene两个包,方便用户有选择性的使用。

News

  1. 2011.7.4 ki-analyzer0.2.1发布
  2. 2011.7.15 ki-analyzer0.2.2发布,bug fixed

RoadMap

  1. ki作者吐血推荐的IKQueryParser是个与或组合切词的parser,它对中文切词很合适,但对英文切词,这种与或关系显然不如短语更合适。另外,受数量词的影响,IKQueryParser有时切出的词并不完整。因为我目前还没有将 ki-analyzer用到搜索场景中,所以对IKQueryParser还未做修改,接下来会做这方面的修改。
  2. 对于短语切词,将会考虑支持stemming功能。

Powered by Google Project Hosting