基于Lucene3.5.0如何从TokenStream获得Token

原创 2012年02月01日 17:36:57
通过学习Lucene3.5.0的doc文档,对不同release版本 lucene版本的API改动做分析。最后找到了有价值的改动信息。 LUCENE-2302: 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();
		}
	}

}

如何基于以太坊创建自己的数字货币

-
  • 1970年01月01日 08:00

Lucene分词实现:Analyzer、TokenStream

Lucene分词实现(二次开发流程) 1.1  分词流程 在Lucene3.0中,对分词主要依靠Analyzer类解析实现。Analyzer内部主要通过TokenStrea...
  • JieJiuXunHuan
  • JieJiuXunHuan
  • 2013-01-23 16:29:21
  • 8115

中文分词之Java实现使用IK Analyzer实现

IK Analyzer是基于lucene实现的分词开源框架,下载路径:http://code.google.com/p/ik-analyzer/downloads/list需要在项目中引入:IKAna...
  • Lijun7788
  • Lijun7788
  • 2012-07-05 16:42:57
  • 84713

Lucene--TokenStream(TokenFilter、Tokenizer)

TokenStream即是从Document的域(field)中或者查询条件中抽取一个个分词而组成的一个数据流。继承TokenStream的类必须是final类型的,或者至少increamStoken...
  • Love_xmei
  • Love_xmei
  • 2015-09-11 17:23:21
  • 539

lucene通过tokenstream显示分词信息

public class AnalyzerUtil { public static void main(String[] args) { StandardAnalyzer sa=new Stan...
  • keep_moving_cqu
  • keep_moving_cqu
  • 2013-12-29 01:39:48
  • 1728

lucene中的Token, TokenStream, Tokenizer, Analyzer

转载地址:http://ybzshizds.iteye.com/blog/562794 Token: 如果一个字段被token化,这表示它经过了一个可将内容转化为tokens串的分析程序。 Toke...
  • wxwzy738
  • wxwzy738
  • 2012-10-22 14:48:57
  • 6306

IK分词源码讲解(七)-TokenStream以及incrementToken属性处理

首先介绍下在lucene中attributeSource的类层次: org.apache.lucene.util.AttributeSource ·        org.apache.lucen...
  • a925907195
  • a925907195
  • 2014-12-11 17:26:39
  • 3902

Lucene中TokenStream,Tokenizer,TokenFilter,TokenStreamComponents与Analyzer

TokenStream extends AttributeSource implements Closeable: incrementToken,end,reset,close Tokenizer...
  • jollyjumper
  • jollyjumper
  • 2014-06-25 23:35:01
  • 3077

Lucene.net中文分词探究

一、中文分词方式: 中文分词几种常用的方式:A. 单字分词单字分词,顾名思义,就是按照中文一个字一个字地进行分词。如:我们是中国人,效果:我/们/是/中/国/人。B. 二分法二分法,就是按两个字进行切...
  • 21aspnet
  • 21aspnet
  • 2007-03-19 20:07:00
  • 5092

Lucene.net 搜索引擎技术(Analysis包/token详解)

在一个朋友的介绍下开始接触lucene,在网上看了大量的资料,觉得搜索引擎的门槛太高,几乎放弃了对他的了解和学习。对于中文的搜索关键是如何创建中文分词!由于Lucene.Net.Analysis.Cn...
  • zixian2005
  • zixian2005
  • 2005-12-23 13:21:00
  • 2668
收藏助手
不良信息举报
您举报文章:基于Lucene3.5.0如何从TokenStream获得Token
举报原因:
原因补充:

(最多只允许输入30个字)