您好我正在制作一个桌面应用程序(C#)来检查输入单词的拼写。我正在使用Hunspell,我使用NuGet添加到我的项目中。我有2个文件的aff文件和dic文件。
using (Hunspell english = new Hunspell("en_US.aff", "en_US.dic"))
{
bool isExist = english.Spell("THesis");
}
isExist等于false,因为在我的.dic文件中,正确的拼写是“论文”。即使我使用.lower()并输入正确的名称,isExist也会变为false。
你能帮我解决这个问题吗?
答案 0 :(得分:4)
鉴于Hunspell似乎不支持不区分大小写的拼写检查,您可能需要考虑稍微调整算法:
鉴于THesis
,您可以尝试:
bool isExist = false;
using (Hunspell english = new Hunspell("en_US.aff", "en_US.dic"))
{
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;
isExist = english.Spell("THesis")
| english.Spell(textInfo.ToLower("THesis")
| english.Spell(textInfo.ToUpper("THesis"))
| english.Spell(textInfo.ToTitleCase("THesis"))
}
这将依次逻辑上检查“THesis”,“论文”,“论文”和“论文”,如果这些拼写中的任何一个有效,则返回true,logical OR operator提供。
同样适用于canada
,这可行,因为ToTitleCase()
方法至少可以保证匹配。
这适用于大多数单个单词(包括所有大写首字母缩略词)。
答案 1 :(得分:2)
如果您希望ToLower()调用忽略第一个字符,请按以下方式执行:
var textToCheck = "THesis".Substring(0, 1) + "THesis".Substring(1).ToLower();
bool isExist = english.Spell(textToCheck);
如果这不是您想要的,请参阅以下内容:
我不完全确定您希望实现的样子,但这也可能有所帮助。使用“ToTitleCase”将获取一个字符串并将第一个字符大写。此外,通过调用ToTitleCase内部的toLower()调用将确保只有第一个字符大写。
bool isExist = english.Spell(System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase("THesis".toLower());
您可能还需要某种if语句来指定是否应该在当前字符串上调用ToTitleCase。这是你在找什么?