Lucene分词实现---Analyzer、TokenStream(Token、Tokenizer、Tokenfilter)

本文详细介绍了Lucene中Analyzer、TokenStream、Tokenizer和TokenFilter的概念及其工作原理。Analyzer是TokenStream的工厂,用于创建分词流;Tokenizer从Reader读取数据并进行词切分;TokenFilter对TokenStream进行过滤处理,如去除停用词、转小写等。分词流程主要包括Analyzer的tokenStream方法、TokenStream的枚举词序列以及Tokenizer的词切分过程。
摘要由CSDN通过智能技术生成

一  分清概念:

   1   TokenStream是用来走访Token的iterator(迭代器) ,

              Tokenizer继承自TokenStream,其输入为Reader 。

             TokenFilter继承自TokenStream,其作用是用来完成对TokenStream的过滤操作,譬如 去StopWords,将Token变为小写等。   

                 TokenStream:分词流,即将对象分词后所得的Token在内存中以流的方式存在,也说是说如果在取得Token必须从TokenStream中获取,而分词对象可以是文档文本,也可以是查询文本。

    2      Token:如果一个字段被token化,这表示它经过了一个可将内容转化为tokens串的分析程序。 Token是建立索引的基本单位,表示每个被编入索引的字符。 在token化的过程中,分析程序会在使用任何转换逻辑(例如去掉 "a” 或 "the" 这类停用词,执行词干搜寻,将无大小写区分的所有文字转换成小写等)的同时,抽取应被编入索引的文本内容。由于和字段相关的内容减少到只剩核心元素,因此,索引作为与某个字段相关的文字内容,它的规模也被缩小了。只有被token化的字段也将被编入索引的情况下才有意义。

    3   Analyzer就是一个TokenStream工厂 ,如下为其源码:

     public abstract class Analyzer { 
          public TokenStream tokenStream(String fieldName, Reader reader){
                        return tokenStream(reader);
         }
        public   TokenStream tokenStream(Reader reader){
                        return tokenStream(null, reader);
         }
        }


二    具体细节

1.1  分词流程

在Lucene3.0中,对分词主要依靠Analyzer类解析实现。Analyzer内部主要通过TokenStream类实现。Tonkenizer类、TokenFilter类是TokenStream的两个子类。Tokenizer处理单个字符组成的字符流,读取Reader对象中的数据,处理后转换成词汇单元。TokneFilter完成文本过滤器的功能,但在使用过程中必须注意不同的过滤器的使用的顺序。


1.2  分词扩展具体流程


1.2.1  Analyzer类分析


(1)所有的分词器都需要继承于Analyzer抽象类,它定义了tokenStream抽象方法。

   

            public abstract class Analyzer {
                    public abstract TokenStream tokenStream(String fieldName, Reader reader);
                  public TokenStream reusableTokenStream(String fieldName, Reader reader){}
    }

         该抽象类规定了Analyzer需要实现的一些方法。


(2)public abstract TokenStream tokenStream(String fieldName, Reader reader);

            

              该方法需要自定义的分词器去实现,并返回TokenStream,即将对象以Reader的方式输入分词为f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值