我在asp.net应用程序中使用lucene.net和雪球分析仪。
对于我正在使用的特定语言,我有以下问题:对于两个具有不同含义的特定单词,在它们被词干化后,结果是相同的,因此搜索它们中的任何一个都会产生两个结果。
我怎样才能教分析器不要用词干这两个词,或者虽然用词干,但知道它们有不同的含义。
我在这里从内存中工作,但正如我在其中一个构造函数中回忆的那样,您可以传递一个塞词数组,这将阻止传递的单词被词干化。
在Lucene 4.0中,EngishAnalyzer
现在具有此功能,因为它有一个构造函数,该构造函数采用stemExclusionSet
当然,Lucene.Net还没有达到Lucene 4,所以有很多好处。
但是,EngishAnalyzer通过使用KeywordMarkerFilter
来做到这一点。因此,您可以创建自己的Analyzer,覆盖token流方法,并在链中添加一个KeywordMarkerFilter
,就在Snowball Filter
之前。
像这样的东西:
public TokenStream tokenStream(String fieldName, Reader reader) {
TokenStream result = new StandardTokenizer(reader);
result = new StandardFilter(result);
result = new LowerCaseFilter(result);
if (stopSet != null)
result = new StopFilter(result, stopSet);
result = new KeywordMarkerFilter(result, stemExclusionSet);
result = new SnowballFilter(result, name);
return result;
}
您需要构建自己的stemExclusionSet
(请参阅CharArraySet)。