Lucene源码解析--Analyzer之TokenFilter

Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。TokenizerAnalyzer的第一步,其构造函数接收一个Reader作为参数,而TokenFilter则是一个类似的拦截器,其参数可以是TokenStreamTokenizer。

TokenFilter的类结构图:


bb

TokenFilter各类介绍:

1.TokenFilter
输入参数为另一个TokerStream的TokerStream,其子类必须覆盖incrementToken()函数。


2.LowerCaseFilter
将Token分词转换为小写。

3.FilteringTokenFilter

TokenFilters的一个抽象类,可能会删除分词。如果当前分词要保存,则需要实现accept()方法
并返回一个boolean值。incrementToken()方法将调用accept()方法来决定是否将当前的分词返回
给调用者。

4.StopFilter
从token stream中移除停止词(stop words).

  protected boolean accept() {
    return !stopWords.contains(termAtt.buffer(), 0, termAtt.length());//返回不是stop word的分词
  }

5.TypeTokenFilter
从token stream中移除指定类型的分词。
  protected boolean accept() {
    return useWhiteList == stopTypes.contains(typeAttribute.type());
  }

StopAnalyzer测试实例:

public class StopAnalyzerTest {
    public static void main(String[] args) {
       
        String content="No news is good news!";
       
        try {
            StopAnalyzer analyzer=new StopAnalyzer(Version.LUCENE_43);
            TokenStream tokenStream=analyzer.tokenStream("", new StringReader(content));
            tokenStream.reset();
            while (tokenStream.incrementToken()) {
                CharTermAttribute attribute=tokenStream.getAttribute(CharTermAttribute.class);
                System.out.println(attribute.toString());
               
            }
           
        } catch (Exception e) {
            e.printStackTrace();
        }
       
    }
}

输出结果:

news
good
news

fj.pngtf.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-765894/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28624388/viewspace-765894/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值