2010-05-20 11 views
10

Me gustaría crear una aplicación de diccionario en línea usando python (o con django).cómo crear una aplicación de diccionario de inglés con python (django)?

Será similar a http://dictionary.reference.com/.

PD: el diccionario no está almacenado en una base de datos. está almacenado en un archivo de texto o archivo gunzip. Los archivos de diccionarios de inglés gratuitos se pueden descargar desde esta URL: dicts.info/dictionaries.php.

El archivo de diccionario libre más fácil será en el formato de:

word1 explanation for word1 

word2 explanation for word2 

Hay algunos otros formatos también. pero todos se almacenan en un archivo de texto o archivo text.gz

Mi pregunta es

(1) ¿Hay algún paquete de código abierto Python o módulos o aplicación que implementa esta funcionalidad que pueda utilizar o estudio de los actuales ?

(2) Si la respuesta a la primera pregunta es NO. ¿Qué algoritmo debo seguir para crear dicha aplicación web? ¿Puedo simplemente usar el objeto de diccionario incorporado de Python para este trabajo? para que la clave del objeto del diccionario sea la palabra en inglés y el valor será la explicación. ¿Está bien en términos de rendimiento? O ¿Tengo que crear mi propio objeto de árbol para acelerar la búsqueda? o cualquier paquete existente que maneje este trabajo correctamente?

Muchas gracias.

+0

PD: el diccionario no se almacena en una base de datos. está almacenado en un archivo de texto o archivo gunzip. Los archivos de diccionarios de inglés gratuitos se pueden descargar desde esta URL: http://www.dicts.info/dictionaries.php. El archivo de diccionario libre más fácil será en el formato de: explicación palabra1 Palabra1 explicación palabra2 para palabra2 Hay algunos otros formatos también. pero todos están almacenados en un archivo de texto o en un archivo de texto.gz. – SSS

Respuesta

3

No estoy seguro de la "funcionalidad" de la que está hablando. Si quiere decir "buscar palabras clave de un dictionario que está registrado en su base de datos", entonces python dictionnary no es una solución posible, ya que tendría que deserializar toda su base de datos para realizar una búsqueda.

Debería mirar hacia las aplicaciones django 'buscar'. Una gran cantidad de personas que aconsejan utilizar haystack:

What's the best Django search app?

y el uso de este motor de búsqueda para buscar alguna palabra clave en su base de datos.

Si no desea apoyar las búsquedas sofisticadas, entonces usted podría también consultar para una palabra clave exacta en su base de datos

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

Supongo que todo depende del nivel de sofisticación que quiere lograr, pero puede haber soluciones extremadamente simples.

EDIT:

Si los Diccionarios provienen de archivos, entonces es difícil de decir, que tiene un montón de soluciones.

Si el archivo es pequeño, de hecho podría deserializarlo en un dictionnary al iniciar el servidor, y luego buscar siempre en la misma instancia (para que no tenga que deserializar de nuevo para cada solicitud).

Si los archivos son realmente grandes, podría considerar migrarlos a su base de datos.

1) En primer lugar crear sus modelos Django , lo que se sabe qué datos necesita, el nombre de sus campos, etc ... por ejemplo:

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

2) Parece que algunos de los archivos en el enlace que proporcionó están en formato csv (parece que también puede tenerlos en xml). Con el módulo csv de la biblioteca estándar, puede extraer estos archivos en python.

3) y luego con las bibliotecas json o yaml python, volcar estos archivos a un formato diferente (json o yaml) como se describe en initial data for your model. Y magic ¡sus datos iniciales están listos!

PD: lo bueno con python: ¡google 'python json' encontrará el documento oficial porque una biblioteca para escribir/leer json es parte de la lib de python estándar! Idem con xml y csv ...

+0

Todavía soy nuevo en python y django. Muchas gracias por los consejos. :) – SSS

+0

Estimado sebpiq, ¿puede explicar un poco más sobre cómo migrarlos a la base de datos? Todavía soy nuevo en Python. Gracias. – SSS

+0

Muchas gracias por la respuesta adicional sobre la migración a la base de datos. :) – SSS

1

Un diccionario debe ser bastante pequeño (según los estándares de TI).

Para obtener un rendimiento, asegúrese de que el diccionario se construye en el espacio de nombres del módulo:

bueno:

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

Malo

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' 

O usted podría utilizar salmuera para salvar el diccionario (así que es más rápido leerlo), o ponerlo todo en una base de datos. Tu decides.

+0

Todavía soy nuevo en python y django. Muchas gracias por los consejos. :) – SSS

+0

OK, algunos consejos rápidos: los diccionarios ({} o dict()) son realmente rápidos para las búsquedas. Las listas ([] o lista() son muy lentas para buscar. Necesita conocer estas dos estructuras de datos. Poner cosas en el espacio de nombre del módulo significa que usted crea el diccionario cada vez que se ejecuta el proceso django, que debe ser menos frecuente de lo que llama la función. Además, pickle es una buena forma de almacenar objetos python en el disco duro. – wisty

+0

Gracias por nuevos consejos. ¿Puedo hacer una pregunta más con respecto a la búsqueda de palabras? Como mencionaste, los diccionarios integrados de Python son rápidos para las búsquedas. ¿Es eso suficiente y rápido usar diccionarios incorporados con pickle para hacer la búsqueda de palabras? ¿puede manejar una base de datos de palabras grandes, por ejemplo: 200 MB o más? O ¿Es mejor usar el motor de búsqueda Haystack + Xapian para hacer el trabajo de búsqueda mencionado por sebpiq? Como no tengo mucha experiencia en esto, es por eso que estoy preguntando aquí y me gustaría saber por dónde debería empezar. Escoger la dirección/método correcto ahorrará mucho tiempo.^_^muchas gracias. – SSS

9

Es posible que desee comprobar http://www.nltk.org/ Puede obtener muchas palabras y sus definiciones sin tener que preocuparse por los detalles de implementación de una base de datos. Si eres nuevo en todo esto, al menos sería útil despertarte y luego, cuando tengas una versión funcional, comiences a poner una base de datos.

He aquí un fragmento rápido de cómo obtener todos los significados disponibles de "perro" de ese paquete:

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

Muchas gracias por sugerir este módulo de python. muy interesante. Lo echaré un vistazo. Creo que puedo verificar su código fuente para ver y aprender cómo manejan la búsqueda de palabras. – SSS

Cuestiones relacionadas