zoukankan      html  css  js  c++  java
  • 中文分词器性能比较

     

    摘要:本篇是本人在Solr的基础上,配置了中文分词器,并对其进行的性能测试总结,具体包括

    使用mmseg4j、IKAnalyzer、Ansj,分别从创建索引效果、创建索引性能、数据搜索效率等方面进行衡量。

    具体的Solr使用方法假设读者已有了基础,关于Solr的性能指标见前期Solr博文

    前提:       Solr提供了一整套的数据检索方案,一台四核CPU16G内存的机器,千兆网络
    需求:       1、对Solr创建索引的效率有一定的要求。

                 2、中文分词速度要快,搜索速度也要快

                 3、中文分词准确率有一定的要求

    说明:      以下是在Solr上分别配置不同的中文分词器,它们之间的比较


    1.      中文分词

    1.1  中文分词器概述

    名称

    最近更新

    速度(网上情报)

    扩展性支持、其它

    mmseg4j

    2013

    complex 60W/s (1200 KB/s)

    simple 100W/s (1900 KB/s)

    使用sougou词库,也可自定义

    (complexsimpleMaxWord)

    IKAnalyzer

    2012

    IK2012 160W/s (3000KB/s)

    支持用户词典扩展定义、支持自定义停止词

    (智能细粒度)

    Ansj

    2014

    BaseAnalysis 300W/s

    hlAnalysis 40W/s

    支持用户自定义词典,可以分析出词性,有新词发现功能

    paoding

    2008

    100W/s

    支持不限制个数的用户自定义词库

     

    注意:

    中文分词器可能与最新版本Lucene不兼容,配置好运行时出现TokenStream contractviolation错误,对于mmseg4j需要更改com.chenlb.mmseg4j.analysis.MMSegTokenizer源码,添加super.reset()reset()内,重新编译后替换原jar

     

    1.2  mmseg4j

    创建索引效果:

    FieldValue内容:

    京華时报ぼおえ2009123日报道,뭄내ㅠㅛㅜ치ㅗ受一股来自中西伯利亚的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度celsius degree,同时伴有67级的偏北风。

    在词库中补充:

    京華、뭄내ぼおえ受一股来

     

    类型

    结果

    textMaxWord

    京華|时报||||2009||1||23||报道|||||||||一股||||西|||||||空气|影响|本市|出现|大风|降温|天气|白天|最高|气温|只有|零下|7|摄氏||celsius|degree|同时|伴有|6||7||||北风

    textComplex

    京華|时报|ぼおえ|2009||1||23||报道|뭄내ㅠㅛ||||受一股来|||西伯利亚|||冷空气|影响|本市|出现|大风|降温|天气|白天|最高气温|只有|零下|7|摄氏度|celsius|degree|同时|伴有|6||7||||北风

    textSimple

    京華|时报|ぼおえ|2009||1||23||报道|뭄내ㅠㅛ||||受一股来||中西||||||冷空气|影响|本市|出现|大风|降温|天气|白天|最高气温|只有|零下|7|摄氏度|celsius|degree|同时|伴有|6||7||||北风

     

    创建索引效率:

    17个各种类型字段,在solr博文中字段基础上,选一空string类型字段改为新类型,并写入文本内容(原纯文本Size约为400BSolrInputDocument对象Size约为1130B)。

    文本内容以词库中任选20词拼成的句子,每词大约3字,一句大约60字。

    总数据量为2000W条数据,与2.2节相同配置。

    字段类型

    创建时间(s)

    索引大小(GB)

    网络(MB/s)

    速率(W/s)

    textMaxWord

    3115

    4.95

    6.0

    0.64 (38W/s)

    textComplex

    4860

    4.3

    5.0

    0.41 (25W/s)

    textSimple

    3027

    4.32

    6.5

    0.66 (40W/s)

    string

    2350

    9.08

    8.0

    0.85 (57W/s)

     

    速度:在与“solr博文http://www.cnblogs.com/wgp13x/p/3742653.html”中1.2节相同配置的情况下,分词索引创建速度要差于不使用分词的。

    大小:分词索引大小要小于不使用分词的,经测试分词字段配置成autoGeneratePhraseQueries="false"对索引大小几乎没有影响

     

    数据搜索效率:

    文本内容以词库中任选20词拼成的句子,每词大约3字,一句大约60字,总数据量为2000W条数据。

    字段类型

    关键词

    搜索时间(ms)

    结果()

    textMaxWord

    一不做二不休

    180

    2556

    textComplex

    一不做二不休

    59

    2648

    textSimple

    一不做二不休

    62

    2622

    string

    *一不做二不休*

    20000

    2689

    textMaxWord

    一个国家两种制度

    22

    2620

    textComplex

    一个国家两种制度

    12

    2687

    textSimple

    一个国家两种制度

    10

    2670

    string

    *一个国家两种制度*

    15500

    2657

    textMaxWord

    一些

    24

    15999

    textComplex

    一些

    11

    2687

    textSimple

    一些

    9

    2665

    string

    *一些*

    14200

    15758

    textMaxWord

    转辗反侧

    15

    2622

    textComplex

    转辗反侧

    5

    2632

    textSimple

    转辗反侧

    9

    2676

    string

    *转辗反侧*

    15600

    2665

     

    补充:

    对于非中文、数字、英文词汇,包括繁体字,在词典中加入新词汇即可。

    mmseg4j对于“都是先从容易的做起”,不能把“容易”分出来,分词结果为“都是||从容|||做起”。

    网上推荐使用textMaxWord类型分词。

     

    1.3  IKAnalyzer

    创建索引效果:

    FieldValue内容、在词库中补充均同1.2

    分词字段配置autoGeneratePhraseQueries="false"

     

    类型

    结果

    细粒度

    京華|时报|ぼおえ|2009||1||23|日报||报道|뭄내ㅠㅛ||||受一股来|一股|||来自|中西|西伯利亚|西伯|伯利|||强冷空气|冷空气|空气|影响|本市|出现|大风|降温|天气|白天|最高|高气|气温|只有||零下|||7|摄氏度|摄氏||celsius|degree|同时|伴有||6||7|||偏北风|偏北|北风

     

    创建索引效率:

    字段类型

    创建时间(s)

    索引大小(GB)

    网络(MB/s)

    速率(W/s)

    细粒度

    3584

    5.06

    6.0

    0.56 (33W/s)

     

    速度:与1.2比较,分词索引创建速度要略差于使用mmseg4j分词的。

    大小:分词索引大小要略大于使用mmseg4j分词的。

     

    数据搜索效率:

    字段类型

    关键词

    搜索时间(ms)

    结果()

    细粒度

    一不做二不休

    400

    5949255

    细粒度

    一个国家两种制度

    500

    6558449

    细粒度

    一些

    300

    5312103

    细粒度

    转辗反侧

    15

    10588

     

    补充:

    mmseg4jtextMaxWord,“一不做二不休”被分为:一|不做|二不|不休;

    IKAnalyzer中细粒度,“一不做二不休”被分为:一不做二不休||不做|二不休||不休;

    因此同样使用autoGeneratePhraseQueries="false",“一不做二不休”搜索,IKAnalyzer搜索出来的结果要远多于mmseg4j

    1.4  Ansj

    创建索引效果:

    FieldValue内容同1.2,没有补充词库。

     

    <fieldType name="text_ansj"class="solr.TextField">

                                <analyzertype="index">

                                         <tokenizerclass="org.ansj.solr.AnsjTokenizerFactory" conf="ansj.conf"rmPunc="true"/>

                                </analyzer>

                                <analyzertype="query">

                                         <tokenizerclass="org.ansj.solr.AnsjTokenizerFactory" analysisType="1"rmPunc="true"/>

                                </analyzer>

    </fieldType>

     

    结果

    京华|时报||||2009|1|23|报道||||||||||一股|来自||西伯利亚|||强冷空气|冷空气|影响||本市|出现|大风|降温|天气||白天|最高|气温||只有||零下|7摄氏度|摄氏|摄氏度|celsius||degree||同时||伴有||6||7|||偏北风|北风|

     

        “京華”二字被分词后变成了“京华”,据朋友介绍,它有将生僻字改字的Bug

     

    创建索引效率:

    字段类型

    创建时间(s)

    索引大小(GB)

    网络(MB/s)

    速率(W/s)

    细粒度

    3815

    5.76

    5.2

    0.52 (31W/s)

     

    速度:与1.21.3比较,分词索引创建速度要略差于使用mmseg4jIKAnalyzer分词的。

    大小:分词索引大小要略大于使用mmseg4jIKAnalyzer分词的。

     

    数据搜索效率:

    关键词

    搜索时间(ms)

    结果()

    一不做二不休

    200

    2478

    一个国家两种制度

    15

    0

    一些

    25

    15665

    转辗反侧

    6

    2655

     

    1.5  总结

    按分词后的结果进行搜索,若在分词字段配置autoGeneratePhraseQueries="false",则是搜索条件先分词,再使用分词在结果中搜索,默认的是trueautoGeneratePhraseQueries="false"对创建索引速度没影响,对搜索结果有影响。也可以修改SolrQueryPasser,对于输入的一个字符串,先进行相应分词,再使用分词结果在索引集中搜索。

    精确或模糊*搜索,都是以词为单位搜索。精确搜索是指返回所有包含分词的结果。

    分词器能对wordletterdigit等进行识别。

    对于不使用分词的String类型进行搜索,只能通过模糊搜索*,搜到连字,以字为单位搜索。

    在分词索引内搜索,速度较快;不分词,需要遍历所有文档,速度较慢。

    如果需要分词的话,那分词速度是主要瓶颈。

    综合考虑,mmseg4j是首选的中文分词器。

     

    如有需要具体的测试代码,可以跟本人联系。



    作者:Angel 
    欢迎转载或分享,但请务必声明文章出处。
    如果文章对您有帮助,希望你能推荐关注

    王安琪,英文名Angel,南京邮电大学计算机应用技术硕士学位。 熟悉Java、C#编程语言。专注于WebService、海量数据处理、搜索引擎技术、消息中间件技术、分布式文件存储、.NET应用程序开发、系统架构设计。主要从事大数据管理系统的研发,项目经理,系统架构师,就职于江苏金陵科技集团有限公司。

    Email:aitanjupt@hotmail.com

    QQ:289770363 

  • 相关阅读:
    BZOJ2821 作诗(Poetize) 【分块】
    BZOJ2724 蒲公英 【分块】
    Codeforces 17E Palisection 【Manacher】
    BZOJ2565 最长双回文串 【Manacher】
    Codeforces 25E Test 【Hash】
    CODEVS3013 单词背诵 【Hash】【MAP】
    HDU2825 Wireless Password 【AC自动机】【状压DP】
    HDU2896 病毒侵袭 【AC自动机】
    HDU3065 病毒侵袭持续中【AC自动机】
    HDU2222 Keywords Search 【AC自动机】
  • 原文地址:https://www.cnblogs.com/wgp13x/p/3748764.html
Copyright © 2011-2022 走看看