目前最新版本的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. **分词模式**: IK 分词器有两种分词模式——精确模式和全模式。精确模式适用于关键词检索,尽可能少地切分,保证关键词完整性;全模式则会尽可能多的切分,以覆盖更多可能的搜索需求。 2. **自定义扩展词库**: ...
源码中,我们可以看到IK分词器的核心组件包括以下几个部分: 1. **词典**:词典是分词器的基础,存储了大量的词汇及其属性信息。在IK分词器中,词典通常以Trie树结构实现,便于快速查找和匹配词汇。源码中的`...
当前有多种中文分词器可供选择,每种分词器都有其特点和优势,本文将对当前常用的中文分词器进行列举和介绍。 1. ICTCLAS ICTCLAS是业界比较出名的中文分词器,能够进行分词、词性标注等功能。ICTCLAS由C++编写,...
一个微型的中文分词器,目前提供了以下几种分词算法: 按照词语的频率(概率)来利用构建 DAG(有向无环图)来分词,使用 Trie Tree 构建前缀字典树 使用隐马尔可夫模型(Hidden Markov Model,HMM)来分词 融合 DAG...
为了进一步优化IK分词器的性能,我们可以考虑以下几点: 1. 调整词典:根据业务需求定制词典,增加专业词汇或者去除噪声词汇。 2. 使用智能切词模式:通过设置配置参数,使分词器在处理不同场景时自动选择精确模式或...
首先,我们要了解IK分词器的几种常用词库配置方式。 **0. 常用热词词库配置方式** 0.1 **IK内置词库** 优点:部署简单,无需额外指定词库位置。 缺点:分词单一,无法针对特定词汇进行定制。 0.2 **IK外置静态...
2. **分词器接口**:项目为每种分词器定义了一个统一的接口,使得不同分词器的运行和比较变得标准化。 3. **分词**:利用接口调用各个分词器对测试数据进行处理,生成分词结果。 4. **评估**:项目提供了多种评估...
在实际应用中,选择哪种分词器应根据具体需求来决定。如果需要高效处理中日韩三国语言,可以选择CJKAnalyzer;如果专注中文且不涉及其他语言,ChineseAnalyzer可能是更好的选择;而对于更复杂的需求,如新词识别和...
使用IK中文分词器的步骤大致包括以下几个方面: 1. 下载IKAnalyzer的源码或者jar包。 2. 将IKAnalyzer的jar包添加到Solr的lib目录下。 3. 修改`schema.xml`,配置字段类型和字段,使用IKAnalyzer。 4. 配置分词模式...
在使用这些中文分词器时,需要注意以下几点: 1. 配置:正确配置分词器的字典文件和相关参数,以确保最佳性能。 2. 性能:不同的分词器在速度和准确性上可能有所差异,需要根据具体需求进行选择。 3. 更新:定期...
几种分词工具都试过,对于中文来说的的话个人觉得IKAnalyzer 最好用,不同版本的IKAnalyzer jar包,包括IKAnalyzer6.5.0、IKAnalyzer5.0、IKAnalyzer2012,IKAnalyzer6.5.0可完美兼容Lucene6+,IKAnalyzer5.0兼容...
一个微型的中文分词器,目前提供了以下几种分词算法: 按照词语的频率(概率)来利用构建 DAG(有向无环图)来分词,使用 Trie Tree 构建前缀字典树 使用隐马尔可夫模型(Hidden Markov Model,HMM)来分词 融合 DAG...
在"IKAnalyzer中文分词器jar包"中,包含以下几个关键文件: 1. `stopword.dic`:停用词表,这是一个包含常见无意义词汇(如“的”、“是”、“在”等)的文件,分词器在处理文本时会忽略这些词汇,以提高搜索效率和...
常见的中文分词算法有以下几种: 1. 基于词典的分词:这种方法依赖于大型的词汇表,通过查找词典中的词语来识别词元。如果遇到未登录词(词典中不存在的词),则需要进行未知词识别。例如,jieba分词库就是基于词典...
标题提到的"solr分词器"主要涉及到以下几个方面的知识点: 1. **分词原理**:分词是自然语言处理的基础任务,它将一段文字按照语义和语法切分成一个个有意义的单元,如单词或短语。在Solr中,分词器通过分析文本的...
然而,Elasticsearch默认的分词器可能无法满足所有业务场景的需求,这时我们就需要自定义分词插件来扩展其功能。本教程将围绕“elasticsearch自定义分词插件”这一主题展开,通过分析一个简单的空格分词插件实例,...
疱丁解牛分词器是一款专门针对中文分词的工具,其特点在于使用了灵活的词典和多种切分方法。本知识点将详细解析疱丁分词器中的关键概念、词典的组成、词典加载策略、编译过程、编码方式以及刀的种类和切分方法等。 ...
本文将对比分析三种常用的中文分词工具:Jieba、SnowNLP 和 THULAC。 1. Jieba(结巴)中文分词 Jieba 是一个广泛使用的 Python 中文分词组件,支持 Windows 和 Linux 平台。它提供了三种切词模式: - 全模式:尽...
### 几种基于词典的中文分词算法评价 #### 中文分词技术的重要性 中文分词技术在中文信息处理领域扮演着至关重要的角色。随着信息技术的发展,无论是政府决策、企业经营还是个人生活,信息的有效获取都变得越来越...
使用庖丁分词jar包的步骤大致包括以下几点: 1. **下载与引入**:首先,从官方网站或可靠的源获取paoding-analysis-2.0.0.jar包,并将其添加到项目的类路径(classpath)中,这可以通过IDE的依赖管理功能或者手动...