阅读:78367次   评论:69条   更新时间:2011-05-26    
众所周知,全文搜索几乎已经成为每个网站的必须提供的基本功能之一,用Lucene构造一个“索引-查询”的应用是常见的java解决方案,目前由linliangyi2007创立的IK Analyzer是最好的Lucene 中文分词器之一。

首先介绍一下IKAnalyzer:IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer 已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。最近刚刚发布了 3.1.1Stable稳定版本,新版本的IKAnalyzer 则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

linliangyi2007 (林良益) 是一位资深的Java开发者和优秀开源开发者, JavaEye非常荣幸的采访了他。

linliangyi2007 (林良益)  博客:http://linliangyi2007.iteye.com/

欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,发站内短信给JavaEye管理员或者发信到webmaster@iteye.com,谢谢。

采访IK Analyzer 中文分词器开源项目作者linliangyi2007 Top

JavaEye:1. hi,linliangyi2007 你好,非常荣幸能够采访你。你能介绍一下IK Analyzer 中文分词器开源项目是如何创立的吗?

linliangyi2007:好的,这个要从和lucene的结缘开始说起了,大概05年左右,开始是为了完成一个电信的信息管理系统,里面需要用到全文检索的。后来发现对中文搜索,lucene没有很好的分词支持。当时我发现最棒的就是车东的CJK了,应该说,他的blog文章对我的IK Analyzer 诞生起了很大的影响。 后来,我们公司开始做一个基于web gis的本地信息搜索网站的互联网应用,这就促使我萌生了自己写一个中文分词器的想法。最开始是基于对词典的匹配,后来对词典中未出现的词语就有了进一步处理的想法,IK Analyzer 的设计理念也是一步一步形成的。这期间也结合了很多互联网用户的搜索体验的反馈。

有趣的是,我的两位好朋友,也就是paoding分词器的作者和JE-MMAnalyzer分词器的作者,都在基本相同的时期开始了各自的分词器研究。  三个人也就热火朝天的讨论开了,有交流,也有比较。因为有了这样一个圈子和氛围,也使的IK分词器一直从06年底开始,不断的更新到现在。 大家的处理速度,算法的优化,还有词典的整理一直在持续。当然,由于大家都有自己的工作(吃饭问题很实际啊),期间都有一段时间,暂停了项目的发展,IK2.0是在07年初发布的,3.0则到了09年,最近刚刚发布了 3.1.1Stable稳定版本


JavaEye:2. IK Analyzer 中文分词器项目的特点和应用的主要方面是哪些?新版本做了哪些修正?

linliangyi2007:IK Analyzer 是更多的考虑了互联网用户在产品及名址信息搜索这块的应用,IK特别适用于搜索商家,产品,名址,如商品交易,美食,娱乐,电子地图等,因为它是基于这样的应用诞生的。IK在一开始的设计的时候,它有一个隐形的目标,是对数词,量词,专有名词的增强处理,这是由于它的基于web gis搜索的需求定位决定的。 如果持续使用IK的用户,应该会发现,IK的早期版本对数量词,专有名词的切分,是整体输出的,举个例子:“2009年12月”,在IK1.x版本的时候,是作为一个词元输出的,对未知的路名,人名,商店,公司名称都是如此,因此很多用户说,IK早先版本的分词效果“看起来”特别好,注意,我这里说的是“看起来", 但搜索起来就未必了。

由于lucene搜索的倒排搜索结构,决定了lucene搜索的速度优势在于“全词匹配”而非like匹配,这就造成了过于粗粒度的输出分词结果好看,但用户经常搜索不到东西,在饱受公司客户“无情的”打击之后,IK后续的版本对此做了很大的改进。后期版本的切分越来越细碎,越来越不“漂亮”了,这点在3.0尤其明显,但保证了用户在分词搜索中的召回率。问题是,这点的改进会带来另一方面的负面影响,词打得太散,搜索的准确度下降了,为此IK3.0从问题的另一角度来提供了相对的解决方案。

JavaEye:3. 能否详细介绍一下这个解决方案?

linliangyi2007:好的,使用lucene搜索的开发者应该注意到,分词器在其中扮演着两个角色:一个是在lucene建立索引库时候,对文档进行切分。这时候,细粒度的切分,保证信息能尽可能的被“查找到”;另一个使用分词器的过程,实在用户输入搜索关键字的过程。分词器要多关键字进行分词,而后同索引匹配。 IK3.0就在这个地方为用户提供了一个相对优化的搜索方式,一个是IKQueryParser,这个也是我在blog中吐血推荐的, 呵呵。对于大多普通的搜索应用,它能为用户提供不错的搜索关键字组合。

举个例子,用户搜索“永和服装饰品”,对于分词器而言,它会切分出“永和”“和服”“服装”“装饰”“饰品”等。但分词器没有判断的能力(实际上,目前所有的分词器,即便有部分排除歧义的功能,也不完善),如果强制分词器进行排歧义处理,则可能会得出完全错误的结果。IK则是尝试给出所有可能的方案,在IKQueryparser 中,它不是简单的返回所有分词结果的组合,而是建立起一个分词树,将有可能的组合放在一起,它的输出会类似于这样:(“永和” && “服装” &&  “饰品”) || (“和服”&& “装饰”), 通过这个搜索逻辑去索引中进行匹配,在现实中,我们完全可以假设只有合理的词元会搭配在一起, 那么,不合理的搭配,它的就可能不会出现,或者即使出现,但匹配度较低。 因此,IK3.0又给出了一个IKSimilarity的相似度评估器,来提高多词匹配的优先度,这样的搜索,就能形成高匹配度的文档,出现在前面,低匹配度的在后面,不合理的匹配就不出现的结果。这个也是自己的项目实战经历了。

IKSimilarity是实现了lucene Similarity的接口的,在进行搜索前,使用IndexSearch的API进行设置就好,这个在IK3.0的DEMO中有详细的例子说明,至此,IK3.0在尽可能保证文档召回率的前提下,实现了相关文档搜索匹配度的优先。当然,这不能绝对意义上杜绝不正确信息被搜索出来(PS:就目前各大主要搜索引擎的实现也是这样的)。在分词器的设计中,应该说不尽是IK,其他分词器的作者也是绞尽脑汁的想了很多, 但目前还没有特别完美的方案。对IK而言,我也收到了来至各方面用户的反馈,有用在互联网搜索领域的,有用于企业内部搜索的,还有做语言分析的,但就我个人的感觉而言,目前很难在一个分词器中,实现多种目标。因此,我很赞同paoding的作者说的一句话,没有最好的分词器,只有最适合于某个领域的分词器。

JavaEye:4. 你能分析和比较一下类似的其他中文分词器项目吗?

linliangyi2007:简单说一下吧:

JE-MManalyzer:它的算法具有歧义分析,比较适合做垂直搜索和信息挖掘。他的中文名称是“极易”,开发者的理念是-简单即是美。

中科院的分词器:中科院的分词器很牛,其切分结果明显基于语义分析。

paoding:paoding的结构设计的非常灵活,适合于对其进行开源改造。

mmseg4j:单从mmseg4j 的项目介绍上看,它是一个很纯粹的基于词典分词的实现,既有细粒度的切分,也有最大长度的切分。应该说,是一个学习词典分词的很好的典范。

JavaEye:5. IK Analyzer 未来的roadmap是什么? 你对 IK Analyzer的规划和目标是什么?

linliangyi2007:就IK后期的roadmap而言,主要致力于两点,一个是词典的整理优化,这块工作量是巨大的,且是枯燥的,呵呵。3.1.版本后词条是27万,但其中有不少的“不合格”词语,需要被剔除。第二是,有可能引入词频和字频的统计算法,来优化对未知词语的处理,这个还处于理论阶段。

后期的想法,可能会考虑牺牲一定的性能,来换取分词效果,从企业应用和中小型互联网应用而言,10万汉字/秒以上的处理速度,应该都能够满足需求了。  

JavaEye:6. 你对整个lucene搜索领域怎么看?能推荐几个你觉得比较关注的搜索领域热点吗?

linliangyi2007:lucene是一个相当优秀的全文检索核心框架,基于它的应用是很多的。就lucene自己而言,已经发展出了nutch(面向互联网),solr(面向企业集群)等多种应用,这些也都是全文索引领域最经常用到的。而实际上,lucene的索引特性还可以用在更多方面,比如,你可以用它了做web gis的地图引擎,这是一个已经成功实现的商用项目。

因此,对lucene的关注,我觉得应该开放自己的思维。因为索引在计算机应用中,领域是非常广泛的,大家应该不拘一格。这点要归功于google对数据搜索应用概念的推广,深入人心。

JavaEye:7. 未来搜索引擎的发展方向会有哪些呢?

linliangyi2007:大型互联网应用,比如google,他们的应该不仅是分词器了,应该是一个自然语言处理系统了,包括了自我学习能力。

先说搜索的内容形式,会多元化,实际上已经有国外的公司在研发了,基于音频的,图像的搜索,如通过歌词搜索音频内容,从搜索的用户体验上,会结合用户的使用习惯给出搜索结果。也就是说,在未来,有可能你和我在google上搜索相同的词语,出来的结果会有不同。

还有,就是搜索形式可能会更多,有针对特定类型信息的垂直搜索,信息挖掘,也可能是针对SNS方式的人际网络搜索。 其实搜索的本质就是按照用户的视角将纷繁的数据进行合理的组织,再呈现在用面前; 从最早的MIS系统的sql搜索,到现在,一直如此。至于搜索领域google这样的大公司,基于新的搜索技术的公司未来有可能有机会超过他们,我想,最终的网络世界一定是大一统的。大家以后应该是买数据赚钱,而不是服务了。服务的方式是有限的,服务的内容(数据)是无限的,是需要人们创造和提供的。

JavaEye:8. 目前IK Analyzer 是你一个人开发?还是有其他合作开发者?现在你平均每天花在IK Analyzer 上的时间大概是多久呢?

linliangyi2007:IK目前就我一人,我也一直在寻找合作者。(JavaEye: 希望什么样的合作者?)最关键的是兴趣和恒心吧。我基本上每天都会花至少30分钟来解答网友的问题,然后如果需要,就进行修订。平时有了新想法,就会进行试验,如果可行,就会发布新版本。有时候一天会有20多封邮件咨询问题,当然有时候一周才一封,呵呵。


JavaEye:9. 目前大概有多少用户在使用IK Analyzer?

linliangyi2007:初步估计从06年底到现在,应该有1万多用户。(JavaEye:很厉害  )  主要都是国内的,毕竟是中文的。

JavaEye:10. 为什么给这个项目起IK Analyzer 这个名字呢?

linliangyi2007:呵呵,这个问题问的好,我很喜欢Diablo,尤其是Diablo II,我玩暗黑7年了。暗黑中有个角色,野蛮人哦,它的终极套装就是“不朽之王Immortal King”,IK诞生的那一天,刚好是我打出一整套套装的那一天,于是就用这个套装的名字做纪念了,呵呵,感谢暴雪,感谢JavaEye,感谢CCAV。。。    听说java也是这么命名的,当时的设计人员正在喝java咖啡来着……

JavaEye:11. 你的开发环境是什么? 使用什么操作系统,和IDE?

linliangyi2007:我用Eclipse,操作系统多是windows,偶尔用linux, 客户多使用unix。

JavaEye:12. 通过开发IK Analyzer ,你对中国的软件开发人员做开源项目有什么感受和想法吗?

linliangyi2007:现在大家日常用的开发平台,95%以上都是国外的组织贡献的,中国在这块,是需要赶上的。中国的开源比前几年有了明显的发展,但还需要大家一起来参与。希望大家能逐步型成贡献代码的习惯,其实开源不一定每个人都有做一个项目,参与其中就好, 哪怕就一小段的代码。linux能成功,它的很多核心代码都被阅读过,并通过网友们进行了补充和修订。中国的开源氛围薄弱,我觉得更多的是中国传统思想中,对知识保守的因素,师傅对徒弟都要留一手,何况是同业者呢。但我要说,思想的交互是互利的,知识在开放的氛围中增长的速度要远超过封闭的开发, 我经常跟我的同事进行头脑风暴,大家都很有收获的,碰撞后的思想,往往能产生意料之外的好结果。


JavaEye:13. 作为一个JavaEye老会员,你对JavaEye网站有什么建议和意见吗?

linliangyi2007:希望javaeye更专业更有深度。对新人创造更包容,更宽松的咨询空间,对老人们则是思想碰撞,温故知新的场所。

linliangyi2007 (林良益) 介绍 Top

