IKAnalyzer总结

1、IKAnalyzer是什么?
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目 Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

2、为什么要分词?
因为搜索这种东西,不是像字符串查询那样,完全按照关键字去对比。比如有一往篇文章,我们要通过一个关键字来搜索这篇文章的内容。首先,我们要对这个文章建立索引,怎么建立的,就是通过分词来建立的,分好词组以后。再通过关键字与每个分词的索引进行比对,有就是有,没得就找不到。如果分词没做好,比如:
在《地藏经》第十二品《见闻利益品》,说读经的时候、没有记忆力

我们用IK分词,结果如下:

在|地藏经|藏经|第|十二|品|见闻|见|闻|利益|品|说|读经|的|时候|没有|有|记忆力|记忆|力|
如果我们输入“地藏”两个字,那么结果就搜索不出来,所以分词对搜索来说,相当重要。

3、解释一下Lucene还有 IK 要解决一个什么问题,以及大致的原理?
我们传统的数据库是把文本整段存在库里面,当是搜索一个词的时候,它使用这个词去大文本里面去匹配,这个匹配过程速度很慢。Lucene是一个全文搜索引擎,它的思路是倒过来的。它做的事情分成两个阶段。第一阶段是把文章,也就是长文本在存储的时候建索引。建索引的过程要把文本按照词来切分。切分的时候是按词源切分,再把每个词都作为索引,指出词在文章中的位置以及跟哪些文章相关联。当有大量文章进来的时候,你可以想象一下有一个字典,这个字典是按照词来排序,每个词都会记录有哪些文章引用到我了,以及文章的哪些部分。这个索引的过程就是Lucene做的一个存储过程。那在这个存储过程中,对于英文而言基本上按照空格来切分就可以了,但是中文是连续性的,所以计算机就需要一个能够识别中文词汇的程序和算法,这就是中文分词器。分词器在文章进入到数据库的时候,对它进行分词。比如用户输入了“咖啡牛排”,那分词器就要把这个切分成“咖啡”和“牛排”。

4、IKAnalyzer下载地址?
IK Analyzer(http://pan.baidu.com/s/1hssEdog),在Java工程中引入jar包即可。

5、 市面上还有一些其他的分词器,那在 IK 有什么优势和特点呢?
IK 最早的时候侧重于名称的搜索,到后期开始向通用的分词器演化。在 IK 2.0 出来的时候,它的速度应该是比较快的,当时能做到每秒60万汉字的处理速度。再后来就是 IK 的词典也比较有优势,匹配算法比较快。IK 的结构也能让你简单的添加和定制词典。一个词,一个换行这样就能生成一个词典,而其他算法需要有词频度的支持,或者把词典编译成“双数组Trie”结构。到了最新的 IK 2012版本,它的优势还在于有一定的歧义识别功能。举个例子,“质量和服务”。在切分的时候可以是“质量、和、服务”也可以是“质量、和服、务”,那最新版的 IK 是可以识别这样的歧义,目前的测试数据统计可以做到95%的准确率。这个和中科院的分词器(98%)来比还是有差距,但是对于中小规模,或者主要业务不是自然语言处理这样的一个公司来说,它是很好用的,它的词表很好管理。虽然搜狗或者百度有很强大的搜索引擎,但是你要执行它的整套算法是要对大量语料进行训练,这个过程是很漫长的。大部分企业是没有能力去建立这样的词库的。而 IK 的词库管理很简单,你有新词的话就往里面添加,它不需要什么词频度,词性等等复杂的定义,所以用户的入门门槛比较低。它的配置也是几个分词器中最简单的一种,这也是为什么在国内比较容易让大家接受。
6、分词的基本原理?
如果让我自己在看IK分词之前自己写一个分词器,那我会怎么做? 如果我会想到的是:比如对”周末有欧冠决赛”做分词处理,人为的分词是:“周末|有|欧冠|决赛”,那为什么会出现这样的分词效果,首先必须有一个词典,词典中可以标记出“周末”、“欧冠”、“决赛”这些词,因为分词器并不具备人工智能的能力,所以它所做的就是把文本和词典中的词进行比较,按照词典中已有的词进行匹配,匹配完成之后即达到了分词的效果。

将一段文字进行IK分词处理一般经过:词典加载、预处理、分词器分词、歧义处理、善后结尾 五个部分。
具体讲解见:http://www.tuicool.com/articles/3Aviyi

关于IKAnalyzer分词原理与代码分析比较好的文章:
http://3dobe.com/archives/44/

你可能感兴趣的:(java)