为什么要使用lucene中文分词器
在lucene的开发过程中,我们常会遇到分词时中文识别的问题,lucene提供了
lucene-analyzers-common-5.0.0.jar包来支持分词,但多的是对英国,法国,意大利等过语言的支持,
因此我们需要引入中文分词的概念。
各种中文分词器及其对比
jcseg中文分词器
jcseg是使用Java开发的一款开源的中文分词器, 使用mmseg算法. 分词准确率高达
98.4%, 支持中文人名识别, 同义词匹配, 停止词过滤...
jcseg支持三种切分模式:
(1).简易模式:FMM算法,适合速度要求场合。
(2).复杂模式-MMSEG四种过滤算法,具有较高的岐义去除,分词准确率达到了98.41%。
(3).检测模式:只返回词库中已有的词条,很适合某些应用场合。(1.9.4开始)
就分词效率而言,简易模式速度最快
jcseg词库配置丰富,自我感觉功能最强大,详见jcseg开发文档;
jcseg现版本不兼容lucene5,我修改了其analyzer包,相关示例代码如下
package com.lucene.analyzer;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.junit.Test;
import org.lionsoul.jcseg.analyzer.JcsegAnalyzer5X;
import org.lionsoul.jcseg.core.JcsegTaskConfig;
public class JcsegAnalyzerTest {
@Test
public void tokenTest() {
Analyzer analyzer = new JcsegAnalyzer5X(JcsegTaskConfig.SIMPLE_MODE);
//非必须(用于修改默认配置): 获取分词任务配置实例
JcsegAnalyzer5X jcseg = (JcsegAnalyzer5X) analyzer;
JcsegTaskConfig config = jcseg.getTaskConfig();
//追加同义词到分词结果中, 需要在jcseg.properties中配置jcseg.loadsyn=1
config.setAppendCJKSyn(true);
//追加拼音到分词结果中, 需要在jcseg.properties中配置jcseg.loadpinyin=1
config.setAppendCJKPinyin(true);
//更多配置, 请查看com.webssky.jcseg.core.JcsegTaskConfig类
String words = "中华人民共和国";
TokenStream stream = null;
try {
stream = analyzer.tokenStream("myfield", words);
stream.reset();
CharTermAttribute offsetAtt = stream.addAttribute(CharTermAttribute.class);
while (stream.incrementToken()) {
System.out.println(offsetAtt.toString());
}
stream.end();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(stream != null)
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果如下:
中华
人民共和国
IKAnalyzer
IK Analyzer是一个开源的,基亍java语言开发的轻量级的中文分词工具包。
采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式;
在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。
2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。
采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符
优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文,英文,数字混合词语。
IK Analyzer支持细粒度切分和智能切分两种分词模式;
在细粒度切分下,词语分解到很细的力度,比如“一个苹果”,会被切分成如下
一个
一
个
苹果
在智能切分模式下,则会分词如下:
一个
苹果
和jcseg相同,现版本的IK Analyzer只兼容至lucene4版本,我修改了相关源码,使其提供了对lucene5的支持。
IK Analyzer示例代码如下:
package com.lucene.analyzer;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class IKAnalyzerTest {
@Test
public void tokenTest() {
Analyzer analyzer = new IKAnalyzer();
String words = "中华人民共和国";
TokenStream stream = null;
try {
stream = analyzer.tokenStream("myfield", words);
stream.reset();
CharTermAttribute offsetAtt = stream.addAttribute(CharTermAttribute.class);
while (stream.incrementToken()) {
System.out.println(offsetAtt.toString());
}
stream.end();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
其运行结果如下:
中华人民共和国
中华人民
中华
华人
人民共和国
人民
共和国
共和
国
源码下载
联系我
本博客是我的一步一步跟我学习lucene系列(http://blog.csdn.net/wuyinggui10000/article/category/3173543),下篇博客为大家写lucene的IndexWriter的索引创建原理;
一步一步跟我学习lucene是对近期做lucene索引的总结,大家有问题的话联系本人的Q-Q: 891922381,同时本人新建Q-Q群:106570134(lucene,solr,netty,hadoop),如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,希望大家持续关注,会带给大家惊喜的
分享到:
相关推荐
-- ik分词器 --> <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/> </...
IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的...
NULL 博文链接:https://llying.iteye.com/blog/570208
从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene...
Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器 Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器
提示:IKAnalyzer中文分词器支持Lucene6.0以上,IKAnalyzer中文分词器支持Lucene6.0以上。
1、lucene-core-3.6.0.jar 2、IKAnalyzer2012.jar(主jar包) 3、IKAnalyzer.cfg.xml(分词器扩展配置文件) 4、stopword.dic(停止词典) 5、IkSegmentation.java(样例类)
使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IKAnalyzer2012_u6.jar 具体操作如下: 引用 1.在/opt/cloudera/parcels/CDH/lib/...
lucene 所有jar包 包含IKAnalyzer分词器
适合Lucene5.x的IKAnalyzer-5.0分词器的jar包,重写了前面版本的IKAnalyzer,我已经试过,可以使用。
由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本
Lucene4.7+IK Analyzer中文分词入门教程
从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。 从 3.0 版本开始,IK 发展为面向 Java 的公用分词...
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本
IKAnalyzer 中文分词器V3.2使用手册 lucene
ikanalyzer-lucene-8.0.0.jar
IkAnalyzer3.2的jar包 IK Analyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12 月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合...
使用lucene-3.5和IKAnalyzer2012,实现基础的全文检索实现
亲测可用的中文分词器,也可以到IK Analyzer官网下载,网址如下: https://code.google.com/archive/p/ik-analyzer/downloads 在solrcode的schema.xml文件中的配置如下: 配置中文分词器的fieldType: ...