1

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

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

由于我们的 Lucene.NET 版本非常旧,我认为无法使用 Snowball Analyzer(甚至在我们的版本中也不可用),因此我们正在考虑使用 PorterStemFilter。

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

亲切的问候

史蒂夫

4

3 回答 3

1

通常您编写自己的分析器来构建 TokenStream 链。您将需要在索引和搜索时间停止。

您只需像使用其他任何分析器一样使用您的分析器。

示例分析器:

public class MyAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        return new PorterStemFilter(new StandardTokenizer(reader));
    }
}
于 2012-06-15T13:22:09.400 回答
1

雪球是最好的 afaik。在 C、Java、...中有实现。只需在您的项目中构建您自己的分析器/令牌过滤器。

于 2012-06-24T12:06:30.480 回答
0

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

例如从这里: http ://tartarus.org/~martin/PorterStemmer/csharp2.txt

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

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

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

它比理想的手动操作要多一些 - 但它会完成工作:-)

祝你好运!

于 2012-06-28T11:02:13.350 回答