c# - Lucene 拼写检查器排名建议很奇怪

标签 c# lucene lucene.net spell-checking

我正在使用 Lucene.NET contrib NuGet 包 v3.0.3 中的拼写检查器。

拼写检查器索引是使用 _spellChecker.IndexDictionary(new SpellChecker.Net.Search.Spell.LuceneDictionary(reader, "Name")); 创建的;

我遇到的问题是(我假设)由于 shingles/n-grams 的工作方式,运行 _spellChecker.SuggestSimilar("Wiess") 不会得分“Weiss”很高。 “Witness”、“Wireless”和“Wills”得分高于“Weiss”。

看来“Weiss”的得分应该高于“Wireless”。有什么方法可以调整它以获得该结果吗?

最佳答案

您还没有提供返回的内容,所以我假设您只是不喜欢它所提供的内容,而不是它没有给您带来任何好处。

在 Lucene 文档中,没有采用 1 个参数的 SuggestSimilar 方法。我相信这是因为您永远不应该只依赖一个结果,根据 API,对建议参数数量的最小引用:

“也就是说,如果 numSug == 1,则不要指望该建议是最好的建议。因此,您应该将此值设置为至少 5,以获得一个好的建议。”

我假设您可以提供第二个参数。尝试将其设置得更高,看看会得到什么。

编辑--

好的。我懂了。也许一个简单的 Levenshtein 距离风格算法更适合您。 Lucene 4.0 为此提供了一个(实验性)新的拼写检查器:DirectSpellChecker 。另外,一个简单的FuzzyQuery我相信,也能完成这项工作。这些方法中的任何一种都会删除 SpellChecker 算法的某些方面,从而有效地简化它,并且您可能会发现您的结果总体上会变得更糟。

注意:

  • “维斯”“维斯”距离 2
  • “Wiess”“见证人”距离2
  • “Wiess”“无线”距离 3
  • “Wiess”“Wills”距离 2

所以,实际上,这可能对你没有多大帮助。您可能可以编写一个过滤器,优先选择与查询长度相等的结果,但这无助于区分遗嘱。你可能不得不忍受的那个人。

关于c# - Lucene 拼写检查器排名建议很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653702/

相关文章:

java - elasticsearch中更新文档的效率

php - 在 lucene 中存储用户数据或查询 rdbms?

vb.net - 解析 Microsoft Office 和 PDF 文档的最佳方法是什么?

Lucene.NET "OR"

lucene - 使用 Umbraco Examine 按短语中的确切单词搜索

c# - 您如何称呼此类算法的时间复杂度?

c# - MVC : View and Model Interaction Regarding Data Access, 等

c# - 使用 linq 对带有列表的匿名类进行投影

c# - 使用特殊字符时,Azure 搜索 SDK 无法进行部分搜索

c# - 如何获取 GridViewColumnHeader Click 事件上的 ListViewControl