`
approximation
  • 浏览: 34408 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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.iteye.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在性能上对于词典的敏感度较高。
总结:
对于一般性的应用,采用二元分词法应该就可以满足需求。如果需要分词的话,从分词效果、性能、扩展性、还是可维护性来综合考虑,建议使用庖丁解牛。

 

 

 

12
1
分享到:
评论
5 楼 swjtu_Icetea 2010-04-14  
import java.io.StringReader;
import java.io.IOException; 
import java.util.Date;
import org.apache.lucene.analysis.standard.*;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.document.*;
import org.apache.lucene.util.*;
import org.apache.lucene.index.*;
import org.apache.lucene.index.IndexWriter;
public class AnalyzerTest {

public static void main(String[] args) throws IOException {
               String content = "有事做的时候我们把忙碌当作累,没事做的时候我们却把放松当作无聊";

               StringReader reader = new StringReader(content);

               Analyzer analyzer = null;

              analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

              TokenStream ts = analyzer.tokenStream("test", reader);
               ts.addAttribute(TermAttribute.class);

while (ts.incrementToken()) {

                      TermAttribute ta = ts.getAttribute(TermAttribute.class);
                      System.out.println(ta.term());                                       
               }


上面的是StandardAnalyzer
我想对ChineseAnalyzer、CJKAnalyzer也做下测试,请问怎么改下程序。谢谢了~~~
我用的是lucene 3.0.1版本的
4 楼 luckaway 2009-12-02  
PaodingAnalyzer把停顿词直接废弃掉,个人觉的不太好。比如搜“的”,“是”,很都可能一个结果都搜索不到!!
3 楼 linliangyi2007 2009-08-06  
IKAnalyzer已经推出3.0版本了,欢迎使用
http://linliangyi2007.iteye.com/blog/429960
2 楼 approximation 2009-03-19  
stta04 写道

怎么没有JE分词来做测试,JE分词与paoding分词哪个好?

MMAnalyzer就是JE分词,我刚在文章里注明了一下。
1 楼 stta04 2009-03-18  
怎么没有JE分词来做测试,JE分词与paoding分词哪个好?

相关推荐

    lucene.NET 中文分词

    总的来说,Lucene.NET在中文分词和高亮显示方面的应用需要结合合适的分词器,并进行适当的配置和优化。开发者可以根据实际需求选择适合的分词器,并通过集成和调优提高系统的搜索效率和用户体验。

    lucene中文分词器(paoding解牛)

    总的来说,Paoding分词器是Lucene进行中文信息处理的一个强大工具,它的出现极大地提升了中文文本在搜索引擎中的检索效率和准确性。通过深入理解和熟练运用Paoding,我们可以构建出更加符合中文特性的搜索引擎系统,...

    lucene3庖丁解牛中文分词器

    然而,对于中文文档的处理,Lucene原生的分词能力相对较弱,这就需要我们引入专门的中文分词器来提升搜索效率和准确性。其中,"庖丁解牛"中文分词器因其高效和精准,成为了许多开发者的选择,尤其在支持Lucene 3版本...

    c# 中文分词 LUCENE IKAnalyzer

    6. **Lucene接口集成**:为了让C#分词器与Lucene接口兼容,需要理解并实现Lucene的分析器(Analyzer)接口,以便于在索引和查询过程中正确处理中文文本。 7. **性能优化**:在实际应用中,分词速度和资源占用是重要...

    支持lucene的词典机械中文分词

    本文将深入探讨一种基于Lucene的词典机械中文分词方法,该方法采用了反向机械分词算法,尤其关注对数字、英文以及中英文数字混合词的特殊处理,旨在提高分词速度和准确性。 首先,反向机械分词算法是一种常用的中文...

    compass2.1.4包+所用lucene包+中文分词器

    而添加了中文分词器,如 Je-Analysis,可以使得 Compass 能够有效地处理和搜索中文文档,提高中文搜索的准确性和效率。 总的来说,这个压缩包组合提供了一套完整的解决方案,包括 Compass 搜索引擎框架、它依赖的 ...

    lucene+中文IK分词器 例子

    **Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。在处理中文文本时,由于中文词汇的复杂性和无...

    lucene、solr中文分词器

    它们提供了强大的信息检索和文本分析功能,但Lucene默认的分词器并不适用于中文处理。因此,对于中文索引和搜索,我们需要引入专门针对中文的分词器。本篇文章将深入探讨Lucene和Solr中的中文分词器及其重要性。 ...

    lucene中文分词工具包

    这个工具包的核心是IKAnalyzer,它是一个开源且基于Java语言开发的轻量级中文分词工具,旨在提升中文文本处理的效率和准确性。 **IKAnalyzer详解** IKAnalyzer的设计目标是易于使用和高度可扩展。它采用了模块化的...

    lucene.net中文分词器

    然而,在处理中文文本时,由于中文特有的分词问题,直接使用Lucene.NET可能会遇到效率和准确性的挑战。本文将详细介绍一个基于Lucene.NET 2.0的中文分词器,以及它的核心——最大向前匹配算法。 中文分词是中文自然...

    Lucene4.0 IK分词器使用pdf

    - **用户词典扩展**:优化的词典存储机制,允许用户进行词典扩展,特别是在2012版本中,新增了对中文、英文、数字混合词语的支持,进一步提升了分词的准确性和灵活性。 ##### 分词效果实例 IKAnalyzer 2012提供...

    如何使用Lucene的中文分词搜索

    2. **配置分析器**:在LuceneUtils.java或LuceneDB.java中,需要配置合适的中文分词分析器。例如,使用IK Analyzer,代码可能如下: ```java Analyzer analyzer = new IKAnalyzer(); ``` **三、创建索引** 1. *...

    Lucene与中文分词技术的研究及应用

    为了增强Lucene在中文环境下的表现,需要对Lucene的默认分析器进行扩展,引入中文分词器。常见的中文分词器有: - **Jieba分词**:一款流行的开源中文分词工具,支持精确模式和搜索引擎模式。 - **IK分词**:针对...

    lucene中文分词

    Lucene,作为一个强大的全文搜索引擎库,对于处理中文文档,分词的准确性和效率直接影响到搜索效果。本文将围绕“lucene中文分词”这一主题,深入探讨Lucene如何处理中文文本,以及如何利用相关的分词工具进行有效的...

    ikanalyzer中文分词支持lucene7.1.0

    ikanalyzer中文分词支持lucene7.1.0是为了解决旧版ikanalyzer与新Lucene版本的兼容性问题而推出的,它使得开发者能够充分利用Lucene的最新特性,同时保持ikanalyzer的优秀分词性能,对于处理中文内容的搜索引擎和...

    lucene中文分词(庖丁解牛)庖丁分词

    1. 性能优化:通过调整分词器的参数,如最大匹配长度、最小匹配长度等,可以在准确性和速度之间找到平衡。 2. 实时更新:在大型系统中,可能需要实时更新索引,此时需考虑如何在保持服务可用的同时,有效利用庖丁...

    拼音分词 Pinyin4j+pinyinAnalyzer+lucene-analyzers

    pinyinAnalyzer是Lucene的一个分析器,它利用了Pinyin4j的功能,能够将输入的中文文本分词并转化为拼音形式,以便于Lucene这样的全文搜索引擎进行索引和查询。而lucene-analyzers则是Lucene的一系列分析器集合,包含...

    盘古分词+Lucene

    通过集成盘古分词,Lucene能够更好地理解中文文本,从而提高搜索的准确性和效率。 在实际应用中,开发者可以通过以下步骤实现盘古分词与Lucene的整合: 1. **安装与引入**:首先,需要将Lucene.Net.Analysis.PanGu...

    Lucene-Demo.rar Lucene分词的demo

    分词器的配置是灵活的,可以根据需求选择不同的分词策略,比如标准分词器(StandardAnalyzer)适用于大多数英文文本,而中文分词可能需要使用IKAnalyzer或SmartChineseAnalyzer等针对中文特性的分词器。 在运行这个...

    Lucene4.7+IK Analyzer中文分词入门教程

    在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源分析器,来学习如何构建一个简单的搜索引擎。 首先,你需要下载Lucene 4.7和IK Analyzer 2012-FF Hotfix 1。Lucene的...

Global site tag (gtag.js) - Google Analytics