【发布时间】:2014-03-16 17:24:00
【问题描述】:
我在一个 asp.net 应用程序中使用 lucene.net 和雪球分析器。
对于我使用的特定语言,我遇到了以下问题: 对于两个词干后具有不同含义的特定词,结果是相同的,因此搜索它们中的任何一个都会产生两者的结果。
我怎样才能教分析器不要停止这两个词,或者虽然停止了它们,但知道它们有不同的含义。
【问题讨论】:
标签: lucene lucene.net stemming snowballanalyzer
我在一个 asp.net 应用程序中使用 lucene.net 和雪球分析器。
对于我使用的特定语言,我遇到了以下问题: 对于两个词干后具有不同含义的特定词,结果是相同的,因此搜索它们中的任何一个都会产生两者的结果。
我怎样才能教分析器不要停止这两个词,或者虽然停止了它们,但知道它们有不同的含义。
【问题讨论】:
标签: lucene lucene.net stemming snowballanalyzer
我在这里从记忆中工作,但我记得在其中一个构造函数中,您可以传递一个停用词数组,这将阻止传入的单词被阻止。
【讨论】:
在 Lucene 4.0 中,EnglishAnalyzer 现在有了这个能力,因为它有一个 constructor which takes a 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)。
【讨论】: