中文分词器性能比较

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

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

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

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

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

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

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


1.      中文分词


1.1  中文分词器概述




























名称

最近更新

速度(网上情报)

扩展性支持、其它

mmseg4j

2013

complex 60W字/s (1200 KB/s)

simple 100W字/s (1900 KB/s)

使用sougou词库,也可自定义

(complex\simple\MaxWord)

IKAnalyzer

2012

IK2012 160W字/s (3000KB/s)

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

(智能\细粒度)

Ansj

2014

BaseAnalysis 300W字/s

hlAnalysis 40W字/s

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

paoding

2008

100W字/s

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

l 注意:

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

1.2  mmseg4j


l 创建索引效果:










FieldValue内容:

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

在词库中补充:

京華、??、ぼおえ、受一股来















类型

结果

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|级|的|偏|北风

l 创建索引效率:

17个各种类型字段,在solr博文中字段基础上,选一空string类型字段改为新类型,并写入文本内容(原纯文本Size约为400B,SolrInputDocument对象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博文”中1.2节相同配置的情况下,分词索引创建速度要差于不使用分词的。

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

l 数据搜索效率:

文本内容以词库中任选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

l 补充:

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

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

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

1.3  IKAnalyzer


l 创建索引效果:

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分词的。

l 数据搜索效率:



























字段类型

关键词

搜索时间(ms)

结果(条)

细粒度

一不做二不休

400

5949255

细粒度

一个国家两种制度

500

6558449

细粒度

一些

300

5312103

细粒度

转辗反侧

15

10588

l 补充:

mmseg4j中textMaxWord,“一不做二不休”被分为:一|不做|二不|不休;

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

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

1.4  Ansj

l 创建索引效果:

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.2、1.3比较,分词索引创建速度要略差于使用mmseg4j、IKAnalyzer分词的。

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

l 数据搜索效率:






















关键词

搜索时间(ms)

结果(条)

一不做二不休

200

2478

一个国家两种制度

15

0

一些

25

15665

转辗反侧

6

2655

1.5  总结


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

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

分词器能对word、letter、digit等进行识别。

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

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

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

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

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

来自为知笔记(Wiz)

中文分词器性能比较

时间: 2024-10-13 12:00:49

中文分词器性能比较的相关文章

Solr4.10与tomcat整合并安装中文分词器

1.solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索引.搜索性能进行了优化. Solr可以从Solr官方网站(http://lucene.apache.org/solr/ )下载,解压后目录如下: bin:solr的运行脚本 contrib:solr的一些贡献软件/插件,用于增强solr的功能. dist:该目录包含build过程中产生的war和jar文

深度解析中文分词器算法(最大正向/逆向匹配)

中文分词算法概述: 1:非基于词典的分词(人工智能领域) 相当于人工智能领域计算.一般用于机器学习,特定领域等方法,这种在特定领域的分词可以让计算机在现有的规则模型中, 推理如何分词.在某个领域(垂直领域)分词精度较高.但是实现比较复杂. 例:比较流行的语义网:基于本体的语义检索. 大致实现:用protege工具构建一个本体(在哲学中也叫概念,在80年代开始被人工智能),通过jena的推理机制和实现方法. 实现对Ontology的语义检索. Ontology语义检索这块自己和一朋友也还在琢磨,目

solr4.10.4 单机安装(并添加dataimport和中文分词器)

安装环境的准备: (这里直接给相关软件的版本号了) centos 6.4 apache-tomcat-7.0.57 solr-4.10.4 jdk1.7.0_75 jdk和tomcat这里就不给安装方式了,要是不会直接百度各种有. 具体步骤: 1.下载solr-4.10.4,然后解压开我这里解压到  /usr/local/zip/solr-4.10.4 中(安装目录一般我都会安装在/opt/web_app安装目录自己定义创建) 2.在/opt/web_app下创建solr_server/solr

如何在Elasticsearch中安装中文分词器(IK)和拼音分词器?

声明:我使用的Elasticsearch的版本是5.4.0,安装分词器前请先安装maven 一:安装maven https://github.com/apache/maven 说明: 安装maven需要java1.7+ 编译安装分词器时,可能会报错,报错信息如下: [ERROR] COMPILATION ERROR : [INFO] -------------------------------------------------------------[ERROR] No compiler i

Elasticsearch之中文分词器插件es-ik

前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch之中文分词器 Elasticsearch之几个重要的分词器 elasticsearch官方默认的分词插件 1.elasticsearch官方默认的分词插件,对中文分词效果不理想. 比如,我现在,拿个具体实例来展现下,验证为什么,es官网提供的分词插件对中文分词而言,效果差. [[email protected] elasti

11大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断. 11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /** * 获取文本的所有分词结果, 对比不同分词器结果 * @author 杨尚川 */ public interface WordSegmenter {

隐含马尔可夫模型HMM的中文分词器 入门-1

<pre name="code" class="sql">http://sighan.cs.uchicago.edu/bakeoff2005/ http://www.52nlp.cn/中文分词入门之资源 中文分词入门之资源 作为中文信息处理的"桥头堡",中文分词在国内的关注度似乎远远超过了自然语言处理的其他研究领域.在中文分词中,资源的重要性又不言而喻,最大匹配法等需要一个好的词表,而基于字标注的中文分词方法又需要人工加工好的分词语料

我与solr(六)--solr6.0配置中文分词器IK Analyzer

转自:http://blog.csdn.net/linzhiqiang0316/article/details/51554217,表示感谢. 由于前面没有设置分词器,以至于查询的结果出入比较大,并且无法进行正确的高亮显示.现在配置一下分词器来解决相关问题. solr6.0中进行中文分词器IK Analyzer的配置和solr低版本中最大不同点在于IK Analyzer中jar包的引用.一般的IK分词jar包都是不能用的,因为IK分词中传统的jar不支持solr6.0这个高版本的,所以就会发送运行

solr中文分词器IK-analyzer安装

solr本身对中文是不支持的,所以需要下载中文分词器IK-analyzer  下载地址https://code.google.com/archive/p/ik-analyzer/downloads.自己本地系统是centos6.7,所以下载了https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ik-analyzer/IK%20Analyzer%202012FF_hf1.zip 安装步骤: