• [转]Lucene中文分析器的中文分词准确性和性能比较


    Lucene中文分析器的中文分词准确性和性能比较

    作者: approximation


    对几种中文分析器,从分词准确性和效率两方面进行比较。分析器依次为: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在性能上对于词典的敏感度较高。
    总结:
    对于一般性的应用,采用二元分词法应该就可以满足需求。如果需要分词的话,从分词效果、性能、扩展性、还是可维护性来综合考虑,建议使用庖丁解牛。

  • 相关阅读:
    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不 死,问每个月的兔子总数为多少?
    Tomcat 全攻略
    MySQL 查询in操作,查询结果按in集合顺序显示
    乱码问题解决之道
    Java程序员面试中的多线程问题
    APACHE多个服务器的配置
    Python读写文件
    php字符串处理函数大全
    python 执行系统命令
    jquery-mobile
  • 原文地址:https://www.cnblogs.com/vagerent/p/1606492.html
Copyright © 2020-2023  润新知