`
lies_joker
  • 浏览: 41193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量

阅读更多
选手:IKanalyzer、ansj_seg、jcseg

硬件:i5-3470 3.2GHz 8GB win7 x64

比赛项目:1、搜索;2、自然语言分析



选手介绍:

  1,IKanalyzer
  IKanalyzer采用的是“正向迭代最细粒度切分算法”,是比较常见而且很容易上手的分词器了。一般新手上路学习lucene或者solr都会用这个。优点是开源(其实java分词器多是开源的,毕竟算法都是业内熟知的)、轻量、目前来看没有太大的bug,源码简单易懂,做二次开发也很简单,即使遇到solr/Lucene版本更新,只需要自己稍微修改下实现类就可以通用。缺点是过于简单白痴,只是简单的根据配置好的词库进行分词,没有任何智能可言,连“和服”、“和服务器”这种老梗都破不了。我手头的IKanalyzer是被我进行二次开发后的版本,修改了一些问题,词库读取方式改成树形。IKanalyzer可以作为非智能分词器的代表出场。

    2,ansj_seg
    ansj_seg分词器用的人可能不太多吧,不过个人觉得是开源分词器里最强悍功能最丰富的。作者孙建,我曾在微博上与他有过简单的交流,讨论过ansj_seg分词器的一些小的bug和不足。ansj_seg基于中科院的 ictclas 中文分词算法,智能、高效。虽然现在已经有ictclas 的for java版本,但是 ansj_seg从实现到使用来说要强大的多,而且作者自产自销自用,很多细节和小功能都有考虑,在索引和自然语言分析方面都有很优秀的表现。我手头的ansj_seg是自己修复了一些bug后的版本。ansj_seg可以作为ictclas 算法实现的分词器的代表出场。

    3,jcseg
    jcseg分词器使用的是mmseg算法和fmm算法,这个分词器类似ansj_seg的很多地方,智能、人性化,个人感觉体验要超过同门师兄弟mmseg4j,所以可以作为mmseg算法实现的分词器的代表出场。


比赛开始: 

    中文全文检索,需要考量索引和检索的效果。一般来说索引要做到最细颗粒切分来保留更多的分词、检索要做到最大颗粒切分来保证搜索的准确度。
    自然语言分析,一般要最大颗粒切分分词,并且需要能够发现新词、特殊词



    原句:“禾农玛咖禾农人123456测试人员禾农玛咖1,2,3,4,125张小鹏和服务器一百五十个人都来了”
    “禾农”、“玛咖”是添加的个人词库的词条,核心词库并不包含。

    IKanalyzer分词的效果(分词用-间隔):
    常规分词(最细颗粒切分):禾农-玛咖-禾农-农人-123456-测试-人员-禾农-玛咖-1,2,3,4,125-1-2-3-4-125-张小-鹏-和服务-和服-服务器-服务-器-一百五十-一百五-十个人-十个-人都-都来了-都来-来了-爬山虎-爬山-虎
    智能分词(最大颗粒切分):禾农-玛咖-禾-农人-123456-测试-人员-禾农-玛咖-1,2,3,4,125-张小-鹏-服务器-一百五-十个人-都来了-爬山虎

    ansj_seg分词效果:
    索引分词:[禾/ng, 农玛/nr, 咖/nw, 禾农/userDefine, 人/n, 123456/m, 测试人员/n, 测, 测试, 试, 人, 人员, 员, 禾农/userDefine, 玛咖/userDefine, 1/m, ,, 2/m, ,, 3/m, ,, 4/m, ,, 125/m, 张小鹏/nr, 张, 小, 鹏, 和/c, 服务器/n, 服, 服务, 务, 器, 一百五/userDefine, 一, 百, 五, 十个人/userDefine, 十, 个, 个人, 人, 都来了/userDefine, 都, 来, 了, 爬山虎/n, 爬, 爬山, 山, 虎]
    智能分词:[禾/ng, 农玛/nr, 咖/nw, 禾农/userDefine, 人/n, 123456/m, 测试人员/n, 禾农/userDefine, 玛咖/userDefine, 1/m, ,, 2/m, ,, 3/m, ,, 4/m, ,, 125/m, 张小鹏/nr, 和/c, 服务器/n, 一百五/userDefine, 十个人/userDefine, 都来了/userDefine, 爬山虎/n]
    ansj_seg实际上还有个非常强大的Nlp分词,能够很强大的发现新词,但是性能不稳定,暂时不进行测试。

    jcseg分词效果:
    简单分词:禾农-玛咖-禾农-123456/en-测试-人员-禾农-玛咖-1/en-2/en-3/en-4/en-125/en-张-鹏-和服-务-器-一百五十/m-150/m-个人-都-爬山虎
    复杂分词:禾农-玛咖-禾农-123456/en-测试-人员-禾农-玛咖-1/en-2/en-3/en-4/en-125/en-张小鹏/nr-服务器-一百五十/m-150/m-个人-都-爬山虎


    评分:因为三种分词器的停用词各有不同,所以一些虚词分出的效果不尽相同,不过并不影响评分。
   1, 索引分词的词元。如果一元分词过多,会造成搜索时候搜索到过多的无意义内容,并且会增加索引的体积
    IKanalyzer即使最细颗粒切分也能保证尽可能保留二元分词
    ansj_seg简单粗暴,凡是分割后大于2个字的词都会切分成单个字,比如“爬山虎”会分割为“爬”,“山”,“虎”
    jcseg简单分词一塌糊涂,可以说没有认真做,很任性

    2,智能分词。避免出现歧义的词,最常见的就是“和服”与“和服务器”。
    IKanalyzer不具备智能分词的任何功能,仅仅是根据词库进行分词
    ansj_seg智能分词很优秀,能识别各种词性进行智能分词
    jcseg智能分词效果与ansj_seg类似,但是简单分词做得太差

    3,人名、地名等特殊词。做互联网搜索尤其需要这块功能
    IKanalyzer完全不具备
    ansj_seg具备并且效果很好
    jcseg具备,但是简单分词不具备

    4,自定义词库效果。非常重要的功能,人工干预来提高分词准确度的利器
    IKanalyzer的原理就是基于词库,所以效果很好
    ansj_seg需要先根据核心词库分词,分词后再根据自定义词库进行分词,不具备全切分功能,“禾农玛咖”就是例子
    jcseg类似IKanalyzer

    5,数字和英文
    只有jcseg做到数字智能分词

    6,速度
    考虑到现在CPU性能普遍过剩,即使很大量的数据,分词速度也不会出现本质的区别,所以这块不是比较的重点。实际使用三者不相上下。



    结论:从上述比赛结果和本人实际工作使用来看,ansj_seg是最美好的一个分词器,智能、强悍,对索引和最大颗粒分割都照顾得很到位,词库的树形读取也堪称经典(本人已挪用到IKanalyzer)。只是他的核心词库是经过修正的,理论上不支持自定义词库的。这是ictclas 的硬伤。原作者的补救方案是在核心词库分词后用自定义词库进行分割,效果不尽如人意,让自定义词库的用处大打折扣。本人与作者也讨论过,他说是可以保留全切分的,但是目前已经不再更新代码,令人遗憾。搜索这块,按理说是 索引分词》=检索分词,也就是说,索引分词的结果,要大于并且包含检索分词,但是jcseg并没有做到这一点。如果搜索只追求绝对准确度不考虑搜索结果最大化,jcseg效果还是很好的。在自然语言分析方面,jcseg胜出。
    ansj_seg配配合停用词,无论搜索还是自然语言分析,都是很强悍的存在,只是自定义词库的延后使用,降低了实际工作中的表现。本人之前全线搜索和推荐都用的是ansj_seg,近来由于客户反映搜索准确度问题(其实就是“玛咖”搜不到),只能选择其他方案。多方比较后,决定用IKanalyzer,这是一个妥协的方案,但是目前来说也许是最好的方案,毕竟我们做的是站内搜索,不是海量互联网搜索引擎(其实决心使用IKanalyzer的原因之一是,鼎鼎大名的知乎网用的也是IKanalyzer分词器)。未来做推荐做分类可能会使用jcseg,毕竟只需要做最大颗粒分词就好。
分享到:
评论
1 楼 brada 2017-03-10  
看这篇文章,不知道为啥作者不能做到起码的公正。举个例子哈:
2,智能分词。
jcseg智能分词效果与ansj_seg类似,但是简单分词做得太差
3,人名、地名等特殊词。
jcseg具备,但是简单分词不具备。

这两点都没有比较简单分词啊。
不过也谢谢,我知道该怎么选择了

相关推荐

    IKAnalyzer2012_u6中文分词器jar包

    IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包

    IKAnalyzer2012_u6中文分词器以及手册正式版.zip

    IKAnalyzer2012_u6中文分词器以及手册正式版 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2017/10/29 1:41 doc -a---- 2017/10/29 1:41 414 IKAnalyzer.cfg.xml -a---- 2017/10/29 1...

    IKAnalyzer2012_u6

    这些文件有助于开发者快速理解和部署IKAnalyzer,例如,词典文件(dict)用于定义和更新分词规则,配置文件(如ikAnalyzer.cfg.xml)用于设置分词器的行为,而示例代码可以帮助初学者了解如何在实际项目中集成和使用...

    IKAnalyzer2012_FF_hf1.jar

    解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;...

    IK分词器.IKAnalyzer2012_u6zip

    IK分词器是Java开发的一款高效、灵活的中文分词工具,主要应用于全文检索和自然语言处理领域。在标题中提到的"IKAnalyzer2012_u6zip"是IK分词器的一个特定版本,发布于2012年,并且以.zip格式封装。这个版本的分词器...

    IK Analyzer 2012FF_hf1和IKAnalyzer2012_u6

    IK Analyzer 是一个开源的、基于Java实现的中文分词器,专为Java开发人员设计,广泛应用于搜索引擎、信息检索系统、日志分析等领域。标题提到的 "IK Analyzer 2012FF_hf1" 和 "IKAnalyzer2012_u6" 都是该分词器的...

    IKAnalyzer2012_u6.zip

    3. IKAnalyzer中文分词器V2012_U5使用手册.pdf、IKAnalyzer中文分词器V2012使用手册.pdf:这些文档提供了详细的使用指南,包括如何配置、如何集成到项目中,以及如何自定义词典等。 4. LICENSE.txt、NOTICE.txt:...

    IKAnalyzer2012FF_u1中文分词器

    总之,IKAnalyzer2012FF_u1是一个适用于全文检索的中文分词器,特别适合与Solr等搜索引擎配合使用,提供高效的中文分词服务。其自定义词典功能和动态加载能力使得它能适应各种应用场景,而持续的版本更新则保证了其...

    IKAnalyzer开源轻量级中文分词工具包2012u6

    IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文...

    IKAnalyzer2012_u6.rar

    其2012_u6版本是该分词器的一个重要里程碑,提供了一套完整的解决方案,以满足开发者对中文文本分析的需求。在本文中,我们将深入探讨IKAnalyzer2012_u6的核心特性和使用方法,并结合实际应用场景,展示其在项目集成...

    IKAnalyzer2012_u6 和 jcseg-dict-all两款工具

    IKAnalyzer是一款小而强大的中文分词 的第三方工具包,内含jar包和源文件包和开发文档;还用 jcseg-dict-all也是一款小而强大的中文分词 的第三方工具包,内含jar包和源文件包和开发文档

    IK Analyzer 2012_u6_source

    1. **org.wltea.analyzer.core**:这是 IK Analyzer 的核心模块,包含了分词器类、词典管理类以及相关的算法实现。 - `Analyzer` 类是整个分词系统的入口,提供了对输入文本进行分词的接口。 - `IKSegment` 类是...

    ikanalyzer-solr8.4.0_solr8_solr_ikanalyzer_中文分词_

    ikanalyzer 是一个专门为Java开发的中文分词器,它基于 Lucene 库,适用于各种文本处理和搜索引擎场景。在 Solr 环境中,ikanalyzer 的作用是为中文文档提供精确的分词服务,从而提升搜索质量和效率。Solr8.4.0 是 ...

    原版_IK_Analyzer _2012_FF_hf_1

    **IK Analyzer 2012 FF hf 1:专业中文分词器** IK Analyzer是一款针对中文文本处理的开源分词器,2012 FF hf 1是其一个特定版本,专为处理中文文本的细分任务而设计。该版本包含了完整的功能和优化,确保在分词...

    IKAnalyzer2012_u6111.zip 中文翻译的

    IKAnalyzer2012_u6111.zip 是一个基于Java的开源中文分词器,其主要功能是对中文文本进行有效的分析和分词处理。这个版本的IK Analyzer是2012年的更新版,编号u6111,意味着它是经过多次改进和优化的版本。在Java...

    IKAnalyzer 2012FF_hf1 中文分词器

    IKAnalyzer 2012FF_hf1 中文分词器 IKAnalyzer 2012FF_hf1 中文分词器

    IK Analyzer 2012FF_hf1.7z

    IK Analyzer 是一个开源的、基于Java实现的中文分词器,专为中文信息处理而设计。这个工具在处理中文文本时表现出色,尤其在Solr这样的搜索引擎中,它作为一个插件,提供了对中文词汇切分的强大支持。"2012FF_hf1.7z...

    IKAnalyzer2012FF_hf1.zip

    IK Analyzer是一款开源的、基于Java语言开发的轻量级中文分词器,主要用于Java环境下对中文文本的分词处理,广泛应用于搜索引擎、文本分析等场景。它提供了灵活的扩展机制,可以方便地定制词典和分词策略。 描述中...

Global site tag (gtag.js) - Google Analytics