`

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

阅读更多

前提:文章基于lucene2.2
目前最新版本的lucene自身提供的StandardAnalyzer已经具备中文分词的功能,但是不一定能够满足大多数应用的需要。
另外网友谈的比较多的中文分词器还有:
CJKAnalyzer
ChineseAnalyzer
IK_CAnalyzer
MIK_CAnalyzer
还有一些热心网友自己写的比较不错的分词器在此就不说了,有兴趣的可以自己研究研究。
以上三个中文分词器并不是lucene2.2.jar里提供的。
CJKAnalyzer
ChineseAnalyzer分别是lucene-2.2.0目录下contrib目录下analyzerslucene-analyzers-2.2.0.jar提供的分别位于cncjk目录
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   render   =   new   StringReader(str);                  
                        StopFilter   stopFilter   =   (StopFilter)   analyzer.tokenStream( " ",   render  );
                        System.out.println( "=====StandardAnalyzer==== ");
                        System.out.println( "
分析方法:默认没有词只有字(一元分词) ");
                        Token   token;                  
                      while   ((token   =   stopFilter.next())   !=   null)   {                  
                                    System.out.println(token.termText());                  
                        }              
            }
          public   static   void   CJK_Analyzer(String   str)   throws   Exception{
                        Analyzer   analyzer   =   new   CJKAnalyzer();                  
                        Reader   render   =   new   StringReader(str);                  
                        StopFilter   stopFilter   =   (StopFilter)   analyzer.tokenStream( " ",   render);
                        System.out.println( "=====CJKAnalyzer==== ");
                        System.out.println( "
分析方法:交叉双字分割(二元分词) ");
                        Token   token;                  
                      while   ((token   =   stopFilter.next())   !=   null)   {                  
                                    System.out.println(token.termText());                  
                        }               
            }
          public   static   void   Chiniese_Analyzer(String   str)   throws   Exception{
                        Analyzer   analyzer   =   new   ChineseAnalyzer();                  
                        Reader   render   =   new   StringReader(str);                  
                        TokenFilter   tokenFilter   =   (TokenFilter)   analyzer.tokenStream( " ",   render);
                        System.out.println( "=====chinese   analyzer==== ");
                        System.out.println( "
分析方法:基本等同StandardAnalyzer(一元分词) ");
                        Token   token;                  
                      while   ((token   =   tokenFilter.next())   !=   null)   {                  
                                    System.out.println(token.termText());                  
                        }              
            }
          public   static   void   ik_CAnalyzer(String   str)   throws   Exception{
//                     Analyzer   analyzer   =   new   MIK_CAnalyzer();
                        Analyzer   analyzer   =   new   IK_CAnalyzer();
                        Reader   reader   =   new   StringReader(str);  
                        TokenStream   tokenStream   =   (TokenStream)analyzer.tokenStream( " ",   reader);
                        System.out.println( "=====IK_CAnalyzer==== ");
                        System.out.println( "
分析方法:字典分词,正反双向搜索 ");
                        Token   token;        
                      while   ((token   =   tokenStream.next())   !=   null)   {        
                                  System.out.println(tokenStream.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

http://topic.csdn.net/u/20070714/13/84db902a-9128-4b1b-8dd8-a631f15db931.html

分享到:
评论

相关推荐

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

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

    lucene、solr中文分词器

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

    基于Lucene的中文分词方法设计与实现

    歧义消除通常可以通过以下几种方式实现: - **上下文相关性分析**:根据前后文的语境来确定最佳的分词方案。 - **词频统计**:优先选择在语料库中出现频率较高的词语组合。 - **语法规则**:利用语言学知识,比如...

    Lucene.net 盘古分词字典管理

    盘古分词是专门为中文设计的一种高效、精准的分词工具。它能够对中文文本进行细分,将其拆分成有意义的词汇单元,以便于后续的索引和搜索操作。盘古分词以其高性能和良好的分词效果,在许多.NET 应用中被广泛应用,...

    Lucene3.0.3+盘古分词(证实可用,可指定使用自己的词库文件).rar

    而盘古分词是针对中文分词的一种解决方案,它为Lucene提供了更加精准和高效的中文分词能力。在“Lucene3.0.3+盘古分词(证实可用,可指定使用自己的词库文件).rar”这个压缩包中,包含了实现这一功能所需的DLL文件...

    lucene所有的jar包

    “Ik”的jar包则可能是指“Smart Chinese Analyzer for Lucene”,即ik分词器,这是一个专门针对中文的分词库,适用于Lucene和Solr。Ik分词器能够对中文文本进行有效的分词处理,提高了中文搜索的准确性。`ik-...

    几个搜索相关的pdf(lucene, 分词等)

    疱丁解牛分词器是一款专门针对中文分词的工具,其特点在于使用了灵活的词典和多种切分方法。本知识点将详细解析疱丁分词器中的关键概念、词典的组成、词典加载策略、编译过程、编码方式以及刀的种类和切分方法等。 ...

    Lucene5学习之拼音搜索

    在Lucene5版本中,它不仅提供了基础的文本搜索功能,还支持了拼音搜索,这极大地提高了中文搜索的便利性和准确性。本文将围绕“Lucene5学习之拼音搜索”这一主题,详细介绍其拼音搜索的实现原理和实际应用。 首先,...

    IKAnalyzer中文分词器jar包

    5. `IKAnalyzer.cfg.xml`:配置文件,用于设置IKAnalyzer的行为,如是否开启动态加载词典、使用哪种分词模式(精细模式或全模式)、启用哪个词典等。 在配置Solr以使用IKAnalyzer时,你需要在Solr的`solrconfig.xml...

    基于爬虫和lucene构建的重大新闻网

    在中文环境中,通常使用IK分词器或其他专门针对中文的分词工具,如jieba分词。 2. **索引**:分词后的结果被构建为倒排索引,这是一种优化的结构,使得快速查找含有特定词汇的文档变得可能。 3. **查询解析**:用户...

    lucene学习总结

    **Lucene学习总结** 在深入理解Lucene之前,我们首先需要了解什么是全文检索。全文检索是一种从大量文本数据中快速查找所需信息的技术。它通过建立索引来实现高效的搜索,而Lucene正是Java环境下最著名的全文搜索...

    lucene4.0+ik

    Lucene作为Apache软件基金会的一个开源项目,是Java领域内最著名的全文搜索引擎库,而IKAnalyzer则是针对中文分词的优秀解决方案。本篇文章将详细介绍如何利用Lucene4.0和IKAnalyzer2012来构建一个高性能的中文全文...

    ik中文分词器,solr5版

    IK中文分词器是针对中文文本处理的一种常用工具,尤其在搜索引擎和自然语言处理领域有着广泛的应用。在Solr 5版本中,IK分词器作为一个插件被集成,为Solr提供了强大的中文分词能力,帮助用户进行精确、灵活的全文...

    Lucene在web项目中的应用

    搜索是Lucene的核心功能,通过Query对象来构造查询条件,主要有以下几种查询类型: - 单词查询(TermQuery):匹配特定单词。 - 布尔查询(BooleanQuery):组合多个查询条件,如AND、OR、NOT。 - 范围查询...

    lucene实现 源代码,里面还含有索引创建,搜索等功能

    总结来说,这个压缩包中的源代码提供了Lucene索引创建和搜索的实践示例,对于学习Java和Lucene的开发者来说,这是一个宝贵的资源。通过深入理解并实践这些代码,你可以掌握如何在实际项目中应用Lucene来构建高效的...

    lucene3源码分析

    ### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1....以上是对Lucene3源码分析的一些关键知识点总结,通过对这些概念和技术的理解,可以更好地掌握Lucene的工作原理及其应用。

    几种分词工具的jar包(IKAnalyzer、hanlp、mmseg4j-analysis)

    几种分词工具都试过,对于中文来说的的话个人觉得IKAnalyzer 最好用,不同版本的IKAnalyzer jar包,包括IKAnalyzer6.5.0、IKAnalyzer5.0、IKAnalyzer2012,IKAnalyzer6.5.0可完美兼容Lucene6+,IKAnalyzer5.0兼容...

Global site tag (gtag.js) - Google Analytics