lucene5.5 自定义分词器跟过滤器需要注意的
来源:互联网 发布:java 自定义注解 编辑:程序博客网 时间:2024/04/27 13:58
public final class MySameFilter extends TokenFilter { //保存相应的词汇 private CharTermAttribute cta=null; //保存词与词之间的位置增量 private PositionIncrementAttribute pia=null; //定义一个状态 private AttributeSource.State current=null; //用栈保存同义词集合 private Stack<String> sames=null; protected MySameFilter(TokenStream input) { super(input); this.cta=addAttribute(CharTermAttribute.class); this.pia=addAttribute(PositionIncrementAttribute.class); sames=new Stack<String>(); } @Override public boolean incrementToken() throws IOException { if(sames.size()>0){ //将元素出栈,并获取同义词 String str=sames.pop(); //还原状态 restoreState(current); //先清空,再添加 cta.setEmpty(); cta.append(str); //设置位置为0,表示同义词 pia.setPositionIncrement(0); return true; } if (!input.incrementToken()) // #4 return false; //如果改词中有同义词,捕获当前状态 if(this.getSamewords(cta.toString())){ current=captureState(); } return true; } //定义同义词字典,并判断如果有同义词就返回true private boolean getSamewords(String key){ Map<String, String[]> maps=new HashMap<String, String[]>(); maps.put("我", new String[]{"咱","俺"}); maps.put("中国", new String[]{"大陆","天朝"}); if(maps.get(key)!=null){ for(String s:maps.get(key)){ sames.push(s); } } if(sames.size()>0){ return true; } return false; }}
public class MySameAnalyzer extends Analyzer { @Override protected TokenStreamComponents createComponents(String s) { //Tokenizer tokenizer = new StandardTokenizer(); Dictionary dictionary = Dictionary.getInstance(); MaxWordSeg mws = new MaxWordSeg(dictionary); MMSegTokenizer mt = new MMSegTokenizer(mws); MySameFilter msf = new MySameFilter(mt); return new TokenStreamComponents(mt, msf); //很多博客上面都是写的如下//return new TokenStreamComponents(tokenizer, msf); //这样写是不对的,本人试验过如果返回的里面传入tokenizer,会出现空指针异常,可能是因为5.5版本里面的mmseg分词器加了reset方法, 而tokenstream也要调用reset方法导致。所以注意一定不要传tokenizer!
}}
0 0
- lucene5.5 自定义分词器跟过滤器需要注意的
- Lucene5(3)分词器
- Lucene5中编写自定义同义词分词器(基于IK中文分词器)
- Lucene5中编写自定义同义词分词器(基于IK中文分词器)二
- lucene5.5根据现有分词器改造做同义词分词器
- Lucene5学习之使用MMSeg4j分词器
- Lucene5.5.0 使用ansj分词器
- Lucene5学习之使用MMSeg4j分词器
- 一步一步跟我学习lucene(3)---lucene的analysis相关和自定义分词器
- Solr的分析器,分词器和分词过滤器
- solr 的分析器,分词器和分词过滤器
- lucene 4.6以上和4.6一下分词需要注意的
- 创建自定义java类需要注意的
- linux自定义信号需要注意的问题
- 自定义信号槽需要注意的事项
- 自定义view,需要注意的地方
- android自定义view需要注意的地方
- 自定义UITableViewCell需要注意的地方
- iptables connections state 简介
- 转载hive中partition的一些知识
- java调用动态库时,.dll文件路径问题
- 新浪博客推广实践
- MacBook Pro 方向左键不能用 和MacBook Pro的一些常用修复
- lucene5.5 自定义分词器跟过滤器需要注意的
- SourceTree for Mac克隆GitHub仓库问题
- TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
- 用d3引擎将数学函数绘制成图形
- ASP.NET MVC的流程讲解
- Cocoapods安装教程
- 解决android4.4以上获取不到图片路径问题
- HDU5620 KK's Steel(C语言版)
- git checkout 远程分支