1

我在 asp.net 应用程序中使用 lucene.net 和雪球分析器。

对于我使用的特定语言,我有以下问题:对于两个在词干后具有不同含义的特定词,结果是相同的,因此搜索它们中的任何一个都会为这两个词产生结果。

我怎样才能教分析器不要阻止这两个词,或者虽然阻止了它们,但知道它们有不同的含义。

4

2 回答 2

0

在 Lucene 4.0 中,EnglishAnalyzer现在有了这个能力,因为它有一个构造函数,它接受一个stemExclusionSet

当然,Lucene.Net 还没有达到 Lucene 4 的水平,所以它确实有很多好处。

但是,EnglishAnalyzer 通过使用KeywordMarkerFilter. 因此,您可以创建自己的分析器,覆盖 tokenStream 方法,并KeywordMarkerFilterSnowballFilter.

就像是:

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)。

于 2014-02-19T00:09:38.240 回答
0

我在这里从记忆中工作,但正如我在其中一个构造函数中所记得的那样,您可以传递一个停用词数组,这将阻止传入的单词被阻止。

于 2014-02-17T13:28:48.797 回答