【问题标题】:Lucene Spellchecker ranking suggestions strangelyLucene Spellchecker 排名建议奇怪
【发布时间】:2012-11-19 04:11:28
【问题描述】:

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

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

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

似乎“Weiss”的得分应该高于“Wireless”。有没有办法可以调整它以获得这个结果?

【问题讨论】:

  • 我认为这可能与拼写检查器使用的语言有关? (抱歉不知道lucene)
  • 拼写检查器正在使用我提供的字词(名称),因此语言无关紧要。

标签: c# lucene lucene.net spell-checking


【解决方案1】:

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

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

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

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

编辑--

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

注意:

  • “威斯”“威斯”距离 2
  • “威斯”“见证”距离 2
  • “威斯”“无线”距离 3
  • “威斯”“威尔斯”距离 2

所以,实际上,这可能不会让你有太多收获。您可能会编写一个过滤器来选择与查询相同长度的结果,但这无助于区分 Wills。那个你可能不得不忍受的人。

【讨论】:

  • 抱歉原来遗漏了细节。起初我使用了 5 条建议,但“Weiss”目前出现在第 32 位。 Lucene.NET 似乎还没有包含 DirectSpellChecker。我正在尝试 FuzzyQuery 并将返回详细信息。谢谢。
  • FuzzyQuery 似乎很有用,但也没有给我想要的结果。我将尝试编写一个更喜欢 permutations 的过滤器。
【解决方案2】:

这个问题引出了另一个问题。见答案:Lucene SpellChecker Prefer Permutations or special scoring

非常感谢 femtoRgon 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多