Lucene.NET 波特干过滤器源示例,它适合我吗?
本文关键字:波特 NET 过滤器 Lucene | 更新日期: 2023-09-27 18:37:13
首先,我必须说,我们使用的 Lucene.NET 版本不是最新的,因为它与 Sitecore 6.4.1 一起打包,直到现在,我们还没有深入研究分析器和词干提取的使用(大错特错!
基本上,我们试图在索引时或查询时实现某种形式的词干提取(寻找关于哪个最好的建议?)。我们遇到的主要问题是所有关于词干提取的文档都是用Java编写的,我真的很难把它带到C#中。我希望有人可以提供源示例或指向该领域资源的链接。
由于我们的 Lucene.NET 版本非常古老,我认为不可能使用 Snowball Analyzer(甚至在我们的版本中都不可用),因此我们正在考虑 PorterStemFilter。
任何人都可以提供任何帮助/建议,说明我如何在不升级 Lucene 的情况下使 Stemming 工作?
亲切问候
史蒂夫
通常,您编写自己的分析器来构建TokenStream链。您需要在索引和搜索时进行干查。
您只需像使用其他分析器一样使用分析器即可。
示例分析器:
public class MyAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
return new PorterStemFilter(new StandardTokenizer(reader));
}
}
雪球是最好的 afaik。有C,Java,...的实现。只需在您的项目中构建您自己的分析器/令牌过滤器即可。
对于旧版本的 Lucene,您可能需要考虑获取 PorterStemmerAlgorithm 类的 C# 实现的副本
例如,从这里:http://tartarus.org/~martin/PorterStemmer/csharp2.txt
您可以使用它在索引时对关键字段值进行词干提取,以将所有单词的词干版本存储在索引的"词干字段"中。
在查询时,您可以使用同一类来提取搜索词,并使用词干查询搜索"词干字段"。
这样,您可以绕过Lucene更高版本中实现的所有特定分析器内容,并且您仍然可以搜索所有单词的完整版本...
它比理想的手动操作要多一些 - 但它会完成工作:-)
祝你好运!