Lucene.NET PorterStemFilter源码示例,它适合我吗?

时间:2012-06-15 11:30:10

标签: c# lucene.net stemming

首先,我必须说我们使用的Lucene.NET版本并不是最新的,因为它与Sitecore 6.4.1打包在一起,直到现在我们还没有必要深入研究分析器和干(大错!)。

基本上,我们正在尝试在索引时或查询时实现某种形式的词干(寻找最佳建议?)。我们遇到的主要问题是所有关于Stemming的文档都是用Java编写的,我真的很想把它带到C#。我希望有人可以提供源代码示例或链接到该领域的资源。

由于我们的Lucene.NET版本已经很老了,我认为使用Snowball Analyzer是不可能的(甚至不能在我们的版本中使用),因此我们考虑使用PorterStemFilter。 / p>

任何人都可以提供任何有关如何在不升级Lucene的情况下使Stemming工作的帮助/建议吗?

亲切的问候

史蒂夫

3 个答案:

答案 0 :(得分:1)

通常你编写自己的Analyzer来构建TokenStream链。您需要在索引和搜索时间停留。

您可以像使用其他任何分析仪一样使用分析仪。

示例分析器:

public class MyAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        return new PorterStemFilter(new StandardTokenizer(reader));
    }
}

答案 1 :(得分:1)

Snowball是最好的afaik。有C,Java等实现。 只需在项目中构建自己的Analyzer / Tokenfilter。

答案 2 :(得分:0)

使用旧版本的Lucene,您可能需要考虑复制PorterStemmerAlgorithm类的C#实现

E.g。从这里: http://tartarus.org/~martin/PorterStemmer/csharp2.txt

您可以使用它来在索引时阻止您的关键字段值,以将所有字词的词干版本存储在索引中的“词干字段”中。

在查询时,您可以使用同一个类来阻止搜索词,并使用词干查询搜索“词干字段”。

这样,您可以绕过Lucene更高版本中实现的所有特定分析器内容,您仍然可以搜索所有单词的完整版本...

它比理想的手动更多 - 但它会完成工作: - )

祝你好运!