我正在使用NHunspell检查字符串是否存在拼写错误,如下所示:
var words = content.Split(' ');
string[] incorrect;
using (var spellChecker = new Hunspell(affixFile, dictionaryFile))
{
incorrect = words.Where(x => !spellChecker.Spell(x))
.ToArray();
}
这通常有效,但它有一些问题。例如,如果我正在检查句子“这是一个(非常好的)示例”,它将报告“(非常”和“好”)拼写错误。或者,如果字符串包含诸如“8:30”之类的时间,则会将其报告为拼写错误的单词。它也有逗号等问题。
Microsoft Word非常智能,能够识别时间,分数或逗号分隔的单词列表。它知道何时不使用英语词典,它知道何时忽略符号。如何在我的软件中获得类似的,更智能的拼写检查?有没有提供更多情报的图书馆?
编辑: 我不想强迫用户在他们的机器上安装Microsoft Word,因此使用COM互操作不是一种选择。
答案 0 :(得分:6)
如果你的拼写检查真的那么愚蠢,你应该预先标记它的输入以获取单词并一次提供这些单词(或者作为一个用空格连接的字符串)。我不熟悉C#/ .NET,但在Python中,你会使用像\w+
之类的简单RE:
>>> s = "This is a (very good) example"
>>> re.findall(r"\w+", s)
['This', 'is', 'a', 'very', 'good', 'example']
我打赌.NET有一些非常相似的东西。事实上,根据.NET docs,支持\w
,因此您只需要了解re.findall
在那里的调用方式。
答案 1 :(得分:0)
using System.Text.RegularExpressions;
...
// any occurence of ( and ) (maybe needs escaping)
string pattern = "( (\\.? | )\\.? )";
foreach(string i in incorrect){
Regex.Replace(i, pattern, String.Empty) // replace with String.Empty
}
答案 2 :(得分:0)
在C#中,你可以做这样的事情。
public static class ExtensionHelper
{
public static string[] GetWords(this string input)
{
MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b");
var words = from m in matches.Cast<Match>()
where !string.IsNullOrEmpty(m.Value)
select TrimSuffix(m.Value);
return words.ToArray();
}
public static string TrimSuffix(this string word)
{
int apostropheLocation = word.IndexOf('\'');
if (apostropheLocation != -1)
{
word = word.Substring(0, apostropheLocation);
}
return word;
}
}
var NumberOfMistakes = content.GetWords()。Where(x =&gt;!hunspell.Spell(x))。Count();