`

(转载)Lucene几种中文分词的总结

阅读更多
Lucene几种中文分词的总结

    博客分类:
    聚类搜索引擎

luceneApachePHP.netBlog
IK_CAnalyzer下载地址:http://cn.ziddu.com/download.php?uid=ZrKcmJepZbOb4palZLKWlJiiZaycmps%3D4

     

目前最新版本的lucene自身提供的StandardAnalyzer已经具备中文分词的功能,但是不一定能够满足大多数应用的需要。
另外网友谈的比较多的中文分词器还有:
CJKAnalyzer
ChineseAnalyzer
IK_CAnalyzer(MIK_CAnalyzer)
还有一些热心网友自己写的比较不错的分词器在此就不说了,有兴趣的可以自己研究研究。
以上三个中文分词器并不是lucene2.2.jar里提供的。
CJKAnalyzer和ChineseAnalyzer分别是lucene-2.2.0目录下contrib目录下analyzers的lucene-analyzers-2.2.0.jar提供的。分别位于cn和cjk目录。
IK_CAnalyzer(MIK_CAnalyzer)是基于分词词典,目前最新的1.4版本是基于lucene2.0开发的。以上分词器各有优劣,比较如下:
import java.io.Reader;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.mira.lucene.analysis.IK_CAnalyzer;
import org.mira.lucene.analysis.MIK_CAnalyzer;

public class All_Test {
     private static String string = "中华人民共和国在1949年建立,从此开始了新中国的伟大篇章。";
     public static void Standard_Analyzer(String str) throws Exception{
             Analyzer analyzer = new StandardAnalyzer();      
             Reader r = new StringReader(str);      
             StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
             System.out.println("=====StandardAnalyzer====");
             System.out.println("分析方法:默认没有词只有字(一元分词)");
             Token t;      
           while ((t = sf.next()) != null) {      
                   System.out.println(t.termText());      
             }    
       }
     public static void CJK_Analyzer(String str) throws Exception{
             Analyzer analyzer = new CJKAnalyzer();      
             Reader r = new StringReader(str);      
             StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
             System.out.println("=====CJKAnalyzer====");
             System.out.println("分析方法:交叉双字分割(二元分词)");
             Token t;      
           while ((t = sf.next()) != null) {      
                   System.out.println(t.termText());      
             }    
       }
     public static void Chiniese_Analyzer(String str) throws Exception{
             Analyzer analyzer = new ChineseAnalyzer();      
             Reader r = new StringReader(str);      
             TokenFilter tf = (TokenFilter) analyzer.tokenStream("", r);
             System.out.println("=====chinese analyzer====");
             System.out.println("分析方法:基本等同StandardAnalyzer(一元分词)");

Token t;      
           while ((t = tf.next()) != null) {      
                   System.out.println(t.termText());      
             }    
       }
     public static void ik_CAnalyzer(String str) throws Exception{
//           Analyzer analyzer = new MIK_CAnalyzer();
             Analyzer analyzer = new IK_CAnalyzer();
             Reader r = new StringReader(str);
             TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
             System.out.println("=====IK_CAnalyzer====");
             System.out.println("分析方法:字典分词,正反双向搜索");
             Token t;  
           while ((t = ts.next()) != null) {  
                 System.out.println(t.termText());  
             }  
       }
     public static void main(String[] args) throws Exception{
             String str = string;
             System.out.println("我们测试的字符串是:"+str);
        
             Standard_Analyzer(str);
             CJK_Analyzer(str);
             Chiniese_Analyzer(str);
             ik_CAnalyzer(str);
       }

}
分词结果如下:
我们测试的字符串是:中华人民共和国在1949年建立,从此开始了新中国的伟大篇章。
=====StandardAnalyzer====
分析方法:默认没有词只有字(一元分词)








1949
















=====CJKAnalyzer====
分析方法:交叉双字分割(二元分词)
中华
华人
人民
民共
共和
和国
国在
1949
年建
建立
从此
此开
开始
始了
了新
新中
中国
国的
的伟
伟大
大篇
篇章
=====chinese analyzer====
分析方法:基本等同StandardAnalyzer(一元分词)
























=====IK_CAnalyzer====
分析方法:字典分词,正反双向搜索
中华人民共和国
中华人民
中华
华人
人民共和国
人民

共和国
共和
1949年
建立
从此
开始
新中国
中国
伟大
大篇
篇章
如果 ik_CAnalyzer(String str) 里采用
Analyzer analyzer = new MIK_CAnalyzer();
那么该方法的分词结果是:

中华人民共和国
1949年
建立
从此
开始
新中国
伟大
大篇
篇章

可以看到各种分词结果各不相同,根据应用的需要可以选择合适的分词器。
关于IKAnalyzer的介绍可以参考:
http://blog.csdn.net/dbigbear/archive/2007/01/24/1492380.aspx

IK_CAnalyzer下载地址:http://cn.ziddu.com/download.php?uid=ZrKcmJepZbOb4palZLKWlJiiZaycmps%3D4






搜索引擎和网络爬虫技术群293961767欢迎志同道合的朋友加入!
分享到:
评论

相关推荐

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    Lucene关于几种中文分词的总结

    以下是对几种常见Lucene中文分词器的总结: 1. CJKAnalyzer:此分词器是Lucene contrib目录下的analyzers子目录中的组件,位于cn目录。CJKAnalyzer主要针对中日韩三国语言进行分词,它基于字符级别进行分词,适用于...

    lucene6.6+拼音分词+ik中文分词包

    《深入理解Lucene 6.6:拼音与IK中文分词技术详解》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在...

    lucene.net+盘古分词多条件全文检索并匹配度排序

    使用visual studio 开发的lucene.net和盘古分词实现全文检索。并按照lucene的得分算法进行多条件检索并按照得分算法计算匹配度排序。 可以输入一句话进行检索。 lucene.net的版本为2.9.2 盘古分词的版本为2.3.1 并...

    Lucene.Net+盘古分词C# Demo

    Lucene.Net+盘古分词是一个常见的中文信息检索组合。但是随着盘古分词停止更新,与Lucene.Net3.0无法兼容。为了使得大家少走弯路,本人利用Lucene.Net2.9+盘古分词2.3搭建了一个Demo,里面包含了两个模块的源码,方便...

    Lucene中文分词器包

    来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...

    lucene+中文IK分词器 例子

    总结来说,"lucene3.5 + ik中文分词器例子"是一个展示如何使用Lucene进行中文全文检索的示例,它涵盖了从数据抓取、分词处理、索引建立到查询执行的全过程。通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词...

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

    **标题:“如何使用Lucene的中文分词搜索”** 在信息检索和文本处理领域,Apache Lucene是一个强大的全文搜索引擎库,它提供了高级的索引和搜索功能。在处理中文文本时,由于中文句子是由词语组成的,而非单个字符...

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

    Compass 是一个基于 Lucene 的全文检索框架,它提供了一种高级的、面向对象的方式来管理和集成搜索引擎到你的应用程序中。在“compass2.1.4包”中,包含了 Compass 框架的版本 2.1.4,这个版本可能包含了性能优化、...

    Lucene中文分词器组件

    本文将深入探讨Lucene中文分词器组件的相关知识点。 首先,我们要明白中文分词的重要性。由于中文是以词为基本单位,不像英文那样有明显的空格分隔,因此在进行信息检索时,需要先对中文文本进行分词,将连续的汉字...

    运用在lucene中的中文分词算法源码

    总结,理解和掌握Lucene中的中文分词算法源码,不仅有助于我们优化搜索性能,还能为定制化需求提供技术支持。通过深入学习这些分词器的工作原理,开发者可以更好地调整分词策略,以适应特定的应用场景,提升系统的...

    lucene、solr中文分词器

    这些分词器专门针对中文的特点进行了优化,能够准确地将连续的汉字序列切分成具有实际意义的词语,这一过程称为中文分词。 ikanalyzer和IK Analyzer是基于字典的分词器,它们维护了大规模的中文词汇库,通过查找...

    Lucene.Net+盘古分词Demo

    Lucene.Net+盘古分词是一个常见的中文信息检索组合。但是随着盘古分词停止更新,与Lucene.Net3.0无法兼容。为了使得大家少走弯路,本人利用Lucene.Net2.9+盘古分词2.3搭建了一个Demo,里面包含了两个模块的源码,方便...

    完整的站内搜索引擎(Lucene.Net+盘古分词)

    分词(lucene.Net提供StandardAnalyzer一元分词,按照单个字进行分词,一个汉字一个词) 盘古分词 基于词库的分词,可以维护词库 首先我们新增的SearchHelper类需要将其做成一个单例,使用单例是因为:有许多地方需要...

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

    ### Lucene与中文分词技术的研究及应用 #### Lucene简介与原理 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它为开发者提供了构建全文搜索引擎的能力,而无需关注底层搜索机制的具体实现...

    Lucene3.0.3+盘古分词 资源汇总

    总结,Lucene 3.0.3与盘古分词的结合,为开发者提供了一套强大的中文搜索引擎解决方案。通过合理利用提供的资源,我们可以构建出响应迅速、准确度高的搜索系统,满足用户的信息需求。同时,不断优化字典和分词算法,...

    Lucene.Net +盘古分词 搜索引擎

    "盘古分词"是一个专门针对中文的分词工具,它可以将中文文本有效地切分成一个个独立的词语,为Lucene.Net提供精确的索引和查询基础。盘古分词以其高效、准确和丰富的词汇库,广泛应用于各种中文信息处理系统,包括...

    lucene.net+盘古分词

    总结来说,Lucene.NET与盘古分词的结合,使得.NET开发者能够轻松构建功能强大的中文全文搜索引擎。通过合理地配置和优化,我们可以实现快速的数据索引、精确的查询匹配以及友好的结果显示,从而提升应用的搜索体验。...

    lucene中文分词工具包

    Lucene是一个高性能、全文检索库,而“lucene中文分词工具包”则为Lucene提供了一个专门针对中文分词的解决方案。这个工具包的核心是IKAnalyzer,它是一个开源且基于Java语言开发的轻量级中文分词工具,旨在提升中文...

Global site tag (gtag.js) - Google Analytics