开始之前先盗个图,下图是lucene分词结构的类关系图,可以看出所有的分词流都是基于TokenStream来做的。它下面有两个继承类,一个是
来分词的(Tokenizer),一个是来过滤的(TokenFilter)。我们主要来分析分词的类。
ansj分词器的构造函数如下
public AnsjTokenizer(Analysis ta,String stopwordsDir, boolean pstemming) {
this.ta = ta;
this.pstemming = pstemming;
}
这里面ta是比较重要的。ansj常用的是IndexAnalysis。回到AnsjTokenizer,这个类的核心方法如下
public final boolean incrementToken() throws IOException {
clearAttributes();
int position = 0;
Term term = null;
String name = null;
int length = 0;
boolean flag = true;
do {
term = ta.next();<span> </span>//利用Analysis获取下一个term
if (term == null) {
break;
}
name = term.getNam