IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量
转自:http://lies-joker.iteye.com/blog/2173086
选手: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,毕竟只需要做最大颗粒分词就好。
IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量的更多相关文章
- Solr入门之(8)中文分词器配置
Solr中虽然提供了一个中文分词器,但是效果很差,可以使用IKAnalyzer或Mmseg4j 或其他中文分词器. 一.IKAnalyzer分词器配置: 1.下载IKAnalyzer(IKAnalyz ...
- Solr的学习使用之(三)IKAnalyzer中文分词器的配置
1.为什么要配置? 1.我们知道要使用Solr进行搜索,肯定要对词语进行分词,但是由于Solr的analysis包并没有带支持中文的包或者对中文的分词效果不好,需要自己添加中文分词器:目前呼声较高的是 ...
- solr4.7中文分词器(ik-analyzer)配置
solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器. 一.版本信息 solr版本:4.7.0 需 ...
- Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在p ...
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- Lucene的中文分词器IKAnalyzer
分词器对英文的支持是非常好的. 一般分词经过的流程: 1)切分关键词 2)去除停用词 3)把英文单词转为小写 但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好. 国人林良益写的IK Ana ...
- 2.IKAnalyzer 中文分词器配置和使用
一.配置 IKAnalyzer 中文分词器配置,简单,超简单. IKAnalyzer 中文分词器下载,注意版本问题,貌似出现向下不兼容的问题,solr的客户端界面Logging会提示错误. 给出我配置 ...
- elasticsearch中文分词器ik-analyzer安装
前面我们介绍了Centos安装elasticsearch 6.4.2 教程,elasticsearch内置的分词器对中文不友好,只会一个字一个字的分,无法形成词语,别急,已经有大拿把中文分词器做好了, ...
- ElasticSearch安装中文分词器IKAnalyzer
# ElasticSearch安装中文分词器IKAnalyzer 本篇主要讲解如何在ElasticSearch中安装中文分词器IKAnalyzer,拆分的每个词都是我们熟知的词语,从而建立词汇与文档 ...
随机推荐
- Ubuntu 16.04安装SoapUI工具进行接口测试(Web Service/WSDL/RESTfull)
SoapUI是一个跨平台接口测试工具,官方提供开源版本和商业版本.可以用来测试WSDL/RESTfull等接口. 替代的工具有JMeter. 一般用于WSDL的接口测试比较多,基于XML的形式,且这类 ...
- mysql排序关于英文字母abcd..xyz排序。
mysql会自动进行比如pxj,pyj. 再根据p进行排序时候,会自动进行第二个字母的排序 select * from tbl_actor where first_char like 'p%' ord ...
- 将mysql数据库数据导出为.sql文件
打开Navicat ,在我们要到处的数据上面右击鼠标,然后弹出的快捷菜单上点击“转储SQL 文件”,在再次弹出的子菜单项中选择第一个“数据跟结构”.
- jQuery源代码解析(1)—— jq基础、data缓存系统
闲话 jquery 的源代码已经到了1.12.0版本号.据官网说1版本号和2版本号若无意外将不再更新,3版本号将做一个架构上大的调整.但预计能兼容IE6-8的.或许这已经是最后的样子了. 我学习jq的 ...
- Dell PowerEdge RAID Controller (PERC) | Dell
Dell PowerEdge RAID Controller (PERC) The Dell™ PERC (PowerEdge™ RAID Controller) fami ...
- STM32F104VG (一)中断与外部中断
一.基础知识 1.ARM的中断优先级分硬件优先级和软件优先级两种 当中软件优先级又由抢占优先级和响应优先级组成 2.中断的优先级採用编号小优先的原则. 3.普通情况: 1).假设设定了软件优先级.先看 ...
- Justinmind使用教程(2)——计算表达式及条件用法
Justinmind的计算表达式以及条件condition的使用对于刚開始学习的人而言比較麻烦. 结合网上了一个教程本文主要针对计算器演示样例进行计算表达式以及条件的使用. 实现目标:依据单位价格(静 ...
- Scala界面事件处理
演示样例代码: import scala.swing.SimpleSwingApplication import scala.swing.MainFrame import scala.swing.Bu ...
- 纯css3实现美化复选框和手风琴效果(详细)
关键技术点和原理: 原理就是把 checkbox或 radio 给隐藏掉 ,然后给选框 绑定一个label标签. 然后用label标签作为容器,在里面放一个:before或一个after 用bef ...
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
算法提高 矩阵乘法 时间限制:3.0s 内存限制:256.0MB 问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要 ...