我正在使用Symspell在C#中实现拼写检查。 它运作得很好,但是我遇到了一些包含尖锐s(ß)和变音符号(ä,ö,ü)的德语单词的问题。 例如,当我正在检查带有变音符号的单词并为其编写同义词时(ä-> ae),它没有找到任何建议。 (Äpfe - >你的意思是“Äpfel”?和Aepfel - >没有找到任何单词)
还有一些单词中包含多个字母,因此我正在寻找一种方法来创建单词的所有组合并对每个单词进行拼写检查。
e.g。有人写“aeußerst”: - >检查aeusserst,äusserst和äußerst
我的方法很幼稚,效果不好。
public static List<string> GetCorrectWords(string word2check)
{
var suggestedWordsList = SymSpell.Correct(word2check, "")
if (suggestedWordsList.Count == 0) // If no suggestions could be found...
{
if (word2check.Contains("ä")) // ...check for mistakes with ä and ae
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ä", "ae"), "");
}
else if (word2check.Contains("ae"))
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ae", "ä"), ""); }
if (word2check.Contains("ö")) // ... check for mistakes with ö and oe
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ö", "oe"), "");
}
else if (word2check.Contains("oe"))
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("oe", "ö"), "");
}
if (word2check.Contains("ü"))
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ü", "ue"), "");
}
else if (word2check.Contains("ue"))
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ue", "ü"), "");
}
if(word2check.Contains("ß")) // ...check for mistakes with ß and ss
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ß", "ss"), "");
}
else if (word2check.Contains("ss"))
{
suggestedWordsList = SymSpell.Correct(word2check.Replace("ss", "ß"), "");
}
}
return suggestedWordsList;
}
答案 0 :(得分:1)
你说:
Aepfel - &gt;没找到单词
鉴于“Äpfel”在字典中(或在创建字典的语料库中),只有在设置 editDistanceMax = 1 时才会出现这种情况。
选项1:在SymSpell中,您应设置 editDistanceMax&gt; = 2 (最大编辑距离)。然后“Aepfel”将显示“Äpfel”的建议,因为两个术语之间的 Damerau-Levenshtein编辑距离是两个。
选项2:如果一个单词包含多个变音符号,则无需创建单词的所有变音符号组合。你只需要在字典生成和拼写纠正<期间,用他们的转录ae / oe / ue / ss 一致地替换所有变音符号ä/ö/ü/ß /强>:
CreateDictionaryEntry(key.Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue").Replace("ß", "ss") , "")
Correct(word.ToLower().Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue").Replace("ß", "ss") ,"");