2010-05-20 2 views
10

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

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

спасибо.

+0

PS: словарь не хранится в базе данных. он сохраняется в текстовом файле или файле gunzip. Бесплатные английские словарные файлы можно скачать с этого URL: http://www.dicts.info/dictionaries.php. Самый простой бесплатный файл словаря будет в формате: word1 для слова1 word2 для слова2 Есть и другие форматы. но все они хранятся в текстовом файле или файле text.gz. – SSS

ответ

3

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

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

What's the best Django search app?

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

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

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

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

EDIT:

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

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

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

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

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

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

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

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

+0

Я все еще новичок в python и django. Большое спасибо за советы. :) – SSS

+0

Уважаемый sebpiq, не могли бы вы немного подробнее рассказать о том, как перенести их в базу данных? Я все еще новичок в python. Благодарю. – SSS

+0

Большое спасибо за дополнительный ответ о переходе на базу данных. :) – SSS

1

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

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

Хорошо:

# 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' 

Или вы могли бы использовать рассол, чтобы сохранить словарь (так что это быстрее читать), или поместить все это в базу данных. Тебе решать.

+0

Я все еще новичок в python и django. Большое спасибо за советы. :) – SSS

+0

ОК, несколько быстрых подсказок: словари ({} или dict()) действительно быстры для поиска. Списки ([] или list()) очень медленны для поиска. Вам нужно знать эти две структуры данных. Ввод содержимого в пространство имен модулей означает, что вы строите словарь каждый раз, когда выполняется процесс django, который должен быть реже, чем вы вызываете функцию. Кроме того, pickle - хороший способ хранения объектов python на жестком диске. – wisty

+0

Спасибо за новые советы. Могу ли я спросить еще один вопрос о поиске слов? Поскольку вы упомянули, что встроенные словари python быстро ищут. Достаточно ли и быстро использовать встроенные словари с рассолом для поиска слов? может ли он обрабатывать большую базу данных слов, например: 200 МБ или больше? ИЛИ Лучше ли использовать поисковую систему Haystack + Xapian, чтобы выполнить работу по поиску, указанную sebpiq? Поскольку у меня нет большого опыта в этом, вот почему я спрашиваю здесь и хочу знать, с чего начать. Чтобы выбрать правильное направление/метод, вы сэкономите много времени.^_^Большое спасибо. – SSS

9

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

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

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

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