Lucene 6.0下使用IK分词器
来源:互联网 发布:做数学题的软件 编辑:程序博客网 时间:2024/05/06 02:48
Lucene 6.0使用IK分词器需要修改修改IKAnalyzer和IKTokenizer.
使用时先新建一个MyIKTokenizer类,一个MyIkAnalyzer类:
MyIKTokenizer.java
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 MyIKTokenizer 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 MyIKTokenizer(Reader in) { this(in, false); } public MyIKTokenizer(Reader in, boolean useSmart) { offsetAtt = addAttribute(OffsetAttribute.class); termAtt = addAttribute(CharTermAttribute.class); typeAtt = addAttribute(TypeAttribute.class); _IKImplement = new IKSegmenter(input, useSmart); } @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; } 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); }}
MyIkAnalyzer.java
package cn.ucas.lucene.ik;import java.io.Reader;import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.util.IOUtils;public class MyIkAnalyzer extends Analyzer { @Override protected TokenStreamComponents createComponents(String arg0) { Reader reader=null; try{ reader=new StringReader(arg0); MyIKTokenizer it = new MyIKTokenizer(reader); return new Analyzer.TokenStreamComponents(it); }finally { IOUtils.closeWhileHandlingException(reader); } }}
在Lucene中使用IK分词器:
Analyzer myIkAnalyzer=new MyIkAnalyzer();
参考文档:
http://blog.inet198.cn/?upxiaofeng/article/details/51454648
3 0
- Lucene 6.0下使用IK分词器
- Lucene 6.0下使用IK分词器
- IK分词器的使用lucene
- lucene笔记-002-IK分词器
- IK分词器的使用
- Lucene 学习(二):使用IK Analyzer中文分词
- Lucene中文分词IK Analyzer
- Lucene全文搜索之分词器:使用IK Analyzer中文分词器(修改IK Analyzer源码使其支持lucene5.5.x)
- Lucene的IK Analyzer 3.0 中文分词器 全解
- Lucene小练十三(IK分词器)
- Lucene之中文分词器(IK-Ananlyzer)-yellowcong
- IK分词源码讲解(六)-IK结合lucene使用并进行TF、IDF处理
- centos 下solr配置IK 分词器
- elasticsearch java api 使用ik 分词器
- ElasticSearch 安装和使用IK分词器
- ES中使用IK分词器
- ElasticSearch5.X IK分词器使用
- IK分词使用示例
- runloop详解
- 易用的php源码加密工具php-beast
- js 正则用法-笔记
- RecyclerView 卡顿优化(二)
- UITextField遇到的一些问题以及解决方法
- Lucene 6.0下使用IK分词器
- vue双向数据绑定原理
- Unity 编辑器:搜索挂有UILocalize脚本的GamObject
- SPOJ AMR11B
- VS2010配置Opencv2.4.4
- 什么叫跨平台语言
- android:windowSoftInputMode键盘相关属性
- CSS美工体会
- python 索引迭代