3

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

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

isExist 等于 false,因为在我的 .dic 文件中,正确的拼写是“thesis”。即使我使用 .lower() 并输入专有名称,isExist 也会变为错误。

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

4

2 回答 2

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”、“thesis”、“THESIS”和“Thesis”,如果这些拼写中的任何一个是有效的,则返回 true,由逻辑 OR 运算符提供。

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

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

于 2013-07-26T15:38:29.480 回答
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 的调用。这是你要找的吗?

于 2013-07-26T15:01:16.100 回答