我正在研究一种工具,它使用一个不允许拼写检查的非常旧的数据库GUI分析手工输入的大量数据,因此我必须在后期处理中进行。这是我在C#中的第一个严肃的程序,我想知道,在实现更复杂的东西,如字典或使用像NHunspell这样的外部库之前,如果有任何本地方法可以应用于常规字符串来检查字符串是否内部有拼写错误。
我已经阅读过SpellCheck类,但我不知道如何在文本框的使用之外使用简单的字符串。如果有可能有人能给我一个如何做的例子吗?
提前致谢。
答案 0 :(得分:4)
我最近做过类似的事情,我使用了NHunspell(你也可以从NuGet获得),所以我得到了类似的东西(这不是确切的代码,但它是很近):
public IDictionary<string, IEnumerable<string>> Analyze(string text)
{
var results = new Dictionary<string, IEnumerable<string>>();
using (var hunspell = new Hunspell("Resources\\en_GB.aff", "Resources\\en_GB.dic"))
{
string[] words = Regex.Split(text, @"\W+", RegexOptions.IgnoreCase);
IEnumerable<string> misspelledWords = words.Where(word => !hunspell.Spell(word));
foreach (string word in misspelledWords)
{
IEnumerable<string> suggestions = hunspell.Suggest(word);
results.Add(word, suggestions);
}
}
return results;
}
它将分析您的文本,返回拼写错误的单词的字典以及每个单词的建议列表。
只需添加,here是Hunspell词典列表(使用不同的语言)。
答案 1 :(得分:3)
实施拼写检查的最简单方法是使用网络API。幸运的是,Microsoft已经为您创建了一个http://msdn.microsoft.com/en-us/library/windows/desktop/hh869852(v=vs.85).aspx
实现这个的第二种方法是下载一个字典,为每个可能的单词迭代它,然后使用The Levenshtein distance calculation这个计算将返回一个相似百分比。你可以说一个单词是75%或更多,然后提供它作为更正。
以下是Levenshtein距离计算的另一个链接,这有一个很好的c#示例http://www.dotnetperls.com/levenshtein
这是距离计算的基本思路
将n设置为s的长度。 (&#34; GUMBO&#34;)将m设置为t的长度。 (&#34; GAMBOL&#34;)
如果n = 0,则返回m并退出。
如果m = 0,则返回n并退出。
构造两个向量,v0 [m + 1]和v1 [m + 1],包含0..m个元素。
将v0初始化为0..m。
检查s的每个字符(i从1到n)。
检查t的每个字符(j从1到m)。
如果s [i]等于t [j],则成本为0.如果s [i]不等于t [j],则成本为1.
将单元格v1 [j]设置为最小值:
一个。紧接着上面的单元加上1:v1 [j-1] + 1.
湾左边的单元格加上1:v0 [j] + 1.
℃。对角线上方和左侧的单元格加上成本:v0 [j-1] +成本。
- 醇>
完成迭代步骤(3,4,5,6)后,在单元格v1 [m]中找到距离。