对中文支持稍好,但扩展性差,扩展词库,禁用词库和同义词库等不好处理
[java] view plain copy
package
bond.lucene.analyzer;
1.
1.
import
java.util.Iterator;
1.
1.
import
org.apache.lucene.analysis.TokenStream;
1.
import
org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
1.
import
org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
1.
import
org.apache.lucene.analysis.util.CharArraySet;
1.
import
org.apache.lucene.util.Version;
1.
1.
public
class
SmartChineseAnalyzerTest {
1.
1.
public
static
void
main(String[] args) {
1.
try
{
1.
// 要处理的文本
1.
String text =
"lucene分析器使用分词器和过滤器构成一个“管道”,文本在流经这个管道后成为可以进入索引的最小单位,因此,一个标准的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理"
;
1.
1.
// 自定义停用词
1.
String[] self_stop_words = {
"的"
,
"了"
,
"呢"
,
","
,
"0"
,
":"
,
","
,
"是"
,
"流"
};
1.
CharArraySet cas =
new
CharArraySet(Version.LUCENE_44,
0
,
true
);
1.
for
(
int
i =
0
; i < self_stop_words.length; i++) {
1.
cas.add(self_stop_words[i]);
1.
}
1.
1.
// 加入系统默认停用词
1.
Iterator<Object> itor = SmartChineseAnalyzer.getDefaultStopSet().iterator();
1.
while
(itor.hasNext()) {
1.
cas.add(itor.next());
1.
}
1.
1.
// 中英文混合分词器(其他几个分词器对中文的分析都不行)
1.
SmartChineseAnalyzer sca =
new
SmartChineseAnalyzer(Version.LUCENE_44, cas);
1.
1.
TokenStream ts = sca.tokenStream(
"field"
, text);
1.
CharTermAttribute ch = ts.addAttribute(CharTermAttribute.
class
);
1.
1.
ts.reset();
1.
while
(ts.incrementToken()) {
1.
System.out.println(ch.toString());
1.
}
1.
ts.end();
1.
ts.close();
1.
}
catch
(Exception ex) {
1.
ex.printStackTrace();
1.
}
1.
}
1.
1.
}