【发布时间】:2011-11-24 14:57:12
【问题描述】:
Lucene 具有在索引时基本上标记和过滤语料库的分析器。操作包括将标记转换为小写、词干提取、去除停用词等。
我正在进行一项实验,我想尝试所有可能的分析操作组合:仅提取、仅停止、提取和停止……
总共有 36 种组合我想尝试。
我怎样才能轻松优雅地做到这一点?
我知道我可以扩展 Analyzer 类并实现 tokenStream() 函数来创建自己的 Analyzer:
public class MyAnalyzer extends Analyzer
{
public TokenStream tokenStream(String field, final Reader reader){
return new NameFilter(
CaseNumberFilter(
new StopFilter(
new LowerCaseFilter(
new StandardFilter(
new StandardTokenizer(reader)
)
), StopAnalyzer.ENGLISH_STOP_WORDS)
)
);
}
我想做的是编写一个这样的类,它可以以某种方式为每个可能的操作(doStopping、doStemming 等)获取布尔值。我不想编写 36 个不同的 Analyzer 类,每个类都执行 36 种组合中的一种。困难在于过滤器在其构造函数中组合在一起的方式。
关于如何优雅地做到这一点的任何想法?
编辑:“优雅地”是指我可以轻松地在某种循环中创建一个新的分析器:
analyzer = new MyAnalyzer(doStemming, doStopping, ...)
doStemming 和 doStopping 随每次循环迭代而变化。
【问题讨论】:
标签: lucene