首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene.NET词干处理问题

Lucene.NET词干处理问题
EN

Stack Overflow用户
提问于 2011-06-01 03:03:22
回答 1查看 3.1K关注 0票数 5

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

代码语言:javascript
复制
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,搜索“苹果”时,我得到了以下结果。

代码语言:javascript
复制
Croissants, apple
Strudel, apple,
Babyfood, juice, apple
Babyfood, apple-banana juice
...

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

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

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-01 04:20:24

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6192242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档