字典 API(词汇)[已关闭]

问题描述 投票:0回答:5

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

c# .net
5个回答
21
投票

从 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"); });

4
投票

您可能想要寻找 Trie 实现。这肯定会对“以 XYZ 开头的单词”以及精确匹配有所帮助。您可能很希望将所有数据存储在多个数据结构中,每个数据结构都针对特定任务进行调整 - 例如一个用于字谜词,一个用于“按长度”等。如今,与 RAM 相比,自然语言词典相对较小,因此如果您确实想要快速查找,这可能是正确的选择。


2
投票

根据您的查询的涉及程度,可能值得研究WordNet,它基本上是一个语义词典。 它包括词性、同义词以及单词之间其他类型的关系。


2
投票

NetSpell (http://www.loresoft.com/netspell/) 是一个用 .NET 编写的拼写检查器,其中包含您可以使用的多种语言的单词列表。


2
投票

我同意 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');
    });
© www.soinside.com 2019 - 2024. All rights reserved.