【问题标题】:C# checking if a word is in an English dictionary? [closed]C#检查一个单词是否在英语词典中? [关闭]
【发布时间】:2016-11-19 20:29:19
【问题描述】:

我正在尝试浏览一个单词列表,并为每个单词确定它是否是一个有效的英文单词(对于 Scrabble)。我不确定如何解决这个问题,我是否必须找到所有英文单词的文本文件,然后使用文件读取和解析方法手动构建像 trie 或 hashmap 这样的数据结构 - 或者我可以在某处找到那些预制的?最简单的方法是什么?

【问题讨论】:

  • Hashmap 方法是最简单的。然后处理大小写,例如将所有输入小写。
  • @Warty:不需要小写输入。只需使用不区分大小写的字符串比较器。 HashSet<string> Words = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);

标签: c# dictionary spell-checking


【解决方案1】:

您可以使用 NetSpell 库来检查这一点。它可以通过 Nuget Console 轻松安装,使用以下命令

PM> Install-Package NetSpell

然后,遍历单词并使用库检查它们

NetSpell.SpellChecker.Dictionary.WordDictionary oDict = new NetSpell.SpellChecker.Dictionary.WordDictionary(); 

oDict.DictionaryFile = "en-US.dic"; 
oDict.Initialize();
string wordToCheck = "door";
NetSpell.SpellChecker.Spelling oSpell = new NetSpell.SpellChecker.Spelling(); 

oSpell.Dictionary = oDict; 
if(!oSpell.TestWord(wordToCheck))
{
    //Word does not exist in dictionary
    ...
}

【讨论】:

    【解决方案2】:

    由于您专门寻找有效的 Scrabble 单词,因此有一些 API 可以验证 Scrabble 的单词。如果您使用任何不符合预期目的的东西,那么它可能会遗漏一些有效的词。

    这里是one,这里是another,这里是列出可用API 的separate question

    所以我可以在粘贴链接之外添加一些价值,我建议将其包装在您自己的界面中,以便您可以在其中一个或另一个不可用的情况下交换它们(因为它们都是免费服务。)

    public interface IScrabbleWordValidator
    {
        bool IsValidScrabbleWord(string word);
    }
    

    确保您的代码仅依赖于该接口,然后编写调用您使用的任何 API 的实现。

    【讨论】:

    • 我不确定使用这些在线 API 是否可行,因为我的列表实际上很大。我所做的是生成 500k 个随机的 7 个字母单词,我只是想知道其中有多少是有效的 Scrabble 单词(因为我今天在玩拼字游戏,从包里拿出一个 7 个字母的单词:P)。
    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多