C# Lucene拼写检查器奇怪地排序建议
我正在Lucene.NET contrib NuGet包v3.0.3中使用拼写检查器 拼写检查器索引是使用C# Lucene拼写检查器奇怪地排序建议,c#,lucene,lucene.net,spell-checking,C#,Lucene,Lucene.net,Spell Checking,我正在Lucene.NET contrib NuGet包v3.0.3中使用拼写检查器 拼写检查器索引是使用\u spellchecker.IndexDictionary(new spellchecker.Net.Search.Spell.LuceneDictionary(reader,“Name”))创建的 我遇到的问题是(我假设)由于木瓦/n-grams的工作方式,运行\u spellChecker.SuggestSimular(“Wiess”)不会给“Weiss”打分很高。“证人”、“无线”
\u spellchecker.IndexDictionary(new spellchecker.Net.Search.Spell.LuceneDictionary(reader,“Name”))创建的代码>
我遇到的问题是(我假设)由于木瓦/n-grams的工作方式,运行\u spellChecker.SuggestSimular(“Wiess”)
不会给“Weiss”打分很高。“证人”、“无线”和“遗嘱”得分高于“维斯”
似乎“Weiss”的得分应该高于“Wireless”。有什么办法可以让我调整一下以得到结果吗?您没有提供“是”会返回什么,所以我假设您只是不喜欢它所提供的东西,而不是它什么也不给您
在Lucene文档中,没有使用1参数的SuggestSimple方法。我相信这是因为您永远不应该只依赖于一个结果,根据API,最小参考建议数参数:
“也就是说,如果numSug==1,不要指望该建议是最好的。因此,您应该将该值设置为至少5,以获得好的建议。”
我想你可以提供第二个论点。试着把它调高一点,看看你得到了什么
编辑--
好的。我懂了。也许一个简单的Levenshtein距离型算法更适合您。Lucene 4.0提供了一个(实验性)新的拼写检查器:。而且,我相信,一个简单的方法也能很好地完成这项工作。这两种方法中的任何一种都会删除拼写检查器算法的某些方面,从而有效地简化它,并且您可能会发现您的结果总体上会变得更糟
注:
- “Wiess”“Weiss”距离2
- “Wiess”“见证”距离2
- “无线”距离3
- “Wiess”“Wills”距离2
所以,事实上,这可能不会让你有多大收获。您可能会编写一个过滤器,优先选择与查询长度相同的结果,但这无助于区分遗嘱。这个问题引出了另一个问题。见答复:
非常感谢femtoRgon为我指明了正确的方向。我想这可能与拼写检查程序使用的语言有关?(对不起,我不认识lucene)拼写检查器使用的是我提供的单词(名称),所以语言应该不重要。很抱歉,最初遗漏了详细信息。起初我用了5条建议,但现在“Weiss”排在第32位。Lucene.NET似乎还不包含DirectSpellChecker。我正在尝试模糊查询,并将返回详细信息。谢谢。FuzzyQuery看起来很有用,但也没有给出我想要的结果。我将尝试编写一个更喜欢排列的过滤器。