Подтвердить что ты не робот

API словаря для С#?

Кто-нибудь знает хороший API словаря .NET? Меня не интересуют значения, скорее мне нужно иметь возможность запросить слова несколькими способами - вернуть слова длины x, вернуть частичные совпадения и так далее...

Спасибо

4b9b3361

Ответ 1

Возьмите плоский текстовый файл с помощью заклинания с открытым исходным кодом, такого как 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"); });

Ответ 2

Возможно, вы захотите найти Trie. Это, безусловно, поможет с "словами, начинающимися с XYZ", а также точными совпадениями. Возможно, вам захочется иметь все ваши данные в нескольких структурах данных, каждый из которых настроен для конкретной задачи - например. один для анаграмм, один для "по длине" и т.д. Словари естественного языка относительно малы по сравнению с ОЗУ в эти дни, поэтому, если вы действительно хотите быстрый поиск, это, вероятно, способ пойти.

Ответ 3

В зависимости от того, как будут связаны ваши запросы, возможно, стоит изучить WordNet, который в основном представляет собой семантический словарь. Он включает части речи, синонимы и другие типы отношений между словами.

Ответ 4

NetSpell (http://www.loresoft.com/netspell/) - это средство проверки орфографии, написанное на .NET, которое имеет списки слов на нескольких языках, которые вы могли бы использовать.

Ответ 5

Я с Барри Фанданго на этом, но вы можете сделать это без LINQ. У .NET 2.0 есть несколько хороших методов фильтрации в типе List (T). Я предлагаю

List(T).FindAll(Predicate(T)) : List(T)

Этот метод поместит каждый элемент в список через метод предиката и вернет список слов, возвращающих "истина". Итак, загрузите свои слова в соответствии с предложением из словаря с открытым исходным кодом в список (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');
    });