`

<转>用于Lucene的各中文分词比较

 
阅读更多

对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次为: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 分词效果对比

发表于:2009年4月12日 | 分类:mmseg4j | 标签: mmseg4jpaoding中文分词 | views(6,709)

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.

 

原文出处:http://blog.chenlb.com/2009/04/mmseg4j-max-word-segment-compare-with-paoding-in-effect.html

mmseg4j 1.6支持最多分词,应网友的要求:分词效果与 paoding 对比下。观察了 paoding 部分分词结果,现总结下。

paoding 分词效果:

  1. --------------------------  
  2. 清华大学  
  3. 清华 | 大 | 华大 | 大学 |  
  4. --------------------------  
  5. 华南理工大学  
  6. 华南 | 理工 | 大 | 大学 |  
  7. --------------------------  
  8. 广东工业大学  
  9. 广东 | 工业 | 大 | 业大 | 大学 |  
  10. --------------------------  
  11. 西伯利亚  
  12. 西伯 | 伯利 | 西伯利亚 |  
  13. --------------------------  
  14. 研究生命起源  
  15. 研究 | 研究生 | 生命 | 起源 |  
  16. --------------------------  
  17. 为首要考虑  
  18. 为首 | 首要 | 考虑 |  
  19. --------------------------  
  20. 化装和服装  
  21. 化装 | 和服 | 服装 |  
  22. --------------------------  
  23. 中国人民银行  
  24. 中国 | 国人 | 人民 | 银行 |  
  25. --------------------------  
  26. 中华人民共和国  
  27. 中华 | 华人 | 人民 | 共和 | 共和国 |  
  28. --------------------------  
  29. 羽毛球拍  
  30. 羽毛 | 羽毛球 | 球拍 |  
  31. --------------------------  
  32. 人民币  
  33. 人民 | 人民币 |  
  34. --------------------------  
  35. 很好听  
  36. 很好 | 好听 |  
  37. --------------------------  
  38. 下一个  
  39. 下一 | 一个 |  
  40. --------------------------  
  41. 为什么  
  42. 为什么 |  
  43. --------------------------  
  44. 北京首都机场  
  45. 北京 | 首都 | 机场 |  
  46. --------------------------  
  47. 东西已经拍卖了  
  48. 东西 | 已经 | 拍卖 | 卖了 |  
  49. --------------------------  
  50. 主人因之生气  
  51. 主人 | 生气 |  
  52. --------------------------  
  53. 虽然某些动物很凶恶  
  54. 动物 | 凶恶 |  
  55. --------------------------  
  56. 朋友真背叛了你了  
  57. 朋友 | 真 | 背叛 |  
  58. --------------------------  
  59. 建设盒蟹社会  
  60. 建设 | 盒蟹 | 社会 |  
  61. --------------------------  
  62. 建设盒少蟹社会  
  63. 建设 | 盒少 | 少蟹 | 社会 |  
  64. --------------------------  
  65. 我们家门前的大水沟很难过。  
  66. 我们 | 家门 | 前 | 门前 | 前的 | 大 | 大水 | 水沟 | 很难 | 难过 |  
  67. --------------------------  
  68. 罐头不如果汁营养丰富。  
  69. 罐头 | 不如 | 如果 | 果汁 | 营养 | 丰富 |  
  70. --------------------------  
  71. 今天真热,是游泳的好日子。  
  72. 今天 | 天真 | 热 | 游泳 | 日子 | 好日子 |  
  73. --------------------------  
  74. 妹妹的数学只考十分,真丢脸。  
  75. 妹妹 | 数学 | 只考 | 十分 | 真 | 丢脸 |  
  76. --------------------------  
  77. 我做事情,都是先从容易的做起。  
  78. 做事 | 事情 | 都是 | 先从 | 从容 | 容易 | 容易的 | 做起 |  
  79. --------------------------  
  80. 老师说明天每个人参加大队接力时,一定要尽力。  
  81. 老师 | 师说 | 说明 | 明天 | 每个 | 个人 | 人参 | 参加 | 大 | 加大 | 大队 | 接力 | 时 | 一定 | 定要 | 要尽 | 尽力 |  
  82. --------------------------  
  83. 小明把大便当作每天早上起床第一件要做的事  
  84. 小明 | 大 | 大便 | 便当 | 当作 | 每天 | 早上 | 上起 | 起床 | 床第 | 第一 | 一件 | 要做 | 做的 | 的事 |   

mmseg4j maxword 分词效果:

  1. --------------------------  
  2. 清华大学  
  3. 清华 | 大学 |  
  4. --------------------------  
  5. 华南理工大学  
  6. 华南 | 理工 | 工大 | 大学 |  
  7. --------------------------  
  8. 广东工业大学  
  9. 广东 | 工业 | 大学 |  
  10. --------------------------  
  11. 西伯利亚  
  12. 西 | 伯利 | 利亚 |  
  13. --------------------------  
  14. 研究生命起源  
  15. 研究 | 生命 | 起源 |  
  16. --------------------------  
  17. 为首要考虑  
  18. 为首 | 要 | 考虑 |  
  19. --------------------------  
  20. 化装和服装  
  21. 化装 | 和 | 服装 |  
  22. --------------------------  
  23. 中国人民银行  
  24. 中国 | 国人 | 人民 | 银行 |  
  25. --------------------------  
  26. 中华人民共和国  
  27. 中华 | 华人 | 人民 | 共和 | 国 |  
  28. --------------------------  
  29. 羽毛球拍  
  30. 羽毛 | 球拍 |  
  31. --------------------------  
  32. 人民币  
  33. 人民 | 币 |  
  34. --------------------------  
  35. 很好听  
  36. 很好 | 好听 |  
  37. --------------------------  
  38. 下一个  
  39. 下一 | 一个 |  
  40. --------------------------  
  41. 为什么  
  42. 为 | 什么 |  
  43. --------------------------  
  44. 北京首都机场  
  45. 北京 | 首都 | 机场 |  
  46. --------------------------  
  47. 东西已经拍卖了  
  48. 东西 | 已经 | 拍卖 | 了 |  
  49. --------------------------  
  50. 主人因之生气  
  51. 主人 | 因 | 之 | 生气 |  
  52. --------------------------  
  53. 虽然某些动物很凶恶  
  54. 虽然 | 某些 | 动物 | 很 | 凶恶 |  
  55. --------------------------  
  56. 朋友真背叛了你了  
  57. 朋友 | 真 | 背叛 | 了 | 你了 |  
  58. --------------------------  
  59. 建设盒蟹社会  
  60. 建设 | 盒 | 蟹 | 社会 |  
  61. --------------------------  
  62. 建设盒少蟹社会  
  63. 建设 | 盒 | 少 | 蟹 | 社会 |  
  64. --------------------------  
  65. 我们家门前的大水沟很难过。  
  66. 我们 | 家 | 门前 | 的 | 大水 | 水沟 | 很难 | 过 |  
  67. --------------------------  
  68. 罐头不如果汁营养丰富。  
  69. 罐头 | 不如 | 果汁 | 营养 | 丰富 |  
  70. --------------------------  
  71. 今天真热,是游泳的好日子。  
  72. 今天 | 天真 | 热 | 是 | 游泳 | 的 | 好 | 日子 |  
  73. --------------------------  
  74. 妹妹的数学只考十分,真丢脸。  
  75. 妹妹 | 的 | 数学 | 只 | 考 | 十分 | 真 | 丢脸 |  
  76. --------------------------  
  77. 我做事情,都是先从容易的做起。  
  78. 我做 | 事情 | 都是 | 先 | 从容 | 易 | 的 | 做起 |  
  79. --------------------------  
  80. 老师说明天每个人参加大队接力时,一定要尽力。  
  81. 老师 | 师说 | 明天 | 每个 | 个人 | 参加 | 大队 | 接力 | 时 | 一定 | 要 | 尽力 |  
  82. --------------------------  
  83. 小明把大便当作每天早上起床第一件要做的事  
  84. 小明 | 把 | 大便 | 当作 | 每天 | 早上 | 起床 | 第一 | 一件 | 要做 | 的 | 事 |   

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.csdn.net/chaocy/article/details/5938741

分享到:
评论

相关推荐

    Lucene4.0 IK分词器使用pdf

    Ik中分分词器介绍,可用于lucene4.0

    Lucene中文分词组件 JE-Analysis 1.5.1

    //采用正向最大匹配的中文分词算法,相当于分词粒度等于0 MMAnalyzer analyzer = new MMAnalyzer(); //参数为分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来 MMAnalyzer analyzer = new ...

    Javaweb课程作业基于Hadoop的中文词频统计工具源码+使用说明.zip

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;3.6.0&lt;/version&gt; &lt;/dependency&gt; 3、将IKAnalyzer.cfg.xml和stopword.dic复制到项目根目录 4、配置用户自定义词库 (1)...

    用于Lucene的IKAnalyzer分词器

    IKAnalyzer是一个开源的,基于Java语言开发的轻量级的中文分词语言包,它是以Lucene为应用主体,结合词典分词和文法分析算法的中文词组组件。从3.0版本开始,IK发展为面向java的公用分词组件,独立Lucene项目,同时...

    Ansj中文分词(强大)

    Ansj中文分词是一款纯Java、主要用于自然语言处理、高精度的中文分词工具,目标是“准确、高效、自由地进行中文分词”。 内容简介:http://www.iteye.com/magazines/102#234 此分词具有自己学习的功能,所以拜托大家...

    一种基于LUCENE的中文分词算法研究倡 (2011年)

    由于Lucene自带的ChineseAnalyzer和CJKAnalyzer两种中文分析器不能够满足全文检索系统的应用,本文给出了一种新的中文分词算法,用于改进Lucene中文分析器。该算法基于字符串匹配原理,实现了正向和逆向相结合的最大增...

    jcseg,Jcseg 是基于 mmseg 算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于 Jetty 的 web 服务器,方便各大语言直接 http 调用,同时提供了最新版本的 lucene, solr, elasticsearch 的分词接口!.zip

    Jcseg是基于 mmseg 算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于 Jetty 的 web 服务器,方便各大语言直接 http 调用,同时提供了最新...

    lucene索引查看工具

    兄弟们!...一款可以查看Lucene分词后在索引的排名以及是否有无该词,很多时候用于查看有无需要屏蔽的词,能查到的话,delete,呵呵...查看词在overview中输入排名数字,show top term,搜索词在search中

    ES ik分词代码

    Es基于Lucene分词搜索, 自带ik中文分词解释器,适合中文搜索

    中文分词器

    IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。可用于solr和Lucene

    Jcseg+Java中文分词器

    Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的...

    基于Lucene的搜索引擎的实现

    完整代码,基于Lucene的分词,根据搜索引擎的目标和基本内容,将实现功能模块主要划分为创建中文分析器(创建索引)、读取索引文件查询记录、根据输入的内容进行分词、根据关键字进行全文检索、将结果按JSON格式输出...

    基于lucene的搜索引擎总结

    最大匹配法(机械分词):按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功。 二元分词 一元分词 自动分类 向量距离分类算法 根据算术平均,为每类...

    ElasticSearch分布式检索含中文分词

    ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。

    Jcseg中文分词器 v2.6.2

    Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的...

    elasticsearch-analysis-ik-7.3.1.jar

    Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行...中文分词器

    Android代码-jcseg

    Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的...

    Jcseg中文分词器-其他

    Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的...

    jcseg-1.9.7.zip

    并且提供了最新版本的lucene, solr, elasticsearch的分词接口, Jcseg自带了一个 jcseg.properties文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否...

    elasticsearch-5.5.1.rar(包含elasticsearch-analysis-ik-5.5.1.zip中文分词解析器)

    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级...

Global site tag (gtag.js) - Google Analytics