python: быстрый поиск слов в словаре с помощью подстановочных знаков*

#python #dictionary #tree #lookup

#python #словарь #дерево #поиск

Вопрос:

Учитывая текст, который разделен на список слов, я хочу выполнить поиск каждого из слов в словаре слов, который также считывается из текстового файла и split('n') .

Вместо того, чтобы проверять, содержится ли каждое слово в словаре (что ужасно медленно) Мне нужно выбрать список элементов на основе подстановочных знаков * (‘*’ находится в конце, т.Е. Решение permuterm не требуется). Например, решение должно выбирать все элементы словаря, начинающиеся с ‘dep’, без обхода всего списка словарей.

В этом случае важна производительность. Я думал о Btree … но

  1. Какой был бы лучший пакет и тип данных для быстрой реализации на Python.
  2. Пожалуйста, предоставьте примеры кода

Комментарии:

1. Похоже, вам нужен какой-то пакет trie

2. Подстановочный знак всегда будет медленнее. Dicts работают с хэшами (постоянное время доступа).

3. @JBernardo: нет, это просто означает, что элементы должны начинаться с того, что предшествует «звезде»

4. Вот почему вы потеряете постоянный поиск по времени. т. Е. Это будет медленнее.

Ответ №1:

Используйте dawg, который более эффективен, чем Trie, с точки зрения отходов пространства. Существует несколько реализаций python, но для начала взгляните сюда.

Комментарии:

1. С веб-сайта: «… Если вас не волнует память или скорость [sic!], Просто сохраните свои слова «… Это быстрее?

2. Dawg определенно быстрее. Цитата с веб-сайта иронична. «просто сохраните свои слова в базе данных SQL или запустите 100 компьютеров в облаке. Я не возражаю. Больше возможностей для вас! »

Ответ №2:

Вам нужен trie. Используйте пакет PyTrie.