对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次为:StandardAnalyzer、ChineseAnalyzer、 CJKAnalyzer、IK_CAnalyzer、MIK_CAnalyzer、MMAnalyzer(JE分词)、PaodingAnalyzer。
单纯的中文分词的实现一般为按字索引或者按词索引。按字索引顾名思义,就是按单个字建立索引。按词索引就是按词喽,根据词库中的词,将文字进行切分。车东的交叉双字分割或者叫二元分词我觉得应该算是按字索引的改进,应该还是属于字索引的范畴吧。
分词准确性的评估比较难,很难有统一的标准,不同应用的要求也不同,这个统一以“2008年8月8日晚,举世瞩目的北京第二十九届奥林匹克运动会开幕式在国家体育场隆重举行。”为例说明。
分词效率,统一使用《射雕英雄传》的全文文本为例说明。呵呵。对于按词索引的分析器,使用统一的基本词库,词汇量为227,719个。在开发环境下运行,性能不准确,但可比较相对值。
分析器:
按字 |
StandardAnalyzer |
Lucene自带的标准分析器。 |
ChineseAnalyzer |
Lucene contrib中附带的分析器,与StandardAnalyzer类似。注意是类似啊,还是有区别的。 |
|
CJKAnalyzer |
Lucene contrib中附带的二元分词 |
|
按词 |
IK_CAnalyzer、MIK_CAnalyzer |
http://lucene-group.group.javaeye.com/group/blog/165287。使用版本为2.0.2 |
MMAnalyzer |
现在能找到的最新版本是1.5.3。不过在原始网站已经找不到下载了,而且据说声明为不提供维护和支持。因为谈论的人比较多,所以列出来。但在使用中感觉不太稳定。 |
|
PaodingAnalyzer |
庖丁解牛。http://code.google.com/p/paoding/downloads/list。使用版本为2.0.4beta。 |
分词准确性:
StandardAnalyzer |
2008/年/8/月/8/日/晚/举/世/瞩/目/的/北/京/第/二/十/九/届/奥/林/匹/克/运/动/会/开/幕/式/在/国/家/体/育/场/隆/重/举/行/ |
一元分词,没什么好说的。 |
ChineseAnalyzer |
年/月/日/晚/举/世/瞩/目/的/北/京/第/二/十/九/届/奥/林/匹/克/运/动/会/开/幕/式/在/国/家/体/育/场/隆/重/举/行/ |
还是有区别吧,这是因为ChineseAnalyzer只对Character.LOWERCASE_LETTER、 Character.UPPERCASE_LETTER、和Character.OTHER_LETTER进行了处理,其他类型的都滤掉了。具体可以参见 代码。 |
CJKAnalyzer |
2008/年/8/月/8/日晚/举世/世瞩/瞩目/目的/的北/北京/京第/第二/二十/十九/九届/届奥/奥林/林匹/匹克/克运/运动/动会/会开/开幕/幕式/式在/在国/国家/家体/体育/育场/场隆/隆重/重举/举行/ |
二元分词,作为一元分词的改进,建立的索引小于一元,查询效率较好,能满足一般的查询要求。 |
PaodingAnalyzer |
2008/年/8/月/8/日/晚/举世/瞩目/举世瞩目/目的/北京/二/第二/十/二十/第二十/九/十九/二十九/九届/奥林/奥林匹克/运动/运动会/奥林匹克运动会/开幕/开幕式/国家/体育/体育场/隆重/举行/隆重举行/ |
细粒度全切分。对于不在词典中的词进行二元分词。 |
IK_CAnalyzer |
2008年/2008/年/8月/8/月/8日/8/晚/举世瞩目/举世/瞩目/目的/北京/第二十九届/第二十九/第二十/第二/二十九/二十 /十九/九届/九/奥林匹克运动会/奥林匹克/奥林/运动会/运动/开幕式/开幕/在国/国家/国/体育场/体育/隆重举行/隆重/举行/行/ |
细粒度全切分。对于不在词典中的词进行二元分词。 |
MIK_CAnalyzer |
2008年/8月/8日/晚/举世瞩目/目的/北京/第二十九届/奥林匹克运动会/开幕式/在国/国家/体育场/隆重举行/ |
最大匹配分词。和细粒度全切分配合使用。 |
MMAnalyzer |
2008/年/8/月/8/日/晚/举世瞩目/北京/第二十/九届/奥林匹克运动会/开幕式/国家/体育场/隆重举行/ |
对于不在字典项的内容,进行一元分词。 |
分词性能(毫秒):
分析器 |
第一次 |
第二次 |
第三次 |
分词数 |
StandardAnalyzer |
243 |
246 |
241 |
767675 |
ChineseAnalyzer |
245 |
233 |
242 |
766298 |
CJKAnalyzer |
383 |
383 |
373 |
659264 |
PaodingAnalyzer |
927 |
899 |
909 |
482890 |
IK_CAnalyzer |
1842 |
1877 |
1855 |
530830 |
MIK_CAnalyzer |
2009 |
1978 |
1998 |
371013 |
MMAnalyzer |
2923 |
2933 |
2948 |
392521 |
需要说明的是,IK_CAnalyzer在性能上对于词典的敏感度较高。
总结:
对于一般性的应用,采用二元分词法应该就可以满足需求。如果需要分词的话,从分词效果、性能、扩展性、还是可维护性来综合考虑,建议使用庖丁解牛。
mmseg4j 多分词模式与 paoding 分词效果对比
版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.
原文出处:http://blog.chenlb.com/2009/04/mmseg4j-max-word-segment-compare-with-paoding-in-effect.html
mmseg4j 1.6支持最多分词,应网友的要求:分词效果与 paoding 对比下。观察了 paoding 部分分词结果,现总结下。
paoding 分词效果:
- --------------------------
- 清华大学
- 清华 | 大 | 华大 | 大学 |
- --------------------------
- 华南理工大学
- 华南 | 理工 | 大 | 大学 |
- --------------------------
- 广东工业大学
- 广东 | 工业 | 大 | 业大 | 大学 |
- --------------------------
- 西伯利亚
- 西伯 | 伯利 | 西伯利亚 |
- --------------------------
- 研究生命起源
- 研究 | 研究生 | 生命 | 起源 |
- --------------------------
- 为首要考虑
- 为首 | 首要 | 考虑 |
- --------------------------
- 化装和服装
- 化装 | 和服 | 服装 |
- --------------------------
- 中国人民银行
- 中国 | 国人 | 人民 | 银行 |
- --------------------------
- 中华人民共和国
- 中华 | 华人 | 人民 | 共和 | 共和国 |
- --------------------------
- 羽毛球拍
- 羽毛 | 羽毛球 | 球拍 |
- --------------------------
- 人民币
- 人民 | 人民币 |
- --------------------------
- 很好听
- 很好 | 好听 |
- --------------------------
- 下一个
- 下一 | 一个 |
- --------------------------
- 为什么
- 为什么 |
- --------------------------
- 北京首都机场
- 北京 | 首都 | 机场 |
- --------------------------
- 东西已经拍卖了
- 东西 | 已经 | 拍卖 | 卖了 |
- --------------------------
- 主人因之生气
- 主人 | 生气 |
- --------------------------
- 虽然某些动物很凶恶
- 动物 | 凶恶 |
- --------------------------
- 朋友真背叛了你了
- 朋友 | 真 | 背叛 |
- --------------------------
- 建设盒蟹社会
- 建设 | 盒蟹 | 社会 |
- --------------------------
- 建设盒少蟹社会
- 建设 | 盒少 | 少蟹 | 社会 |
- --------------------------
- 我们家门前的大水沟很难过。
- 我们 | 家门 | 前 | 门前 | 前的 | 大 | 大水 | 水沟 | 很难 | 难过 |
- --------------------------
- 罐头不如果汁营养丰富。
- 罐头 | 不如 | 如果 | 果汁 | 营养 | 丰富 |
- --------------------------
- 今天真热,是游泳的好日子。
- 今天 | 天真 | 热 | 游泳 | 日子 | 好日子 |
- --------------------------
- 妹妹的数学只考十分,真丢脸。
- 妹妹 | 数学 | 只考 | 十分 | 真 | 丢脸 |
- --------------------------
- 我做事情,都是先从容易的做起。
- 做事 | 事情 | 都是 | 先从 | 从容 | 容易 | 容易的 | 做起 |
- --------------------------
- 老师说明天每个人参加大队接力时,一定要尽力。
- 老师 | 师说 | 说明 | 明天 | 每个 | 个人 | 人参 | 参加 | 大 | 加大 | 大队 | 接力 | 时 | 一定 | 定要 | 要尽 | 尽力 |
- --------------------------
- 小明把大便当作每天早上起床第一件要做的事
- 小明 | 大 | 大便 | 便当 | 当作 | 每天 | 早上 | 上起 | 起床 | 床第 | 第一 | 一件 | 要做 | 做的 | 的事 |
mmseg4j maxword 分词效果:
- --------------------------
- 清华大学
- 清华 | 大学 |
- --------------------------
- 华南理工大学
- 华南 | 理工 | 工大 | 大学 |
- --------------------------
- 广东工业大学
- 广东 | 工业 | 大学 |
- --------------------------
- 西伯利亚
- 西 | 伯利 | 利亚 |
- --------------------------
- 研究生命起源
- 研究 | 生命 | 起源 |
- --------------------------
- 为首要考虑
- 为首 | 要 | 考虑 |
- --------------------------
- 化装和服装
- 化装 | 和 | 服装 |
- --------------------------
- 中国人民银行
- 中国 | 国人 | 人民 | 银行 |
- --------------------------
- 中华人民共和国
- 中华 | 华人 | 人民 | 共和 | 国 |
- --------------------------
- 羽毛球拍
- 羽毛 | 球拍 |
- --------------------------
- 人民币
- 人民 | 币 |
- --------------------------
- 很好听
- 很好 | 好听 |
- --------------------------
- 下一个
- 下一 | 一个 |
- --------------------------
- 为什么
- 为 | 什么 |
- --------------------------
- 北京首都机场
- 北京 | 首都 | 机场 |
- --------------------------
- 东西已经拍卖了
- 东西 | 已经 | 拍卖 | 了 |
- --------------------------
- 主人因之生气
- 主人 | 因 | 之 | 生气 |
- --------------------------
- 虽然某些动物很凶恶
- 虽然 | 某些 | 动物 | 很 | 凶恶 |
- --------------------------
- 朋友真背叛了你了
- 朋友 | 真 | 背叛 | 了 | 你了 |
- --------------------------
- 建设盒蟹社会
- 建设 | 盒 | 蟹 | 社会 |
- --------------------------
- 建设盒少蟹社会
- 建设 | 盒 | 少 | 蟹 | 社会 |
- --------------------------
- 我们家门前的大水沟很难过。
- 我们 | 家 | 门前 | 的 | 大水 | 水沟 | 很难 | 过 |
- --------------------------
- 罐头不如果汁营养丰富。
- 罐头 | 不如 | 果汁 | 营养 | 丰富 |
- --------------------------
- 今天真热,是游泳的好日子。
- 今天 | 天真 | 热 | 是 | 游泳 | 的 | 好 | 日子 |
- --------------------------
- 妹妹的数学只考十分,真丢脸。
- 妹妹 | 的 | 数学 | 只 | 考 | 十分 | 真 | 丢脸 |
- --------------------------
- 我做事情,都是先从容易的做起。
- 我做 | 事情 | 都是 | 先 | 从容 | 易 | 的 | 做起 |
- --------------------------
- 老师说明天每个人参加大队接力时,一定要尽力。
- 老师 | 师说 | 明天 | 每个 | 个人 | 参加 | 大队 | 接力 | 时 | 一定 | 要 | 尽力 |
- --------------------------
- 小明把大便当作每天早上起床第一件要做的事
- 小明 | 把 | 大便 | 当作 | 每天 | 早上 | 起床 | 第一 | 一件 | 要做 | 的 | 事 |
paoding 几乎把所有的子词都拆出来,有时候还有最长的词,还没搞懂“华南理工大学”会分出“大”;mmseg4j 的 maxword 是在 complex分词后的结果再把子词都拆出来(1.6版按二元,不是词的去掉或保存单字。下一版本可能方式有点不同,“为什么”不应该为“为|什么”,也 即是三个字的前后不是词的应该不分,有待研究,:))。
如“化装和服装” mmseg4j 的 complex是可以较好的分出来(“化装 | 和 | 服装”),而 paoding 少了字频的信息,比较难到这事。mmseg4j complex 也有个缺点:“都是先从容易的做起” 不能把“容易”分出来,这是因为 mmseg 算法是用 3 个chunk的原因,我认为把整句的 chunk (还是仅仅3个chunk)来处理的话,分词效果要好),当然要更多的开销,选3个可能是效果与性能平衡吧。
mmseg4j 没有加任何 stopword,这东西留给使用者自己加,因为我不认为加 stopword 是好的方法。如音乐搜索,给加上 the,this……,还能找到歌曲?
当然分词效果还与词库有关,sogou 的词库是统计得出,有些高频的单字组合也成了词,如“我们的”。如果还要提高 mmseg4j 的分词效果,还要在整理下词库。
作者:唐福林 来源:福林雨 博客 酷勤网收集 2009-08-04
1. 基本介绍:
paoding :Lucene中文分词“庖丁解牛” Paoding Analysis
imdict :imdict智能词典所采用的智能中文分词程序
mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器
ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式
2. 开发者及开发活跃度:
paoding :qieqie.wang, google code 上最后一次代码提交:2008-06-12,svn 版本号 132
imdict :XiaoPingGao, 进入了 lucene contribute,lucene trunk 中 contrib/analyzers/smartcn/ 最后一次提交:2009-07-24,
mmseg4j :chenlb2008,google code 中 2009-08-03 (昨天),版本号 57,log为:mmseg4j-1.7 创建分支
ik :linliangyi2005,google code 中 2009-07-31,版本号 41
3. 用户自定义词库:
paoding :支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载
imdict :暂时不支持用户自定义词库。但 原版 ICTCLAS 支持。支持用户自定义 stop words
mmseg4j :自带sogou词库,支持名为 wordsxxx.dic, utf8文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.path
ik : 支持api级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码,/r/n 分割。不支持自动检测。
4. 速度(基于官方介绍,非自己测试)
paoding :在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字
imdict :483.64 (字节/秒),259517(汉字/秒)
mmseg4j : complex 1200kb/s左右, simple 1900kb/s左右
ik :具有50万字/秒的高速处理能力
5. 算法和代码复杂度
paoding :svn src 目录一共1.3M,6个properties文件,48个java文件,6895 行。使用不用的 Knife 切不同类型的流,不算很复杂。
imdict :词库 6.7M(这个词库是必须的),src 目录 152k,20个java文件,2399行。使用 ICTCLAS HHMM隐马尔科夫模型,“利用大量语料库的训练来统计汉语词汇的词频和跳转概率,从而根据这些统计结果对整个汉语句子计算最似然(likelihood)的切分”
mmseg4j : svn src 目录一共 132k,23个java文件,2089行。MMSeg 算法 ,有点复杂。
ik : svn src 目录一共6.6M(词典文件也在里面),22个java文件,4217行。多子处理器分析,跟paoding类似,歧义分析算法还没有弄明白。
6. 文档
paoding :几乎无。代码里有一些注释,但因为实现比较复杂,读代码还是有一些难度的。
imdict : 几乎无。 ICTCLAS 也没有详细的文档,HHMM隐马尔科夫模型的数学性太强,不太好理解。
mmseg4j : MMSeg 算法 是英文的,但原理比较简单。实现也比较清晰。
ik : 有一个pdf使用手册,里面有使用示例和配置说明。
7. 其它
paoding :引入隐喻,设计比较合理。search 1.0 版本就用的这个。主要优势在于原生支持词库更新检测。主要劣势为作者已经不更新甚至不维护了。
imdict :进入了 lucene trunk,原版 ictclas 在各种评测中都有不错的表现,有坚实的理论基础,不是个人山寨。缺点为暂时不支持用户词库。
mmseg4j : 在complex基础上实现了最多分词(max-word),但是还不成熟,还有很多需要改进的地方。
ik : 针对Lucene全文检索优化的查询分析器IKQueryParser
8. 结论
个人觉得,可以在 mmseg4j 和 paoding 中选一个。关于这两个分词效果的对比,可以参考:
http://blog.chenlb.com/2009/04/mmseg4j-max-word-segment-compare-with-paoding-in-effect.html
或者自己再包装一下,将 paoding 的词库更新检测做一个单独的模块实现,然后就可以在所有基于词库的分词算法之间无缝切换了。
ps,对不同的 field 使用不同的分词器是一个可以考虑的方法。比如 tag 字段,就应该使用一个最简单的分词器,按空格分词就可以了。
本文来自:http://blog.fulin.org/2009/08/lucene_chinese_analyzer_compare.html
相关推荐
中文分词是将连续的汉字序列切分成具有语义的词语的过程,是自然语言处理(NLP)中的基础步骤。在Lucene.NET中,为了支持中文分词,通常需要结合第三方分词器,如IK Analyzer、HanLP、jieba.NET等。这些分词器具备...
来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...
《深入理解Lucene 6.6:拼音与IK中文分词技术详解》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在...
**标题:“如何使用Lucene的中文分词搜索”** 在信息检索和文本处理领域,Apache Lucene是一个强大的全文搜索引擎库,它提供了高级的索引和搜索功能。在处理中文文本时,由于中文句子是由词语组成的,而非单个字符...
### Lucene与中文分词技术的研究及应用 #### Lucene简介与原理 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它为开发者提供了构建全文搜索引擎的能力,而无需关注底层搜索机制的具体实现...
中文分词是指将连续的未加标点符号的汉字序列切分成一系列有意义的词汇的过程。常见的中文分词方法主要包括正向最大匹配法(MM)、反向最大匹配法(RMM)以及双向最大匹配法等。其中,正向最大匹配法是一种常用的...
本文将深入探讨Lucene中文分词器组件的相关知识点。 首先,我们要明白中文分词的重要性。由于中文是以词为基本单位,不像英文那样有明显的空格分隔,因此在进行信息检索时,需要先对中文文本进行分词,将连续的汉字...
Lucene 与中文分词的结合
中文分词是中文自然语言处理的基础步骤,它将连续的汉字序列分割成具有独立意义的词语。对于搜索引擎来说,有效的分词可以提高搜索结果的相关性。这个由作者自己编写的分词器正是为了解决这个问题,它采用最大向前...
《Lucene 3.5中文分词案例解析》 Lucene是一个开源的全文搜索引擎库,广泛应用于各种信息检索系统中。...对于初学者来说,了解这些基础知识并动手实践,无疑是掌握Lucene中文分词技术的关键步骤。
《Lucene中文分词技术详解》 在信息检索和自然语言处理领域,中文分词是至关重要的一步。Lucene,作为一个强大的全文搜索引擎库,对于处理中文文档,分词的准确性和效率直接影响到搜索效果。本文将围绕“lucene中文...
Lucene是一个高性能、全文检索库,而“lucene中文分词工具包”则为Lucene提供了一个专门针对中文分词的解决方案。这个工具包的核心是IKAnalyzer,它是一个开源且基于Java语言开发的轻量级中文分词工具,旨在提升中文...
《Lucene中文分词器——Paoding解牛详解》 在中文信息检索领域,分词是至关重要的一环,它能够将连续的汉字序列切割成具有独立意义的词语,为后续的索引和查询提供基础。Lucene作为Java最著名的全文搜索引擎库,其...
其最初设计旨在配合Lucene项目,通过融合词典分词和语法分析算法来提高中文文本的检索效率。至3.0版本,IKAnalyzer转型为独立于Lucene的通用Java分词组件,同时保持了对Lucene的优化支持。 #### 版本亮点:IK...
"je-analysis"可能是一个早期的中文分析器,用于对中文文本进行预处理,包括词典匹配、分词、去除停用词等步骤,以便于Lucene理解并处理中文内容。这在处理大量中文文档时尤其关键,因为中文没有明显的词边界,传统...
《猎兔Lucene.NET中文分词源码seg_src.rar》是一个包含了Lucene.NET中文分词模块的源代码压缩包,其重要性和价值在于为开发者提供了深入理解与自定义中文分词算法的宝贵资源。Lucene.NET是Apache Lucene搜索引擎库的...
Lucene.Net中文分词组件 Lucene.Net.Analysis.Cn
**Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。在处理中文文本时,由于中文词汇的复杂性和无...