`
lies_joker
  • 浏览: 40860 次
  • 性别: 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具备,但是简单分词不具备。

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

相关推荐

    pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.002)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于ssm框架+mysql+jsp实现的监考安排与查询系统

    有学生和教师两种角色 登录和注册模块 考场信息模块 考试信息模块 点我收藏 功能 监考安排模块 考场类型模块 系统公告模块 个人中心模块: 1、修改个人信息,可以上传图片 2、我的收藏列表 账号管理模块 服务模块 eclipse或者idea 均可以运行 jdk1.8 apache-maven-3.6 mysql5.7及以上 tomcat 8.0及以上版本

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.001)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于MATLAB车牌识别代码实现代码【含界面GUI】.zip

    matlab

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于Web的毕业设计选题系统的设计与实现(springboot+vue+mysql+说明文档).zip

    随着高等教育的普及和毕业设计的日益重要,为了方便教师、学生和管理员进行毕业设计的选题和管理,我们开发了这款基于Web的毕业设计选题系统。 该系统主要包括教师管理、院系管理、学生管理等多个模块。在教师管理模块中,管理员可以新增、删除教师信息,并查看教师的详细资料,方便进行教师资源的分配和管理。院系管理模块则允许管理员对各个院系的信息进行管理和维护,确保信息的准确性和完整性。 学生管理模块是系统的核心之一,它提供了学生选题、任务书管理、开题报告管理、开题成绩管理等功能。学生可以在此模块中进行毕业设计的选题,并上传任务书和开题报告,管理员和教师则可以对学生的报告进行审阅和评分。 此外,系统还具备课题分类管理和课题信息管理功能,方便对毕业设计课题进行分类和归档,提高管理效率。在线留言功能则为学生、教师和管理员提供了一个交流互动的平台,可以就毕业设计相关问题进行讨论和解答。 整个系统设计简洁明了,操作便捷,大大提高了毕业设计的选题和管理效率,为高等教育的发展做出了积极贡献。

    机器学习(预测模型):2000年至2015年期间193个国家的预期寿命和相关健康因素的数据

    这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    婚恋网站 SSM毕业设计 附带论文.zip

    婚恋网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    基于java的戒烟网站答辩PPT.pptx

    基于java的戒烟网站答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    机器学习(预测模型):自行车共享使用情况的数据集

    Capital Bikeshare 数据集是一个包含从2020年5月到2024年8月的自行车共享使用情况的数据集。这个数据集记录了华盛顿特区Capital Bikeshare项目中自行车的租赁模式,包括了骑行的持续时间、开始和结束日期时间、起始和结束站点、使用的自行车编号、用户类型(注册会员或临时用户)等信息。这些数据可以帮助分析和预测自行车共享系统的需求模式,以及了解用户行为和偏好。 数据集的特点包括: 时间范围:覆盖了四年多的时间,提供了长期的数据观察。 细节丰富:包含了每次骑行的详细信息,如日期、时间、天气条件、季节等,有助于深入分析。 用户分类:数据中区分了注册用户和临时用户,可以分析不同用户群体的使用习惯。 天气和季节因素:包含了天气情况和季节信息,可以研究这些因素对骑行需求的影响。 通过分析这个数据集,可以得出关于自行车共享使用模式的多种见解,比如一天中不同时间段的使用高峰、不同天气条件下的使用差异、季节性变化对骑行需求的影响等。这些信息对于城市规划者、交通管理者以及自行车共享服务提供商来说都是非常宝贵的,可以帮助他们优化服务、提高效率和满足用户需求。同时,这个数据集也

Global site tag (gtag.js) - Google Analytics