C# 检查一个词是否在英语词典中?

C# checking if a word is in an English dictionary?

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

您可以使用 NetSpell 库进行检查。可以使用以下命令通过 Nuget 控制台轻松安装它

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
    ...
}

由于您正在专门寻找有效的拼字游戏单词,因此有一些 API 可以验证拼字游戏的单词。如果您使用的任何内容不是出于该预期目的,那么很可能会遗漏一些有效的词。

此处 one, here's another, and here's a separate question 列出了可用的 API。

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

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

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