Lucene.Net 新手 Lucene.Net 中最好使用的分析器是哪个?另外,我想知道如何使用停用词和词干功能?
3 回答
我也是 Lucene.Net 的新手,但我知道 Simple Analyzer 会省略任何停用词,并索引所有标记/作品。
这是一些 Lucene 信息的链接,顺便说一下,.NET 版本是 Java 版本的几乎完美的逐字节重写,因此 Java 文档在大多数情况下应该可以正常工作:http: //darksleep.com /lucene/ . 里面有一个关于三个分析器的部分,简单、停止和标准。
我不确定 Lucene.Net 如何处理词干,但是这个链接http://www.onjava.com/pub/a/onjava/2003/01/15/lucene.html?page=2演示了如何在 Java 中创建自己的分析器,并使用 PorterStemFilter 进行词干提取。
...[T]波特词干算法(或“波特词干分析器”)是一种从英语单词中删除更常见的形态和屈折词尾的过程
我希望这会有所帮助。
我发现的最好的分析器是 StandardAnalyzer,您也可以在其中指定停用词。例如 :-
string indexFileLocation = @"C:\Index";
string stopWordsLocation = @"C:\Stopwords.txt";
var directory = FSDirectory.Open(new DirectoryInfo(indexFileLocation));
Analyzer analyzer = new StandardAnalyzer(
Lucene.Net.Util.Version.LUCENE_29, new FileInfo(stopWordsLocation));
这取决于您的要求。如果您的要求非常简单——例如不区分大小写、非词干搜索——那么 StandardAnalyzer 是一个不错的选择。如果您查看 Analyzer 类并熟悉过滤器,特别是TokenFilter,您可以通过滚动您自己的分析器来对索引进行 大量控制。
词干很棘手,深入了解您真正需要的词干类型很重要。我使用了 Snowball 词干分析器。例如,单词“policy”和“police”在英语 Snowball 词干分析器中具有相同的词根,并且当搜索词“police”不那么热门时,会在具有“policy”的文档中获得命中。我已经实施了支持词干搜索和非词干搜索的策略,因此可以避免这种情况,但了解其影响很重要。
谨防诸如停用词之类的诱惑。如果您需要搜索短语“to be or not to be”并且启用了标准停用词,则您的搜索将无法找到包含该短语的文档。