`
kuiyuexiang
  • 浏览: 55913 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

几种分词器比较

阅读更多
目前最新版本的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

文章来源:永恒论坛-http://www.yyhweb.com
http://www.yyhweb.com/Article.htm?cId=2&fId=3&aId=88
分享到:
评论
1 楼 kinglord2010 2010-07-22  
百度、gongle等搜索引擎用的是什么分词方法?

相关推荐

    elasticsearch7.8.0版本的IK分词器

    1. **分词模式**: IK 分词器有两种分词模式——精确模式和全模式。精确模式适用于关键词检索,尽可能少地切分,保证关键词完整性;全模式则会尽可能多的切分,以覆盖更多可能的搜索需求。 2. **自定义扩展词库**: ...

    IK分词器源码

    源码中,我们可以看到IK分词器的核心组件包括以下几个部分: 1. **词典**:词典是分词器的基础,存储了大量的词汇及其属性信息。在IK分词器中,词典通常以Trie树结构实现,便于快速查找和匹配词汇。源码中的`...

    常用中文分词器及地址链接

    当前有多种中文分词器可供选择,每种分词器都有其特点和优势,本文将对当前常用的中文分词器进行列举和介绍。 1. ICTCLAS ICTCLAS是业界比较出名的中文分词器,能够进行分词、词性标注等功能。ICTCLAS由C++编写,...

    基于python开发的微型中文分词器 附完整代码

    一个微型的中文分词器,目前提供了以下几种分词算法: 按照词语的频率(概率)来利用构建 DAG(有向无环图)来分词,使用 Trie Tree 构建前缀字典树 使用隐马尔可夫模型(Hidden Markov Model,HMM)来分词 融合 DAG...

    IK分词器_ikanalyzer-solr5

    为了进一步优化IK分词器的性能,我们可以考虑以下几点: 1. 调整词典:根据业务需求定制词典,增加专业词汇或者去除噪声词汇。 2. 使用智能切词模式:通过设置配置参数,使分词器在处理不同场景时自动选择精确模式或...

    ElasticSearch 重写IK分词器源码设置mysql热词更新词库1

    首先,我们要了解IK分词器的几种常用词库配置方式。 **0. 常用热词词库配置方式** 0.1 **IK内置词库** 优点:部署简单,无需额外指定词库位置。 缺点:分词单一,无法针对特定词汇进行定制。 0.2 **IK外置静态...

    cws_evaluation, Java开源项目cws_evaluation:中文分词器分词效果评估对比.zip

    2. **分词器接口**:项目为每种分词器定义了一个统一的接口,使得不同分词器的运行和比较变得标准化。 3. **分词**:利用接口调用各个分词器对测试数据进行处理,生成分词结果。 4. **评估**:项目提供了多种评估...

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

    在实际应用中,选择哪种分词器应根据具体需求来决定。如果需要高效处理中日韩三国语言,可以选择CJKAnalyzer;如果专注中文且不涉及其他语言,ChineseAnalyzer可能是更好的选择;而对于更复杂的需求,如新词识别和...

    ik中文分词器,solr5版

    使用IK中文分词器的步骤大致包括以下几个方面: 1. 下载IKAnalyzer的源码或者jar包。 2. 将IKAnalyzer的jar包添加到Solr的lib目录下。 3. 修改`schema.xml`,配置字段类型和字段,使用IKAnalyzer。 4. 配置分词模式...

    lucene、solr中文分词器

    在使用这些中文分词器时,需要注意以下几点: 1. 配置:正确配置分词器的字典文件和相关参数,以确保最佳性能。 2. 性能:不同的分词器在速度和准确性上可能有所差异,需要根据具体需求进行选择。 3. 更新:定期...

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

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

    基于Python实现一个微型的中文分词器【100012305】

    一个微型的中文分词器,目前提供了以下几种分词算法: 按照词语的频率(概率)来利用构建 DAG(有向无环图)来分词,使用 Trie Tree 构建前缀字典树 使用隐马尔可夫模型(Hidden Markov Model,HMM)来分词 融合 DAG...

    IKAnalyzer中文分词器jar包

    在"IKAnalyzer中文分词器jar包"中,包含以下几个关键文件: 1. `stopword.dic`:停用词表,这是一个包含常见无意义词汇(如“的”、“是”、“在”等)的文件,分词器在处理文本时会忽略这些词汇,以提高搜索效率和...

    word分词算法(demo)

    常见的中文分词算法有以下几种: 1. 基于词典的分词:这种方法依赖于大型的词汇表,通过查找词典中的词语来识别词元。如果遇到未登录词(词典中不存在的词),则需要进行未知词识别。例如,jieba分词库就是基于词典...

    solr分词器

    标题提到的"solr分词器"主要涉及到以下几个方面的知识点: 1. **分词原理**:分词是自然语言处理的基础任务,它将一段文字按照语义和语法切分成一个个有意义的单元,如单词或短语。在Solr中,分词器通过分析文本的...

    elasticsearch自定义分词插件

    然而,Elasticsearch默认的分词器可能无法满足所有业务场景的需求,这时我们就需要自定义分词插件来扩展其功能。本教程将围绕“elasticsearch自定义分词插件”这一主题展开,通过分析一个简单的空格分词插件实例,...

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

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

    中文分词工具.docx

    本文将对比分析三种常用的中文分词工具:Jieba、SnowNLP 和 THULAC。 1. Jieba(结巴)中文分词 Jieba 是一个广泛使用的 Python 中文分词组件,支持 Windows 和 Linux 平台。它提供了三种切词模式: - 全模式:尽...

    几种基于词典的中文分词算法评价

    ### 几种基于词典的中文分词算法评价 #### 中文分词技术的重要性 中文分词技术在中文信息处理领域扮演着至关重要的角色。随着信息技术的发展,无论是政府决策、企业经营还是个人生活,信息的有效获取都变得越来越...

    庖丁分词jar包

    使用庖丁分词jar包的步骤大致包括以下几点: 1. **下载与引入**:首先,从官方网站或可靠的源获取paoding-analysis-2.0.0.jar包,并将其添加到项目的类路径(classpath)中,这可以通过IDE的依赖管理功能或者手动...

Global site tag (gtag.js) - Google Analytics