前提:文章基于lucene2.2。
目前最新版本的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
分享到:
相关推荐
### Lucene与中文分词技术的研究及应用 #### Lucene简介与原理 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它为开发者提供了构建全文搜索引擎的能力,而无需关注底层搜索机制的具体实现...
这些分词器专门针对中文的特点进行了优化,能够准确地将连续的汉字序列切分成具有实际意义的词语,这一过程称为中文分词。 ikanalyzer和IK Analyzer是基于字典的分词器,它们维护了大规模的中文词汇库,通过查找...
歧义消除通常可以通过以下几种方式实现: - **上下文相关性分析**:根据前后文的语境来确定最佳的分词方案。 - **词频统计**:优先选择在语料库中出现频率较高的词语组合。 - **语法规则**:利用语言学知识,比如...
盘古分词是专门为中文设计的一种高效、精准的分词工具。它能够对中文文本进行细分,将其拆分成有意义的词汇单元,以便于后续的索引和搜索操作。盘古分词以其高性能和良好的分词效果,在许多.NET 应用中被广泛应用,...
而盘古分词是针对中文分词的一种解决方案,它为Lucene提供了更加精准和高效的中文分词能力。在“Lucene3.0.3+盘古分词(证实可用,可指定使用自己的词库文件).rar”这个压缩包中,包含了实现这一功能所需的DLL文件...
“Ik”的jar包则可能是指“Smart Chinese Analyzer for Lucene”,即ik分词器,这是一个专门针对中文的分词库,适用于Lucene和Solr。Ik分词器能够对中文文本进行有效的分词处理,提高了中文搜索的准确性。`ik-...
疱丁解牛分词器是一款专门针对中文分词的工具,其特点在于使用了灵活的词典和多种切分方法。本知识点将详细解析疱丁分词器中的关键概念、词典的组成、词典加载策略、编译过程、编码方式以及刀的种类和切分方法等。 ...
在Lucene5版本中,它不仅提供了基础的文本搜索功能,还支持了拼音搜索,这极大地提高了中文搜索的便利性和准确性。本文将围绕“Lucene5学习之拼音搜索”这一主题,详细介绍其拼音搜索的实现原理和实际应用。 首先,...
5. `IKAnalyzer.cfg.xml`:配置文件,用于设置IKAnalyzer的行为,如是否开启动态加载词典、使用哪种分词模式(精细模式或全模式)、启用哪个词典等。 在配置Solr以使用IKAnalyzer时,你需要在Solr的`solrconfig.xml...
在中文环境中,通常使用IK分词器或其他专门针对中文的分词工具,如jieba分词。 2. **索引**:分词后的结果被构建为倒排索引,这是一种优化的结构,使得快速查找含有特定词汇的文档变得可能。 3. **查询解析**:用户...
**Lucene学习总结** 在深入理解Lucene之前,我们首先需要了解什么是全文检索。全文检索是一种从大量文本数据中快速查找所需信息的技术。它通过建立索引来实现高效的搜索,而Lucene正是Java环境下最著名的全文搜索...
Lucene作为Apache软件基金会的一个开源项目,是Java领域内最著名的全文搜索引擎库,而IKAnalyzer则是针对中文分词的优秀解决方案。本篇文章将详细介绍如何利用Lucene4.0和IKAnalyzer2012来构建一个高性能的中文全文...
IK中文分词器是针对中文文本处理的一种常用工具,尤其在搜索引擎和自然语言处理领域有着广泛的应用。在Solr 5版本中,IK分词器作为一个插件被集成,为Solr提供了强大的中文分词能力,帮助用户进行精确、灵活的全文...
搜索是Lucene的核心功能,通过Query对象来构造查询条件,主要有以下几种查询类型: - 单词查询(TermQuery):匹配特定单词。 - 布尔查询(BooleanQuery):组合多个查询条件,如AND、OR、NOT。 - 范围查询...
总结来说,这个压缩包中的源代码提供了Lucene索引创建和搜索的实践示例,对于学习Java和Lucene的开发者来说,这是一个宝贵的资源。通过深入理解并实践这些代码,你可以掌握如何在实际项目中应用Lucene来构建高效的...
### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1....以上是对Lucene3源码分析的一些关键知识点总结,通过对这些概念和技术的理解,可以更好地掌握Lucene的工作原理及其应用。
几种分词工具都试过,对于中文来说的的话个人觉得IKAnalyzer 最好用,不同版本的IKAnalyzer jar包,包括IKAnalyzer6.5.0、IKAnalyzer5.0、IKAnalyzer2012,IKAnalyzer6.5.0可完美兼容Lucene6+,IKAnalyzer5.0兼容...