Solr 6.0 学习(四)中文IK分词
来源:互联网 发布:知乎问题怎么删除 编辑:程序博客网 时间:2024/05/21 08:43
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分词方法
- mac 终端下的命令大全
- 单词翻转(4种思路,C/C++代码)
- Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
- 常用sql语句记录--sqlserver
- [Java]HashMap源码分析
- Solr 6.0 学习(四)中文IK分词
- 超图对接NSDTF-DEM数据
- 阿里巴巴andfix热修复
- FTP使用 ---python
- Android 多线程及线程通信
- 自定义事务
- iOS中assign、copy 、retain关键字
- 120. Triangle
- 自定义SwipeLayout--仿QQ侧滑条目