我在 asp.net 应用程序中使用 lucene.net 和雪球分析器。
对于我使用的特定语言,我有以下问题:对于两个在词干后具有不同含义的特定词,结果是相同的,因此搜索它们中的任何一个都会为这两个词产生结果。
我怎样才能教分析器不要阻止这两个词,或者虽然阻止了它们,但知道它们有不同的含义。
我在 asp.net 应用程序中使用 lucene.net 和雪球分析器。
对于我使用的特定语言,我有以下问题:对于两个在词干后具有不同含义的特定词,结果是相同的,因此搜索它们中的任何一个都会为这两个词产生结果。
我怎样才能教分析器不要阻止这两个词,或者虽然阻止了它们,但知道它们有不同的含义。
在 Lucene 4.0 中,EnglishAnalyzer
现在有了这个能力,因为它有一个构造函数,它接受一个stemExclusionSet
当然,Lucene.Net 还没有达到 Lucene 4 的水平,所以它确实有很多好处。
但是,EnglishAnalyzer 通过使用KeywordMarkerFilter
. 因此,您可以创建自己的分析器,覆盖 tokenStream 方法,并KeywordMarkerFilter
在SnowballFilter
.
就像是:
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)。
我在这里从记忆中工作,但正如我在其中一个构造函数中所记得的那样,您可以传递一个停用词数组,这将阻止传入的单词被阻止。