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

本文关键字:Hunspell 检查 大小写 不区 | 更新日期: 2023-09-27 18:24:59

嗨,我正在制作一个桌面应用程序(C#),用于检查输入单词的拼写。我正在使用Hunspell,我使用NuGet将其添加到我的项目中。我有两个文件,aff文件和dic文件。

using (Hunspell english = new Hunspell("en_US.aff", "en_US.dic"))
{
    bool isExist = english.Spell("THesis");
}

isExist等于false,因为在我的.dic文件中,正确的拼写是"thesis"。即使我使用.olower()并输入正确的名称,isExist也会变为false。

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

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

鉴于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"、"THesis"、"THesis"answers"THesis",如果这些拼写中的任何一个有效,则返回true,这得益于逻辑OR运算符。

类似地,对于canada,这将起作用,因为ToTitleCase()方法至少可以保证匹配。

这应该适用于大多数单词(包括所有大写字母缩写)。

如果你想让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的调用。这就是你要找的吗?