有人知道一个好的.NET 字典 API 吗?我对含义不感兴趣,而是我需要能够以多种不同的方式查询单词 - 返回 x 长度的单词,返回部分匹配等等...
从 ASpell (http://aspell.net/) 等开源拼写检查器中获取纯文本文件,并将其加载到列表或您喜欢的任何结构中。
例如,
List<string> words = System.IO.File.ReadAllText("MyWords.txt").Split(new string[]{Environment.NewLine}).ToList();
// C# 3.0 (LINQ) example:
// get all words of length 5:
from word in words where word.length==5 select word
// get partial matches on "foo"
from word in words where word.Contains("foo") select word
// C# 2.0 example:
// get all words of length 5:
words.FindAll(delegate(string s) { return s.Length == 5; });
// get partial matches on "foo"
words.FindAll(delegate(string s) { return s.Contains("foo"); });
您可能想要寻找 Trie 实现。这肯定会对“以 XYZ 开头的单词”以及精确匹配有所帮助。您可能很希望将所有数据存储在多个数据结构中,每个数据结构都针对特定任务进行调整 - 例如一个用于字谜词,一个用于“按长度”等。如今,与 RAM 相比,自然语言词典相对较小,因此如果您确实想要快速查找,这可能是正确的选择。
根据您的查询的涉及程度,可能值得研究WordNet,它基本上是一个语义词典。 它包括词性、同义词以及单词之间其他类型的关系。
NetSpell (http://www.loresoft.com/netspell/) 是一个用 .NET 编写的拼写检查器,其中包含您可以使用的多种语言的单词列表。
我同意 Barry Fandango 的意见,但你可以在没有 LINQ 的情况下完成它。 .NET 2.0 对 List(T) 类型有一些很好的过滤方法。我推荐的是
List(T).FindAll(Predicate(T)) : List(T)
该方法将通过谓词方法将每个元素放入列表中,并返回返回“true”的单词列表。因此,按照开源词典的建议将单词加载到列表(字符串)中。查找长度为 5 的所有单词...
List(String) words = LoadFromDictionary();
List(String) fiveLetterWords = words.FindAll(delegate(String word)
{
return word.Length == 5;
});
或者对于所有以“abc”开头的单词...
List(String) words = LoadFromDictionary();
List(String) abcWords = words.FindAll(delegate(String word)
{
return word.StartsWith('abc');
});