Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lucene拼写检查器奇怪地排序建议_C#_Lucene_Lucene.net_Spell Checking - Fatal编程技术网

C# Lucene拼写检查器奇怪地排序建议

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”打分很高。“证人”、“无线”

我正在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”打分很高。“证人”、“无线”和“遗嘱”得分高于“维斯”


似乎“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看起来很有用,但也没有给出我想要的结果。我将尝试编写一个更喜欢排列的过滤器。