Как создать приложение для английского языка с помощью python (django)?

Я хотел бы создать приложение онлайн-словаря, используя python (или с django).

Он будет похож на http://dictionary.reference.com/.

PS: словарь не хранится в базе данных. он сохраняется в текстовом файле или файле gunzip. Бесплатные английские словарные файлы можно скачать с этого URL: dicts.info/dictionaries.php.

Самый простой бесплатный файл словаря будет в формате:

word1 explanation for word1 

word2 explanation for word2 

Есть и другие форматы. но все они хранятся в текстовом файле или файле text.gz.

Мой вопрос

(1) Есть ли какой-либо существующий пакет python с открытым исходным кодом или модули или приложения, которые реализуют эту функциональность, которую я могу использовать или изучать?

(2) Если ответ на первый вопрос НЕТ. какой алгоритм следует использовать для создания такого веб-приложения? Могу ли я просто использовать встроенный в Python объект словаря для этой работы? так что ключ словаря слова будет английским словом, и значение будет объяснением. это нормально с точки зрения производительности? ИЛИ Должен ли я создать свой собственный объект дерева, чтобы ускорить поиск? или любой существующий пакет, который правильно обрабатывает это задание?

Большое спасибо.

Ответ 1

Возможно, вы захотите проверить http://www.nltk.org/ Вы можете получить много слов и их определений, не беспокоясь о деталях реализации базы данных. Если вы новичок во всех этих материалах, по крайней мере, было бы полезно, чтобы вы поднялись и пошли, а затем, когда у вас есть рабочая версия, начните вставлять базу данных.

Вот быстрый фрагмент того, как получить все доступные значения "собаки" из этого пакета:

from nltk.corpus import wordnet
for word_meaning in wordnet.synsets('dog'):
    print word_meaning.definition

Ответ 2

Я не уверен, о какой функциональности вы говорите. Если вы имеете в виду "поиск ключевых слов из словаря, записанного в вашей базе данных", то python dictionnary не является возможным решением, так как вам придется десериализовать всю вашу базу данных, чтобы выполнить поиск.

Вы должны взглянуть на приложения поиска "django". Многие люди советуют использовать haystack:

Какое лучшее приложение для поиска Django?

и используйте эту поисковую систему, чтобы найти ключевое слово в вашей базе данных.

Если вы не хотите поддерживать сложные поисковые запросы, вы также можете запросить точное ключевое слово в своей базе данных

DictEntry.objects.get(keyword=`something`).definition

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

ИЗМЕНИТЬ:

Если словари поступают из файлов, то трудно сказать, что у вас много решений.

Если файл мал, вы действительно можете десериализовать его до словаря при запуске сервера, а затем всегда искать в одном экземпляре (так что вам не нужно будет снова десериализоваться для каждого запроса).

Если файлы действительно большие, вы можете рассмотреть возможность их переноса в вашу базу данных.

1) Сначала создайте модели Django , чтобы вы знали, какие данные вам нужны, имя ваших полей и т.д.... например:

class DictEntry(Model):
    keyword = CharField(max_length=100)
    definition = CharField(max_length=100)

2) Кажется, что некоторые из файлов ссылки, которые вы указали, находятся в формате csv (похоже, вы также можете иметь их в xml). С csv модуль из стандартной библиотеки вы можете извлечь эти файлы на python.

3), а затем с библиотеками json или yaml python, вы возвращаете эти файлы в другой формат (json или yaml), как описано в исходные данные для вашей модели. И магия ваши исходные данные готовы!

PS: хорошая вещь с python: вы google 'python json', вы найдете официальный документ, потому что библиотека для записи/чтения json является частью стандартной библиотеки python lib!!! То же самое с xml и csv...

Ответ 3

Словарь должен быть довольно небольшим (по ИТ-стандартам).

Для повышения производительности убедитесь, что словарь построен в пространстве имен модулей:

Хорошо:

 # build the dictionary
 english_dict = dict()
 for line in open(dict_file):
     # however you process the file:
     word,def = line.split(',')

     # put it in the dictionary
     english_dict[word] = def

 def get_definition(word):
     # should use english_dict.get(word,'undefined')
     if word in english_dict:
         return english_dict[word]
     else:
         return 'no definition'

Bad

 def get_definition(word):

     # build the dictionary
     english_dict = dict()
     for line in open(dict_file):
         # however you process the file:
         word,def = line.split(',')

         # put it in the dictionary
         english_dict[word] = def

     if word in english_dict:
         return english_dict[word]
     else:
         return 'no definition'

Или вы можете использовать pickle для сохранения словаря (чтобы он быстрее читал), или поместил все это в базу данных. Это зависит от вас.