Bonjour,
tout est dans le titre. Plus précisément, je cherche un module auquel on donnerait une suite de lettres, et qui chercherait alors les correspondances possibles dans un dictionnaire de mots.
Toute info. est la bienvenue.
Bonjour,
tout est dans le titre. Plus précisément, je cherche un module auquel on donnerait une suite de lettres, et qui chercherait alors les correspondances possibles dans un dictionnaire de mots.
Toute info. est la bienvenue.
Penses-tu à l'autocomplétion spécifique à Python, ou des mots plus généraux d'un dico ?
Dans le premier cas, je ne pourrais que te renvoyer ici: http://www.developpez.net/forums/d75...e/#post4378001
Dans le deuxième cas, je ne pense pas qu'un module existe déjà.
Par contre tu peux te servir d'un arbre pour ce genre de chose:
Chaque noeud contient 26 entrées (soit une pour chaque lettre, et attention aux accents). Chacune de ces entrées contient un noeud à son tour, avec les lettres qui suivent possible. Si plus rien ne peut découler de cet enchainement, il n'y a simplement pas de noeud.
Cfr le diagramme pour un exemple.
C'est une bonne solution si le nombre de mots n'est pas important, sinon, faudra surement passer par une base de données, (domaine qui m'est encore inconnu)... histoire d'économiser la mémoire. A toi de voir donc
Ce serait via un dico perso. Je peux estimer qu'il y aura au maximum une centaine de mots (mais là je n'en suis pas sûr). Je vais attendre d'avoir fini mon projet au complet avant de me lancer là-dedans.
Sinon la BDD paraît une solution sympa mais moi aussi je suis une bille dans ce domaine.
Si c'est pour une centaine de mots, la méthode d'Antoine semblerait être la bone, et sera sans doute bien plus rapide en termes de vitesse d'exécution.![]()
Ce serait dommage de charger le pc d'une db pour si peu...
D'autant plus qu'il y a de trèèèèès fortes chances que la db soit plus lente pour cette action. (parsing de query + recherche à chaque fois... olé !)
Et qui plus est, les db organisent leurs index avec des arbres équilibrés.
Si tu as des soucis de performances, tu peux toujours implémenter ça en C.
Bonjour,
Pour 100 mots il ne me semble pas nécessaire de passer au C et ni une db non ?.
Pourquoi ne pas tester qq chose comme ceci :
dico.txt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Autocomp: def __init__(self,fichier_dico): fo=open(fichier_dico,"r") self.dico=fo.readlines() def lettres2mots(self,lettres): mots=[mot for mot in self.dico if mot.startswith(lettres)] return mots a=Autocomp("dico.txt") print a.lettres2mots("tro")
donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 un deux trois troll troy
Alex
Code : Sélectionner tout - Visualiser dans une fenêtre à part ['trois\n', 'troll\n', 'troy']
Oui je vais essayer quelque chose de ce type. En plus, il me semble que les "lists comprehension" sont rapides.
Sinon l'intérêt de l'arbre est qu'il demande moins de place mais plus de temps de programmation.
Merci. Je clos le sujet en ce qui me concerne sur la dernière proposition ci-dessus.
Merci.![]()
Partager