Lucene源码解析--Analyzer之Tokenizer
2014-07-03 11:55
441 查看
Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数,而TokenFilter则是一个类似的拦截器,其参数可以是TokenStream、Tokenizer。
Tokenizer的类结构图:
![](http://blog.itpub.net/attachments/2013/07/28624388_201307091416461.jpg)
各类的介绍:
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。
Tokenizer的类结构图:
![](http://blog.itpub.net/attachments/2013/07/28624388_201307091416461.jpg)
各类的介绍:
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。
相关文章推荐
- Lucene源码解析--Analyzer之Tokenizer
- solr&lucene3.6.0源码解析(四)
- lucene中的Token, TokenStream, Tokenizer, Analyzer
- Solr源码解析之二 -- 支持Lucene查询语法变体
- 第46课:Spark中的新解析引擎Catalyst源码初探 SQLContext、Catalog、SqlParser 、analyzer、optimizer、QueryExecution、RDD
- Spark-Sql源码解析之三 Analyzer:Unresolved logical plan –> analyzed logical plan
- Lucene源码分析-- Analyzer
- lucene原理及源码解析--核心类
- Lucene源码解析--IndexWriterConfig配置参数说明
- Lucene源码解析--IndexWriterConfig配置参数说明
- Lucene4.2源码解析之fdt和fdx文件的读写——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压
- Lucene分词实现---Analyzer、TokenStream(Token、Tokenizer、Tokenfilter)
- solr&lucene3.6.0源码解析(三)
- Lucene源码解析--索引创建过程
- lucene 源码中tfidf打分模块解析随笔
- lucene 的分析器(analyzer)与分词器(tokenizer)和过滤器(tokenfilter)
- lucene中的Token, TokenStream, Tokenizer, Analyzer
- Lucene分词实现---Analyzer、TokenStream(Token、Tokenizer、Tokenfilter)
- 第48课:Spark中的新解析引擎Catalyst源码Analyzer彻底详解
- Lucene4.2源码解析之fdt和fdx文件的读写(续)——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压