基于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();
    		}
    	}
    
    }

  • lucene中的Token, TokenStream, Tokenizer, Analyzer

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

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

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

    Lucene.Net中的分词算法 和 第三方分词算法

    一元分词:内置的StandardAnalyzer是将英文按照空格、标点符号等进行分词,将中文按照单个字进行分词,一个汉字算一个词。代码如下 Analyzer analyzer = new Standa...
    • hzy19860111
    • hzy19860111
    • 2013年10月14日 21:14
    • 909

    使用Lucene 3.0.0的结构遍历TokenStream的内容

    以前版本的Lucene是用TokenStream.next()来遍历TokenStream的内容, 目前的版本稍微修改了一下, 使用下面的的一段程序可以遍历TokenStream的内容 privat...
    • u013709332
    • u013709332
    • 2015年02月02日 20:08
    • 459

    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
    • 1640

    Lucene分词实现:Analyzer、TokenStream

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

    Lucene .NET 全文检索

    近期做项目中有用到过Lucene,那个模块是由一位前端大神负责的,空闲时间我也做了个关于Lucene做全文检索的Demo,记录下来,方便以后学习。 关于Lucene的原理,网上有长篇大论的文章,有兴趣...
    • u014696025
    • u014696025
    • 2014年07月11日 17:00
    • 1327

    Lucene.Net

    http://www.cnblogs.com/piziyimao/archive/2013/01/31/2887072.html Lucene.Net 阅读目录 开始Lu...
    • rise51
    • rise51
    • 2016年04月17日 08:21
    • 959

    Lucene中TokenStream,Tokenizer,TokenFilter,TokenStreamComponents与Analyzer

    TokenStream extends AttributeSource implements Closeable: incrementToken,end,reset,close Tokenizer...
    • jollyjumper
    • jollyjumper
    • 2014年06月25日 23:35
    • 2995

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

    首先介绍下在lucene中attributeSource的类层次: org.apache.lucene.util.AttributeSource ·        org.apache.lucen...
    • a925907195
    • a925907195
    • 2014年12月11日 17:26
    • 3734
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:基于Lucene3.5.0如何从TokenStream获得Token
    举报原因:
    原因补充:

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