IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comment faire de l'auto-complétion efficace ?


Sujet :

Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Comment faire de l'auto-complétion efficace ?
    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.

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    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.
    Images attachées Images attachées  

  3. #3
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    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

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Citation Envoyé par Antoine_935 Voir le message
    Penses-tu à l'autocomplétion spécifique à Python, ou des mots plus généraux d'un dico ?
    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.

  5. #5
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    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.

  6. #6
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    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.

  7. #7
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    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 :

    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")
    dico.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    un
    deux
    trois
    troll
    troy
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['trois\n', 'troll\n', 'troy']
    Alex

  8. #8
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire l'auto-resize d'un sous formulaire
    Par malingue dans le forum Access
    Réponses: 17
    Dernier message: 30/03/2019, 13h16
  2. [Toutes versions] Comment faire auto-completion
    Par moulery dans le forum Excel
    Réponses: 1
    Dernier message: 25/11/2009, 15h51
  3. Réponses: 5
    Dernier message: 09/10/2009, 23h41
  4. Réponses: 4
    Dernier message: 15/02/2009, 11h22
  5. Comment faire un numéro auto??
    Par the_new dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/03/2005, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo