我在Lucene.NET contrib NuGet包v3.0.3中使用了拼写检查程序。
使用_spellChecker.IndexDictionary(new SpellChecker.Net.Search.Spell.LuceneDictionary(reader, "Name"));
我遇到的问题是(我假设)由于带状疱疹/ n-gram的工作原理,运行_spellChecker.SuggestSimilar("Wiess")
并不会让“Weiss”得分非常高。 “见证”,“无线”和“遗嘱”得分高于“威斯”。
似乎“Weiss”应该得分高于“无线”。有没有办法可以通过调整来获得结果?
答案 0 :(得分:2)
你没有提供DOES返回的内容,所以我假设你根本不喜欢它给的东西,而不是它什么都不给你。
在Lucene文档中,没有一个SuggestSimilar方法采用1个参数。我相信这是因为你不应该只依赖于一个结果,每个API,最小参考建议参数的数量:
“即如果numSug == 1,请不要指望该建议是最好的。因此,您应该将此值设置为至少5 以获得良好的建议。”
我假设您可以提供第二个参数。尝试将其设置得更高,看看你得到了什么。
编辑 -
好。我知道了。也许一个简单的Levenshtein距离风格算法会更符合您的要求。 Lucene 4.0为此提供了一个(实验性的)新拼写检查程序:DirectSpellChecker。另外,我认为,简单的FuzzyQuery也可以完成这项工作。这些方法中的任何一种都将删除SpellChecker算法的各个方面,有效地简化它,并且您可能会发现您的结果总体上变得更糟。
注意:
所以,实际上,这可能不会让你在那里。你可能会编写一个过滤器,它更喜欢查询相同长度的结果,但这无助于区分Wills。那个你可能不得不忍受的。
答案 1 :(得分:0)
这个问题导致了另一个问题。见答案:Lucene SpellChecker Prefer Permutations or special scoring
非常感谢femtoRgon让我指向正确的方向。