【问题标题】:improve lucene.net analyzer改进 lucene.net 分析器
【发布时间】:2014-03-16 17:24:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: lucene lucene.net stemming snowballanalyzer


    【解决方案1】:

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

    【讨论】:

    • 据我了解,搜索过程中会忽略停用词。那不是我想要的。我希望能够搜索这两个词。我缺少的是分析器区分它们的能力,因为在词干之后它们是相等的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2012-07-12
      • 2016-10-04
      相关资源
      最近更新 更多