Как создать приложение словарь английского языка с Python (Django)? - PullRequest
10 голосов
/ 20 мая 2010

Я хотел бы создать приложение онлайн-словаря, используя 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 для этой работы? так что ключом словарного объекта будет английское слово, а значением будет объяснение. это нормально с точки зрения производительности? ИЛИ Должен ли я создать свой собственный объект дерева, чтобы ускорить поиск? или любой существующий пакет, который обрабатывает эту работу правильно?

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

Ответы [ 3 ]

9 голосов
/ 20 мая 2010

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

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

from nltk.corpus import wordnet
for word_meaning in wordnet.synsets('dog'):
    print word_meaning.definition
3 голосов
/ 20 мая 2010

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

Тебе лучше взглянуть на django 'search' приложения. Многие люди советуют использовать 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 !!! То же самое с xml и csv ...

1 голос
/ 20 мая 2010

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

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

Хорошо:

 # 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 для сохранения словаря (чтобы его было быстрее читать) или поместить все в базу данных. Это зависит от вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...