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

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

10
задан SSS 20 May 2010 в 09:15
поделиться

3 ответа

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

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

from nltk.corpus import wordnet
for word_meaning in wordnet.synsets('dog'):
    print word_meaning.definition
9
ответ дан 3 December 2019 в 23:11
поделиться

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

Вам лучше обратить внимание на приложения django 'search'. Многие советуют использовать haystack :

What's the best Django search app?

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

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

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

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

EDIT:

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

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

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

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: если вы погуглите "python json", вы найдете официальную документацию, потому что библиотека для записи/чтения json является частью стандартной библиотеки python!!! Аналогично с xml и csv ...

3
ответ дан 3 December 2019 в 23:11
поделиться

Словарь должен быть довольно маленьким (по СТАНДАРТАМ ИТ).

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

Good:

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

1
ответ дан 3 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: