2

我在 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”。有没有办法可以调整它以获得结果?

4

2 回答 2

2

你没有提供什么是返回的,所以我假设你只是不喜欢它提供的东西,而不是它什么都没有给你。

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

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

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

编辑 -

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

笔记:

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

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

于 2012-11-30T22:13:24.807 回答
0

这个问题引出了另一个问题。查看答案:Lucene SpellChecker Prefer Permutations or special score

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

于 2012-12-03T22:13:11.477 回答