2010-05-20 3 views
10

Je voudrais créer une application de dictionnaire en ligne en utilisant python (ou avec django). Il sera semblable à http://dictionary.reference.com/. PS: le dictionnaire n'est pas stocké dans une base de données. il est stocké dans un fichier texte ou un fichier gunzip. Les fichiers gratuits du dictionnaire anglais peuvent être téléchargés à partir de cette URL: dicts.info/dictionaries.php.comment créer une application de dictionnaire de langue anglaise avec python (django)?

Le fichier dictionnaire libre sera plus facile dans le format de:

word1 explanation for word1 

word2 explanation for word2 

Il y a quelques autres formats aussi bien. mais tous sont stockés soit dans un fichier texte ou text.gz fichier

Ma question est

(1) Y at-il un paquet python open source existant ou modules ou application qui implémente cette fonctionnalité que je peux utiliser ou étudier à partir ?

(2) Si la réponse à la première question est NON. quel algorithme dois-je suivre pour créer une telle application web? Puis-je simplement utiliser l'objet dictionnaire intégré python pour ce travail? de sorte que la clé de l'objet du dictionnaire sera le mot anglais et la valeur sera l'explication. Est-ce OK en terme de performance? OU Dois-je créer mon propre objet Arborescence pour accélérer la recherche? ou tout paquet existant qui gère ce travail correctement?

Merci beaucoup.

+0

PS: le dictionnaire ne sont pas stockées dans une base de données. il est stocké dans un fichier texte ou un fichier gunzip. Les fichiers gratuits du dictionnaire anglais peuvent être téléchargés à partir de cette URL: http://www.dicts.info/dictionaries.php. Le fichier dictionnaire le plus facile sera au format suivant: mot1 explication pour mot1 mot2 explication pour mot2 Il existe également d'autres formats. mais tous sont stockés dans un fichier texte ou un fichier text.gz. – SSS

Répondre

3

Je ne suis pas sûr de la fonctionnalité 'Quoi' dont vous parlez. Si vous voulez dire «rechercher des mots-clés à partir d'un dictionnaire enregistré dans votre base de données», alors python dictionnary n'est pas une solution possible, car vous devriez désérialiser toute votre base de données pour pouvoir effectuer une recherche.

Vous devriez plutôt regarder vers les applications de recherche django. Beaucoup de gens conseillent d'utiliser haystack:

What's the best Django search app?

et utiliser ce moteur de recherche pour chercher quelque mot clé dans votre base de données.

Si vous ne voulez pas soutenir des recherches sophistiquées, vous pouvez également interroger pour un mot-clé exact dans votre base de données

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

Je suppose que tout dépend du niveau de sophistication que vous voulez atteindre, mais il peut y avoir des solutions extrêmement simples.

EDIT:

Si les fichiers proviennent de dictionnaires, il est difficile de dire, vous avez beaucoup de solutions.

Si le fichier est petit, vous pouvez le désérialiser en un dictionnaire lors du démarrage du serveur, puis rechercher toujours dans la même instance (pour ne plus devoir désérialiser à chaque requête).

Si les fichiers sont très volumineux, vous pouvez envisager de les migrer vers votre base de données.

1) Tout d'abord créer Django modèles, si vous voulez savoir quelles sont les données dont vous avez besoin, le nom de vos champs, etc ... par exemple:

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

2) Il semble que certains des les fichiers sur le lien que vous avez donné sont au format csv (il semble aussi que vous pouvez les avoir en XML). Avec le module csv de la bibliothèque standard, vous pouvez extraire ces fichiers en python.

3) puis avec les bibliothèques python json ou yaml, vous retransmettez ces fichiers dans un format différent (json ou yaml) comme décrit dans initial data for your model. Et magic vos données initiales sont prêtes! PS: la bonne chose avec python: vous google 'python json' vous trouverez le doc officiel car une bibliothèque pour écrire/lire json fait partie de la librairie python standard !!! Idem avec xml et csv ...

+0

Je suis encore nouveau sur python et django. merci beaucoup pour les conseils. :) – SSS

+0

Cher sebpiq, pouvez-vous s'il vous plaît expliquer un peu plus sur la façon de les migrer vers la base de données? Je suis encore nouveau sur python. Merci. – SSS

+0

Merci beaucoup pour la réponse supplémentaire sur la migration vers la base de données. :) – SSS

1

Un dictionnaire devrait être assez petit (selon les normes informatiques).

Pour des performances, assurez-vous que le dictionnaire est construit dans l'espace de noms du module:

Bon:

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

Ou vous pouvez utiliser cornichon pour sauver le dictionnaire (donc c'est plus rapide à lire), ou tout mettre dans une base de données. C'est à vous.

+0

Je suis encore nouveau sur python et django. merci beaucoup pour les conseils. :) – SSS

+0

OK, quelques astuces rapides alors: les dictionnaires ({} ou dict()) sont vraiment rapides pour les recherches. Les listes ([] ou list()) sont très lentes à chercher. Vous devez connaître ces deux structures de données.Mettre des éléments dans l'espace des noms de module signifie que vous construisez le dictionnaire chaque fois que le processus django s'exécute, ce qui devrait être moins souvent que vous appelez la fonction. En outre, pickle est un bon moyen de stocker des objets python sur le disque dur. – wisty

+0

Merci pour les nouveaux conseils. Puis-je poser une autre question concernant la recherche de mots? Comme vous l'avez mentionné, les dictionnaires intégrés python sont rapides pour les recherches. Est-ce suffisant et rapide d'utiliser des dictionnaires intégrés avec pickle pour faire la recherche de mot? Peut-il gérer une grande base de données de mots, par exemple: 200 Mo ou plus? OU Est-ce préférable d'utiliser le moteur de recherche Haystack + Xapian pour faire le job de recherche mentionné par sebpiq? Comme je n'ai pas beaucoup d'expérience à ce sujet, c'est pourquoi je demande ici et je voudrais savoir par où commencer. Choisir la bonne direction/méthode économisera beaucoup de temps.^_^merci beaucoup. – SSS

9

Vous voudrez peut-être vérifier http://www.nltk.org/ Vous pourriez obtenir beaucoup de mots et leurs définitions sans avoir à vous soucier des détails de mise en œuvre d'une base de données. Si vous êtes novice dans ce domaine, à tout le moins, il serait utile de vous lancer, et quand vous avez une version fonctionnelle, commencez à mettre dans une base de données.

Voici un extrait rapide de la façon d'obtenir toutes les significations disponibles de « chien » de ce paquet:

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

Merci beaucoup d'avoir suggéré ce module python. très intéressant. Je vais y jeter un coup d'oeil. Je pense que je peux vérifier leur code source pour voir et apprendre comment ils gèrent la recherche de mots. – SSS

Questions connexes