gpt4 book ai didi

Lucene.NET 词干问题

转载 作者:行者123 更新时间:2023-12-02 14:03:37 26 4
gpt4 key购买 nike

我在 Lucene.NET 中使用 SnowBallAnalyzer 时遇到问题。它对于某些单词非常有效,但对于其他单词,它根本找不到任何结果,而且我不知道如何进一步深入研究以找出发生了什么。我正在测试对美国农业部食品描述文件的搜索,该文件可以在这里找到(http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt)。我正在使用英语词干算法。搜索“eggs”时得到以下结果:

Bagels, egg
Bread, egg
Egg, whole, raw, fresh
Egg, white, raw, fresh
Egg, yolk, raw, fresh
Egg, yolk, raw, frozen
Egg, whole, cooked, fried
...

这些结果非常棒。然而,当我搜索“apple”时,我根本没有得到任何结果。当我使用 StandardAnalyzer 并搜索“apple”时,我得到以下结果。

Croissants, apple
Strudel, apple,
Babyfood, juice, apple
Babyfood, apple-banana juice
...

虽然不是最好的结果,但至少展示了一些东西。有人知道为什么词干分析器会以这样的方式进行过滤而我不会得到任何结果吗?

编辑:这是我正在使用的原型(prototype)代码。

static string[] Search(string searchTerm)
{
//Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English");
Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer);
Lucene.Net.Search.Query query = parser.Parse(searchTerm);

Lucene.Net.Search.Searcher searcher = new Lucene.Net.Search.IndexSearcher(Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo("./index/")), true);
var topDocs = searcher.Search(query, null, 10);

List<string> results = new List<string>();

foreach(var scoreDoc in topDocs.scoreDocs)
{
results.Add(searcher.Doc(scoreDoc.doc).Get("raw"));
}

return results.ToArray();
}

最佳答案

您确定使用 Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English") 编写索引吗?您必须使用相同的分析器来编写和查询索引。

关于Lucene.NET 词干问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com