Solr 6.0 学习(四)中文IK分词
来源:互联网 发布:vs 打开报表数据 编辑:程序博客网 时间:2024/05/07 11:02
IK分词下载地址:http://git.oschina.net/wltea/IK-Analyzer-2012FF/
IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。
IK Analyzer 2012特性:
采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式;
在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。
2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。
采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符
优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文,英文,数字混合词语。
参考:http://www.oschina.net/code/snippet_97202_48660
参考:http://iamyida.iteye.com/blog/2220833?utm_source=tuicool&utm_medium=referral
- package com.ng.util.analyzer;
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.Tokenizer;
- public class IKAnalyzer5x extends Analyzer{
- private boolean useSmart;
- public boolean useSmart() {
- return useSmart;
- }
- public void setUseSmart(boolean useSmart) {
- this.useSmart = useSmart;
- }
- /**
- * IK分词器Lucene Analyzer接口实现类
- *
- * 默认细粒度切分算法
- */
- public IKAnalyzer5x(){
- this(false);
- }
- /**
- * IK分词器Lucene Analyzer接口实现类
- *
- * @param useSmart 当为true时,分词器进行智能切分
- */
- public IKAnalyzer5x(boolean useSmart){
- super();
- this.useSmart = useSmart;
- }
- /**
- protected TokenStreamComponents createComponents(String fieldName, final Reader in) {
- Tokenizer _IKTokenizer = new IKTokenizer(in , this.useSmart());
- return new TokenStreamComponents(_IKTokenizer);
- }
- **/
- /**
- * 重写最新版本的createComponents
- * 重载Analyzer接口,构造分词组件
- */
- @Override
- protected TokenStreamComponents createComponents(String fieldName) {
- Tokenizer _IKTokenizer = new IKTokenizer5x(this.useSmart());
- return new TokenStreamComponents(_IKTokenizer);
- }
- }
- package com.ng.util.analyzer;
- import java.io.IOException;
- import java.io.Reader;
- import org.apache.lucene.analysis.Tokenizer;
- import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
- import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
- import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
- import org.wltea.analyzer.core.IKSegmenter;
- import org.wltea.analyzer.core.Lexeme;
- public class IKTokenizer5x extends Tokenizer{
- //IK分词器实现
- private IKSegmenter _IKImplement;
- //词元文本属性
- private final CharTermAttribute termAtt;
- //词元位移属性
- private final OffsetAttribute offsetAtt;
- //词元分类属性(该属性分类参考org.wltea.analyzer.core.Lexeme中的分类常量)
- private final TypeAttribute typeAtt;
- //记录最后一个词元的结束位置
- private int endPosition;
- /**
- public IKTokenizer(Reader in , boolean useSmart){
- super(in);
- offsetAtt = addAttribute(OffsetAttribute.class);
- termAtt = addAttribute(CharTermAttribute.class);
- typeAtt = addAttribute(TypeAttribute.class);
- _IKImplement = new IKSegmenter(input , useSmart);
- }**/
- /**
- * Lucene 5.x Tokenizer适配器类构造函数
- * 实现最新的Tokenizer接口
- * @param useSmart
- */
- public IKTokenizer5x(boolean useSmart){
- super();
- offsetAtt = addAttribute(OffsetAttribute.class);
- termAtt = addAttribute(CharTermAttribute.class);
- typeAtt = addAttribute(TypeAttribute.class);
- _IKImplement = new IKSegmenter(input , useSmart);
- }
- /* (non-Javadoc)
- * @see org.apache.lucene.analysis.TokenStream#incrementToken()
- */
- @Override
- public boolean incrementToken() throws IOException {
- //清除所有的词元属性
- clearAttributes();
- Lexeme nextLexeme = _IKImplement.next();
- if(nextLexeme != null){
- //将Lexeme转成Attributes
- //设置词元文本
- termAtt.append(nextLexeme.getLexemeText());
- //设置词元长度
- termAtt.setLength(nextLexeme.getLength());
- //设置词元位移
- offsetAtt.setOffset(nextLexeme.getBeginPosition(), nextLexeme.getEndPosition());
- //记录分词的最后位置
- endPosition = nextLexeme.getEndPosition();
- //记录词元分类
- typeAtt.setType(nextLexeme.getLexemeTypeString());
- //返会true告知还有下个词元
- return true;
- }
- //返会false告知词元输出完毕
- return false;
- }
- /*
- * (non-Javadoc)
- * @see org.apache.lucene.analysis.Tokenizer#reset(java.io.Reader)
- */
- @Override
- public void reset() throws IOException {
- super.reset();
- _IKImplement.reset(input);
- }
- @Override
- public final void end() {
- // set final offset
- int finalOffset = correctOffset(this.endPosition);
- offsetAtt.setOffset(finalOffset, finalOffset);
- }
- }
- Solr 6.0 学习(四)中文IK分词
- Solr 6.0 学习(四)中文IK分词
- Solr学习总结(四)ik分词配置
- solr配置ik中文分词
- solr集成IK中文分词
- Solr学习之十二:IK Analyzer中文分词配置
- Solr学习总结(八)IK 中文分词的配置和使用
- Solr学习总结(八)IK 中文分词的配置和使用
- solr学习(4.1)-solr4.7中文分词器(ik-analyzer)配置
- solr配置中文分词器IK Analyzer
- solr 实现 中文分词,IK Analyzer
- solr cloud系列-IK中文分词器
- solr配置中文IK Analyzer分词器
- 第四章solr配置IK中文分词
- solr 中文分词器IK分词器的配置
- Solr分词器-IK Analyzer中文分词器
- Solr-----4、Solr添加IK中文分词器
- solr:IK分词方法
- js 如何将汉字转换成拼音
- Ibatis的TypeHandlerCallback用法详解
- javascript 面向对象编程学习
- OSI七层模型 --IP私有地址概述
- ConcurrentLinkedQueue 的实现原理分析
- Solr 6.0 学习(四)中文IK分词
- U3D与JAVA交互实现微信支付
- 可变参数宏输出调试信息
- JavaScript ???????? this ??
- ipython 自学 二,notebook使用
- 回文串判定
- 用HSQLDB数据库测试Hibernate和Spring
- LINUX卸载RedHat6.4自带JDK及安装新的JDK
- eclipse中启动tomcat报错