【发布时间】:2010-09-25 00:45:45
【问题描述】:
有谁知道好的 .NET 字典 API 吗?我对含义不感兴趣,而是需要能够以多种不同方式查询单词——返回 x 长度的单词、返回部分匹配等等......
【问题讨论】:
有谁知道好的 .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"); });
【讨论】:
aspell -d en dump master | aspell -l en expand > my.dict 将使用 aspell 生成一个纯文本文件,如在此处回答 --> superuser.com/a/137990/1430 (但是,我将 pl 替换为英语的 en)
您可能想要寻找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');
});
【讨论】: