字典API(词汇)

有谁知道一个好的.NET字典API? 我对意义不感兴趣,而是我需要能够以多种不同的方式查询单词 – 返回x长度的单词,返回部分匹配等等…

从像ASpell( http://aspell.net/ )这样的开源拼写检查程序中获取平面文本文件,并将其加载到List或您喜欢的任何结构中。

例如,

List 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”的单词列表。 因此,将您从开源词典中建议的单词加载到List(String)中。 要查找长度为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'); });