【问题标题】:How to check spelling in Hunspell with case insensitive如何在不区分大小写的情况下检查 Hunspell 中的拼写
【发布时间】:2018-11-03 15:22:33
【问题描述】:

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

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

【问题讨论】:

  • 只是说清楚 - 你试过bool isExist = english.Spell("THesis".ToLower());?
  • 是的。但如果我输入像“加拿大”这样的正确名称,它仍然会变成错误的。因为在字典文件中正确的是加拿大

标签: c# winforms hunspell


【解决方案1】:

鉴于 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,感谢 logical OR operator

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

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

【讨论】:

  • 这太不切实际了。 1000字怎么办?
【解决方案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 的调用。这是你要找的吗?

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2019-06-26
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多