提问者:小点点

改进lucene.net分析仪


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

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

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


共2个答案

匿名用户

我在这里从内存中工作,但正如我在其中一个构造函数中回忆的那样,您可以传递一个塞词数组,这将阻止传递的单词被词干化。

匿名用户

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