【SQL开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了SQL开源代码-采访IK Analyzer 中文分词器开源项目作者林良益(十三) - 计算机教材的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
众所周知全文搜索几乎已经成为每个网站的必须提供的基本功能之一用Lucene构造一个“索引
查询”的应用是常见的java解决方案目前由linliangyi2007创立的IK Analyzer是最好的Lucene 中文分词器之一。
首先介绍一下IKAnalyzerIKAnalyzer是一个
开源的基于java语言开发的轻量级的中文分词工具包。
从2006年12月推出1.0版开始IKAnalyzer 已经推出了3个大版本。
最初它是以
开源项目Luence为应用主体的结合词典分词和文法分析算法的中文分词组件。
最近刚刚发布了 3.1.1Stable稳定版本新版本的IKAnalyzer 则发展为面向Java的公用分词组件独立于Lucene项目同时提供了对Lucene的默认优化实现。
linliangyi2007 林良益 是一位资深的Java开发者和优秀
开源开发者 JavaEye非常荣幸的采访了他。
linliangyi2007 林良益 博客http://linliangyi2007.javaeye.com/ 欢迎大家推荐更多
开源项目给我们支持中国的
开源项目发展发站内短信给JavaEye管理员或者发信到webmasterjavaeye.com谢谢。
目 录 - 采访IK Analyzer 中文分词器
开源项目作者linliangyi2007 linliangyi2007 林良益 介绍 采访IK Analyzer 中文分词器
开源项目作者linliangyi2007 JavaEye1. hilinliangyi2007 你好非常荣幸能够采访你。
你能介绍一下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稳定版本。
JavaEye2. IK Analyzer 中文分词器项目的特点和应用的主要方面是哪些新版本做了哪些修正 linliangyi2007IK Analyzer 是更多的考虑了互联网用户在产品及名址信息搜索这块的应用IK特别适用于搜索商家产品名址如商品交易美食娱乐电子地图等因为它是基于这样的应用诞生的。
IK在一开始的设计的时候它有一个隐形的目标是对数词量词专有名词的增强处理这是由于它的基于
web gis搜索的需求定位决定的。
如果持续使用IK的用户应该会发现IK的早期版本对数量词专有名词的切分是整体输出的举个例子“2009年12月”在IK1.x版本的时候是作为一个词元输出的对未知的路名人名商店公司名称都是如此因此很多用户说IK早先版本的分词效果“看起来”特别好注意我这里说的是“看起来 但搜索起来就未必了。
由于lucene搜索的倒排搜索结构决定了lucene搜索的速度优势在于“全词匹配”而非like匹配这就造成了过于粗粒度的输出分词结果好看但用户经常搜索不到东西在饱受公司客户“无情的”打击之后IK后续的版本对此做了很大的改进。
后期版本的切分越来越细碎越来越不“漂亮”了这点在3.0尤其明显但保证了用户在分词搜索中的召回率。
问题是这点的改进会带来另一方面的负面影响词打得太散搜索的准确度下降了为此IK3.0从问题的另一角度来提供了相对的解决方案。
JavaEye3. 能否详细介绍一下这个解决
方案 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的作者说的一句话没有最好的分词器只有最适合于某个领域的分词器。
JavaEye4. 你能分析和比较一下类似的其他中文分词器项目吗 linliangyi2007简单说一下吧 JE-MManalyzer它的算法具有歧义分析比较适合做垂直搜索和信息挖掘。
他的中文名称是“极易”开发者的理念是-简单即是美。
中科院的分词器中科院的分词器很牛其切分结果明显基于语义分析。
paodingpaoding的结构设计的非常灵活适合于对其进行
开源改造。
mmseg4j单从mmseg4j 的项目介绍上看它是一个很纯粹的基于词典分词的实现既有细粒度的切分也有最大长度的切分。
应该说是一个
学习词典分词的很好的典范。
JavaEye5. IK Analyzer 未来的roadmap是什么 你对 IK Analyzer的规划和目标是什么 linliangyi2007就IK后期的roadmap而言主要致力于两点一个是词典的整理优化这块工作量是巨大的且是枯燥的呵呵。
3.1.版本后词条是27万但其中有不少的“不合格”词语需要被剔除。
第二是有可能引入词频和字频的统计算法来优化对未知词语的处理这个还处于理论阶段。
后期的想法可能会考虑牺牲一定的性能来换取分词效果从企业应用和中小型互联网应用而言10万汉字/秒以上的处理速度应该都能够满足需求了。
JavaEye6. 你对整个lucene搜索领域怎么看能推荐几个你觉得比较关注的搜索领域热点吗 linliangyi2007lucene是一个相当优秀的全文检索核心框架基于它的应用是很多的。
就lucene自己而言已经发展出了nutch面向互联网solr面向企业集群等多种应用这些也都是全文索引领域最经常用到的。
而实际上lucene的索引特性还可以用在更多方面比如你可以用它了做web gis的地图引擎这是一个已经成功实现的商用项目。
因此对lucene的关注我觉得应该开放自己的思维。
因为索引在
计算机应用中领域是非常广泛的大家应该不拘一格。
这点要归功于google对数据搜索应用概念的推广深入人心。
JavaEye7. 未来搜索引擎的发展方向会有哪些呢 linliangyi2007大型互联网应用比如google他们的应该不仅是分词器了应该是一个自然语言处理系统了包括了自我学习能力。
先说搜索的内容形式会多元化实际上已经有国外的公司在研发了基于音频的图像的搜索如通过歌词搜索音频内容从搜索的用户体验上会结合用户的使用习惯给出搜索结果。
也就是说在未来有可能你和我在google上搜索相同的词语出来的结果会有不同。
还有就是搜索形式可能会更多有针对特定类型信息的垂直搜索信息挖掘也可能是针对SNS方式的人际网络搜索。
其实搜索的本质就是按照用户的视角将纷繁的数据进行合理的组织再呈现在用面前 从最早的MIS系统的
sql搜索到现在一直如此。
至于搜索领域google这样的大公司基于新的搜索技术的公司未来有可能有机会超过他们我想最终的
网络世界一定是大一统的。
大家以后应该是买数据赚钱而不是服务了。
服务的方式是有限的服务的内容数据是无限的是需要人们创造和提供的。
JavaEye8. 目前IK Analyzer 是你一个人开发还是有其他合作开发者现在你平均每天花在IK Analyzer 上的时间大概是多久呢 linliangyi2007IK目前就我一人我也一直在寻找合作者。
JavaEye: 希望什么样的合作者最关键的是兴趣和恒心吧。
我基本上每天都会花至少30分钟来解答网友的
问题然后如果需要就进行修订。
平时有了新想法就会进行试验如果可行就会发布新版本。
有时候一天会有20多封邮件咨询问题当然有时候一周才一封呵呵。
JavaEye9. 目前大概有多少用户在使用IK Analyzer linliangyi2007初步估计从06年底到现在应该有1万多用户。
JavaEye很厉害 主要都是国内的毕竟是中文的。
JavaEye10. 为什么给这个项目起IK Analyzer 这个名字呢 linliangyi2007呵呵这个问题问的好我很喜欢Diablo尤其是Diablo II我玩暗黑7年了。
暗黑中有个角色野蛮人哦它的终极套装就是“不朽之王Immortal King”IK诞生的那一天刚好是我打出一整套套装的那一天于是就用这个套装的名字做纪念了呵呵感谢暴雪感谢JavaEye感谢CCAV。
。
。
听说java也是这么命名的当时的设计人员正在喝java咖啡来着???? JavaEye11. 你的开发环境是什么 使用什么操作
系统和IDE linliangyi2007我用Eclipse操作系统多是windows偶尔用linux 客户多使用unix。
JavaEye12. 通过开发IK Analyzer 你对中国的
软件开发人员做
开源项目有什么感受和想法吗 linliangyi2007现在大家日
常用的开发平台95以上都是国外的组织贡献的中国在这块是需要赶上的。
中国的
开源比前几年有了明显的发展但还需要大家一起来参与。
希望大家能逐步型成贡献
代码的习惯其实
开源不一定每个人都有做一个项目参与其中就好 哪怕就一小段的
代码。
linux能成功它的很多核心
代码都被阅读过并通过网友们进行了补充和修订。
中国的
开源氛围薄弱我觉得更多的是中国传统思想中对知识保守的因素师傅对徒弟都要留一手何况是同业者呢。
但我要说思想的交互是互利的知识在开放的氛围中增长的速度要远超过封闭的开发 我经常跟我的同事进行头脑风暴大家都很有收获的碰撞后的思想往往能产生意料之外的好结果。