博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Lucene3.5.0怎样从TokenStream获得Token
阅读量:5067 次
发布时间:2019-06-12

本文共 2213 字,大约阅读时间需要 7 分钟。

通过学习Lucene3.5.0的doc文档,对不同release版本号 lucene版本号的API修改做分析。最后找到了有价值的修改信息。 : Deprecated TermAttribute and replaced by a new CharTermAttribute. The change is backwards compatible, so mixed new/old TokenStreams all work on the same char[] buffer independent of which interface they use. CharTermAttribute has shorter method names and implements CharSequence and Appendable. This allows usage like Java's StringBuilder in addition to direct char[] access. Also terms can directly be used in places where CharSequence is allowed (e.g. regular expressions). 
(Uwe Schindler, Robert Muir)
以上信息可以知道,原来的通过的方法已经不可以提取响应的Token了
StringReader reader = new StringReader(s);TokenStream ts =analyzer.tokenStream(s, reader);TermAttribute ta = ts.getAttribute(TermAttribute.class);
通过分析Api文档信息 可知,CharTermAttribute已经成为替换TermAttribute的接口因此我编写了一个样例来更好的从TokenStream中提取Token
package com.segment;import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.Token;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;import org.apache.lucene.analysis.tokenattributes.TermAttribute;import org.apache.lucene.util.AttributeImpl;import org.wltea.analyzer.lucene.IKAnalyzer;public class Segment {	public static String show(Analyzer a, String s) throws Exception {		StringReader reader = new StringReader(s);		TokenStream ts = a.tokenStream(s, reader);		String s1 = "", s2 = "";		boolean hasnext= ts.incrementToken();		//Token t = ts.next();		while (hasnext) {			//AttributeImpl ta = new AttributeImpl();			CharTermAttribute ta = ts.getAttribute(CharTermAttribute.class);			//TermAttribute ta = ts.getAttribute(TermAttribute.class);						s2 = ta.toString() + " ";			s1 += s2;			hasnext = ts.incrementToken();		}		return s1;	}	public String segment(String s) throws Exception {		Analyzer a = new IKAnalyzer();		return show(a, s);	}	public static void main(String args[])	{		String name = "我是俊杰,我爱编程,我的測试用例";		Segment s = new Segment();		String test = "";		try {			System.out.println(test+s.segment(name));		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}}

转载于:https://www.cnblogs.com/yxwkf/p/3857981.html

你可能感兴趣的文章
Jquery ui widget开发
查看>>
关于indexOf的使用
查看>>
英语单词
查看>>
centos6.8下安装matlab2009(图片转帖)
查看>>
Mongo自动备份
查看>>
cer证书签名验证
查看>>
新手Python第一天(接触)
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
迭代器和生成器
查看>>
codevs 1080 线段树练习
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
IOS开发UI篇--UITableView的自定义布局==xib布局
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>
python与 Ajax跨域请求
查看>>