我是一个土生土长的福州人,从小到大,小学到大学就没离开过福州。目前在一家开发证券软件的公司,担任公司的架构设计这方面的工作,已经工作整整8年,从大学三年级,我拿到自己的第一本java教科书开始,就迷恋上java了,最早是做网络游戏,后来在电信行业从事企业门户系统建设,然后到了一家互联网工作,从事webgis的设计开发,最近才开始做证券类的软件。

从2005年开始对开源项目产生了浓厚的兴趣,除了喜欢研究源代码外,还先后贡献了两个开源项目 “IKAnalyzer中文分词器” 和 “IKExpression 动态表达式解析器” 地址 : http://linliangyi2007.iteye.com/blog/337069

我很喜欢摆弄电脑硬件类,玩电子游戏,我喜欢玩Diablo,尤其是Diablo II,我折腾了7年咯,呵呵。另外,看技术书也算是我的爱好吧,经常上open source的网站看英文文档,因为信息比较新。

欢迎访问 linliangyi2007 (林良益) 的博客:Java、咖啡与茶
http://linliangyi2007.iteye.com/ 除了技术和游戏,还有很多美食方面的介绍,是一个美食家。

下面的照片是  linliangyi2007 (林良益)   咖啡@上海浦东机场



评论 共 69 条 请登录后发表评论
69 楼 bohaiwaiwai 2012-06-26 11:19
很有用,但是我想同时知道mmseg4j 的区别
68 楼 罗卜头 2011-12-12 01:52
67 楼 Samurai 2011-05-16 23:11
真的很好用,感觉比我以前用的标准分词器速度也快了不少
顶林师傅。。。
在福州做证券,不会是新意科技吧?嘿嘿
66 楼 carl_java 2011-04-19 20:26
      正在使用IK的中文分词,比较了lucence以及其它几种分词器。感觉还是IK的比较简单好用。感谢支持。以后也想支持一下开源技术。
65 楼 pop1030123 2011-04-17 11:20
IK竟然是野蛮人精华套装的简写,还真没有猜出来。一直玩的中文版本。
64 楼 greenwen 2011-04-06 16:43
非常感谢这位牛人,支持中国的开源项目
63 楼 yongjun 2011-03-24 17:28
感谢更新,3.1后让我不在烦恼
62 楼 flounder 2011-02-22 21:46
顶一个,我们公司都在用你们中文分析,谢谢你!
61 楼 亦梦亦真 2011-01-29 14:26
我也在使用IK Analyzer 真的是一个很不错的分词器
60 楼 flysunmicro 2011-01-20 13:46
顶一个,确实不错。
59 楼 yanxin64 2010-12-28 10:02
加油,向您学习:)
58 楼 淹不死の鱼 2010-11-25 20:05
图书馆领域用什么分词器比较合适?
57 楼 wh64909569 2010-11-19 08:43
学习lucene分词器就是从IK开始的,支持~~
56 楼 hanzhenggang 2010-11-18 10:31
支持!!!
55 楼 tonynju 2010-11-06 18:34
支持中国自己的开原项目
相信语言研究和搜索的结合是网络智能的先驱
54 楼 yjl1008 2010-10-19 13:02
不错,好样的
53 楼 lku1314 2010-10-04 21:39
我要加油 !!!
52 楼 mingtian1818 2010-09-28 19:09
奋发上进ing...
51 楼 chinamook 2010-09-26 08:48
牛人,实在太厉害了
50 楼 jack547155187 2010-09-25 16:04
现在正在学习NLP,准备尝试一下用IK分词
49 楼 aoliwen521 2010-09-15 09:12
无私奉献的人!!
48 楼 mengxing0929 2010-07-23 17:28
47 楼 tamsiuloong 2010-07-23 09:19
哥们儿真不错的哈。有前途
46 楼 CodingMouse 2010-07-22 12:38
感谢林良益的出色作品!
45 楼 fengfeng925 2010-07-20 14:29
赞叹一个,真正的牛人
44 楼 eltonto 2010-07-09 15:49
厉害,非常厉害
43 楼 yiihsia 2010-07-04 10:42
牛人~~~很佩服
42 楼 bastengao 2010-06-26 13:24
牛人,高手。无私奉献啊,没有你们的贡献,中文分词都不知道怎么办?
41 楼 tamsiuloong 2010-05-24 08:50
此人就是linyiliang啊
40 楼 wangyalei 2010-05-16 14:44
Analyzer 会过一次 感觉不错 顶一个 

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics