`
huanglz19871030
  • 浏览: 248718 次
  • 性别: 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   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

 

 

//测试"庖丁解牛"中文分词器的分词效果     

    public class PaodingAnalyzer { 

        public static void main(String[] args) throws Exception { 

            Analyzer analyzer = new PaodingAnalyzer(); 

            String  indexStr = "我的QQ号码是38334641"; 

            StringReader reader = new StringReader(indexStr); 

            TokenStream ts = analyzer.tokenStream(indexStr, reader); 

            Token t = ts.next(); 

            while (t != null) { 

                System.out.print(t.termText()+"  "); 

                t = ts.next(); 

            } 

        } 

    } 

分词结果:我的  qq  号码  38334641   

如果把indexStr换成是"中华人民共和国万岁" ,那么分词结果为: 

中华  华人  人民  共和  共和国  万岁   


分享到:
评论

相关推荐

    怎么判断文章相似性

    根据给定的信息,我们将重点讨论几种常用的方法:**签名值比对**、**局部敏感哈希**特别是**MinHash**算法,以及**分词与分句**技术。 #### 签名值比对 签名值比对是一种常用的技术手段,用于判断两个或多个文档...

    Java 实现文章汉字关键词(违禁词)识别

    2. **分词**:使用分词库(如jieba分词)将文章内容分解成单个汉字或词语。 3. **关键词匹配**:遍历分词结果,通过哈希表或Trie树进行关键词匹配。 4. **结果处理**:如果发现违禁词,记录对应的文章ID,并写入到...

    文本校对系统-可以检查书写的简单错误

    中文分词更具挑战性,因为中文没有明显的空格分隔。常见的分词方法包括基于词典的分词、基于统计的分词和基于深度学习的分词。词典分词依赖于预定义的词汇表,而统计分词则依据词语在语料库中的共现频率。近年来,...

    PaperPass‖维普通达‖照妖镜‖免费论文检测

    上述几种论文检测工具各具特色,不仅为学生提供了便利的论文自查手段,也为教师和学术机构提供了可靠的评估依据。其中,PaperPass和维普通达因其专业的技术背景和广泛的用户基础,在国内享有较高的声誉。拷克网和...

    大学生毕业论文检测系统

    "大学生毕业论文检测系统"是一种专门用于帮助学生检查其毕业论文原创性的工具。该系统的主要目的是防止抄袭,确保学术诚信。在学术界,抄袭是严重违反学术道德的行为,因此,大学通常要求毕业生在提交论文前进行检测...

    JAVA课程设计 题目:敏感词汇测试程序

    敏感词汇检测是该项目的核心部分,尽管代码片段中并未给出具体的实现细节,但可以设想几种可能的方法: 1. **关键词匹配**:将预定义的敏感词汇列表与文本内容进行比对。 2. **正则表达式**:使用正则表达式来匹配...

    单词拼写检查的程序

    在IT领域,单词拼写检查的程序是一种非常实用的工具,尤其对于文本处理、文档编辑以及语言学习等应用场景。这个程序的主要目标是帮助用户确保他们的文字输入无误,避免拼写错误,提升文本质量。在现代计算机应用中,...

    word文档查重

    2. **文本预处理**:这包括去除标点符号、数字和特殊字符,以及进行分词,将长句子拆分为更小的单元以便比对。 3. **创建索引**:将预处理后的文本建立索引,以便快速查找和比较。 4. **查重算法**:宏可能使用TF-...

    大学生学术论文查重系统的设计开发与应用实现

    文章中提到的系统构建了一个包含某高校几年内所有相关学术论文的数据库,以此为基础进行查重。 在系统设计上,首先进行了需求分析,这包括明确查重的目标、确定系统应具备的功能以及用户群体的需求。系统采用敏捷...

    拼写检查的简易记事本

    正则表达式是一种强大的模式匹配工具,可以用来匹配、查找、替换复杂的文本模式。而文本处理算法,如KMP或Boyer-Moore算法,用于高效地查找文本中的特定字符串,显著提高了查询速度。 在myEclipse环境中开发这样的...

    文档智能审阅系统赋能智慧金融.pdf

    NLP包括诸多技术,比如文本抽取、比对、审核、纠错、写作等,这些都是文档智能审阅系统的核心功能。系统使用自定义的机器学习模型来自动抽取文档中的关键信息,简化文档处理过程。这种技术已经广泛应用于人力资源、...

    PyPI 官网下载 | text-reuse-retrieve-0.1.10.tar.gz

    在实际应用中,这可能涉及到诸如文本抄袭检测、文档比对或信息提取等场景。在学术研究、新闻报道和内容审核等领域,这样的工具具有很高的实用价值。 “0.1.10”是版本号,表示这是该库的第10次小版本更新。通常,...

    sensitiveWordFiltering:多模式匹配 敏感词审核 支持谐音,特殊符号分割敏感词

    敏感词过滤的实现通常有几种方法: 1. **精确匹配**:这是最基础的方式,直接查找字符串是否完全匹配敏感词。但这种方式无法处理谐音或变形的情况。 2. **正向最大匹配**:从左到右查找最长的敏感词,避免误判。 ...

    spellchecker:用于检查文本文件中的拼写错误

    在IT行业中,拼写检查器是一种非常实用的工具,尤其对于文本编辑、写作软件和在线平台来说至关重要。本文将深入探讨“spellchecker”这一特定的拼写检查器,它主要用于检查文本文件中的拼写错误,并提供相应的纠正...

    PlagiarismChecker

    该工具主要通过比对输入文档与大量网络资源或特定数据库中的内容,找出相似度较高的片段,从而判断是否存在抄袭行为。其主要特点包括: 1. **广泛的数据源**:PlagiarismChecker可以接入各种在线资源,如学术论文库...

Global site tag (gtag.js) - Google Analytics