`
kuiyuexiang
  • 浏览: 54767 次
  • 性别: 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等搜索引擎用的是什么分词方法?

相关推荐

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

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

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

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

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

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

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

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

    中文分词工具.docx

    七种中文分词工具的实验尝试与对比,具体使用时需结合场景选择。

    现在分词作状语有几种形式.ppt

    现在分词作状语有几种形式.ppt

    盘古中文分词 开源 C#

    最好用的中文分词,真正能用的开源分词,下了绝对不后悔!找了好久终于找到的,比其他几种分词组件都好用,很感谢作者,也分享给大家。

    中文分词原理.pdf

    中文分词原理,搜索引擎基本原理,中文分词的几种方法

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

    结合当前中文分词技术在中丈信息处理等领域的广泛应用,分析了中丈分词技术的重要性,对三类 基本分词算法进行了介绍并讨论了各自的特.点,提出了中文分词技术面临的难题及汁其未来的展望。

    中文分词服务器3.3

    分词服务器安装方式有两种(假设你保存在D盘,如果不是请自行更改): 一、也可以直接通过双击 安装分词服务器.bat 来进行安装 二、d:\fenciserver.exe install 回车即可!(安装后就会自动启动服务) 分词服务器卸载...

    基于双数组Trie_树中文分词研究

    对双数纽Trie 树(Double-Array Trie)分词算法进行了优化:在采用... 分词系统,并与其他几种分词方法进行对比,结果表明,优化后的双数纽Trie 树插入速度和 空间利用率得到了很大提高,且分词查询效率也得到了提高.

    ecshop分词模糊搜索

    提供一种强大的分词搜索,用户可以不用空格某几个分词,随便打一个句子就可以搜索出对应的结果 2.可以自定义分词。 3.搜索结果自动按照相关度排序,相关度越相关,越排在最前面。 插件为试用版,如果正式使用...

    PHP中文分词代码 v1.0 UTF-8.rar

    常用的几种机械分词方法如下: 1)正向最大匹配法(由左到右的方向); 2)逆向最大匹配法(由右到左的方向); 3)最少切分(使每一句中切出的词数最小)。 还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和...

    Spark大数据中文分词统计Java工程源码

    参考网络资源使用IKAnalyzer分词组件,实现了纯Java语言、MapReduce模式及Spark 框架三种方式对唐诗宋词等国学经典进行中文分词统计排序的功能,你可以轻松发现唐诗宋词中最常用的词是那几个。

    藏拙简易中文分词服务器源代码及词库

    分词服务器安装方式有两种(假设你保存在D盘,如果不是请自行更改): 一、也可以直接通过双击 安装分词服务器.bat 来进行安装 二、d:\fenciserver.exe install 回车即可!(安装后就会自动启动服务) 分词服务器卸载...

    浅析常用分词算法的比较与设想

    与基于理解的分词算法和基于统计的分词算法相比,基于文本匹配的算法更加通用。... 常用的几种机械分词方法如下:  1) 正向最大匹配法(由左到右的方向)  2) 逆向最大匹配法(由右到左的方向)

    Python3爬虫中关于中文分词的详解

    原理 中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是...下面我们对这几种方法分别进行总结。 基于规则的分词方法 这种方法又叫作机械分词方法、基于

    论文研究-基于Lucene的地名数据库快速检索系统.pdf

    首先,设计了一种地名数据表结构,比较了几种常用开源分词器的中文分词性能,并选用性能优异的盘古中文分词器,通过扩展其词典来实现中文地名的有效分词。其次,利用内存索引和多线程并行处理技术提高Lucene创建倒排...

    论文研究-基于搜索统计技术中文分词算法的应用研究 .pdf

    基于搜索统计技术中文分词算法的应用研究,付青华,,中文分词是影响中文搜索引擎性能的一个重要因素,而歧义识别则是中文分词中需要解决的一个问题,本文简要介绍了目前主要的几种中

Global site tag (gtag.js) - Google Analytics