如何在不区分大小写的情况下检查Hunspell中的拼写

时间:2013-07-26 13:03:05

标签: c# winforms hunspell

您好我正在制作一个桌面应用程序(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。

你能帮我解决这个问题吗?

2 个答案:

答案 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。这是你在找什么?