ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Lucene源码解析--Analyzer之Tokenizer

Lucene源码解析--Analyzer之Tokenizer

原创 Linux操作系统 作者:百联达 时间:2013-07-09 14:09:46 0 删除 编辑

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

Tokenizer的类结构图:


各类的介绍:

1.Tokenizer
输入为Reader的TokenStream,其子类必须实现incrementToken()函数,并且在设置属性(attributes) 必须调用AttributeSource中的clearAttributes()方法。

2.CharTokenizer
一个简单的,基于字符(character)的tokenizers。

protected abstract boolean isTokenChar(int c);//判断是否应该加入token

 protected int normalize(int c) {
    return c;
  }//对每一个即将加入到token的字符进行处理,默认不进行任何操作,直接返回(
其子类可能使用此方法,比如lowercase tokens

3.LetterTokenizer
一个将文本在非字母的地方进行拆分的tokenizer,对于亚洲语系来说并不适合,因为其
大部分单词并不是以空格划分的。

  protected boolean isTokenChar(int c) {
    return Character.isLetter(c);//收集符合要求的字符
  }

4.LowerCaseTokenizer
一个将文本在非字母的地方拆分并转换成小写的Tokenizer,其作用类似于LetterTokenizer与LowerCaseFilter的组合。

  protected int normalize(int c) {
    return Character.toLowerCase(c);//字母转换成小写
  }

5.WhitespaceTokenizer
一个在空白处对文本进行拆分的tokenizer。

  protected boolean isTokenChar(int c) {
    return !Character.isWhitespace(c);//判断字符是否为空白
  }

6.KeywordTokenizer
将整个输入作为一个分词的tokenizer。


tk.jpg

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

请登录后发表评论 登录
全部评论
10年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的研发,6年系统架构经验。最近关注Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    316
  • 访问量
    1008361