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

EDI/RAD Python Discussion :

programmation complémentation automatique


Sujet :

EDI/RAD Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut programmation complémentation automatique
    Bonjour,

    Je ne suis peut être pas dans le bon forum,... alors si tel est le cas merci de me communiquer une direction.
    Je voulais savoir s'il existe un logiciel (ou utilitaire) qui permet de faire de la complémentation automatique (comme dans notepad++) qui soit indépendant du logiciel du traitement de texte (qui puisse fonctionner sur plusieurs traitements de textes).
    Sinon, (et c'est la raison que je tape la question dans ce forum) pensez-vous envisageable de programmer cette complémentation automatique avec Python?

    Merci pour vos réponses.

    Gabriel Ruyneau

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    ça se code oui ... mais dans quel contexte ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Dans quel contexte??? je n'ai pas très bien compris

    Ce que je souhaiterais, c'est avoir une complémentation automatique comme sur notepad++ (avec proposition d'une liste de mots évolutive au fur et à mesure de la phrase) au niveau du positionnement du curseur.

    Comme j'utilise plusieurs éditeurs de texte, je souhaiterais que cet utilisateur soit indépendant de l'éditeur.

    Cet utilitaire serait utilisé exclusivement à titre personnel.

    Gabriel

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    oké, tu veux implanter l'auto-complétion dans des éditeurs de texte qui en sont dépourvus c'est ça ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Oui et éventuellement désactiver ceux qui en ont un et activer celui qui est programmé

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    aucune idée ...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Donc j'ai commencé mon programme (je connais très peu de chose en programmation et encore moins sur python...) et je suis arrivé au résultat ci-dessous qui me permet de faire autocompletion dans une widgey Entry.

    J'aimerai conserver cette logique mais que l'autocompletion s'effectue sur un traitement de texte ouvert au lieu dans le widget <<Entry>

    Est-ce possible?

    Merci pour vos réponses.

    PS au passage, si vous voyez des énormités dans le programme, vous pouvez me le signaler.

    Gabriel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
     
    import os
    import re
    import shutil
    import tkinter
     
    def mots_pour_complements():
        """Liste des mots susceptibles d'être complétés"""
     
        liste_mots=['convivial','Déterminer','déterminer','si et seulement si','ensemble','solution','condition','nécessaire',
                    'suffisante','condiment','par contre','contretemps','seulement','Seulement','Par contre','Par ailleurs',
                    'Résoudre','résoudre','événement','alpha','beta']
        liste_mots=list(set(liste_mots))
        return liste_mots
     
    def recherche_complement(saisie,liste_mots):
        """La variable saisie correspond au début du mot à compléter éventuellement;
     
           liste_mots est la liste de l'ensemble de tous les mots susceptibles d'être complétés
           
           En retour: liste_complement qui est la liste triée dans l'ordre croissant des mots trouvés
           dans liste_mots qui commencent par la variable affectée à saisie"""
     
        liste_complement=[]
        for mots in liste_mots:
            if mots.startswith(saisie):
                liste_complement.append(mots)
        numero_index=1
        while numero_index<len(liste_complement):
            numero_test=numero_index-1
            while liste_complement[numero_test]>liste_complement[numero_index] and numero_test>=0:
                numero_test=numero_test-1
            if numero_test<numero_index-1:
                tampon=liste_complement[numero_index]
                j=numero_index
                while j>numero_test+1:
                    liste_complement[j]=liste_complement[j-1]
                    j=j-1
                liste_complement[numero_test+1]=tampon    
            numero_index=numero_index+1
        return liste_complement
     
    def selection(inutile):
        """Si l'utilisateur tape <'Down'> on positionne le focus sur la liste des mots"""    
        liste.focus_set()
     
    def separation():
        """Fonction qui permet de récupérer le dernier <<mot>> qui est entrain d'être saisi"""
     
        phrase=zone_saisie.get()
        decoupage=phrase.split(' ')
        mot=decoupage[-1]
        decoupage=mot.split('\\')
        mot=decoupage[-1]
        return phrase,mot
     
    def recuperation(inutile):
        """Fonction qui permet l'affichage dans la liste des propositions de complément"""
     
        [phrase,mot]=separation()
        liste_mots=mots_pour_complements()
        liste_complement=recherche_complement(mot,liste_mots)
        liste.delete(0,tkinter.END)
        if phrase[-1:]!=r' ':
            for mot_select in liste_complement:
                liste.insert(tkinter.END,mot_select)
            liste.selection_set(0,0)
     
    def affiche(inutile):
        """Fonction qui complète après sélection le mot en cours de frappe"""
     
        [phrase,mot]=separation()
        phrase_sans_mot=phrase[:-len(mot)]
        zone_saisie.delete(0,tkinter.END)
        zone_saisie.insert(tkinter.END,phrase_sans_mot+liste.get(liste.curselection()))
        zone_saisie.focus_set()
        liste.delete(0,tkinter.END)
     
     
     
    #Début du corps du programme    
     
    #Création de la fenêtre principale nommée racine
    racine=tkinter.Tk()
    racine.title("Principale")
     
    #Création de <<bouton>> de type Button pour fermer l'application
    bouton=tkinter.Button(racine,text='Quitter',command=racine.destroy)
    bouton.pack(side=tkinter.BOTTOM)
     
    #Création de <<zone_saisie>> de type Entry où est tapé le texte
    texte_saisi=tkinter.StringVar()
     
    zone_saisie=tkinter.Entry(racine,textvariable=texte_saisi,width=80)
    zone_saisie.pack()
    zone_saisie.focus_set()
     
    #Création de <<cadre>> de type Frame pour regrouper la liste avec un ascenseur
    cadre=tkinter.Frame(racine)
    cadre.pack()
     
    #Création de <<ascenseur>> de type Scrollbar et de <<liste>> de type Listbox
    #pour afficher la proposition des mots pour le complément
    ascenseur=tkinter.Scrollbar(cadre,orient=tkinter.VERTICAL)
    ascenseur.pack(side=tkinter.RIGHT,fill=tkinter.Y)
    liste=tkinter.Listbox(cadre,yscrollcommand=ascenseur.set)
    ascenseur.config(command=liste.yview)
    liste.pack(fill=tkinter.Y)
     
    #Exécution évenementiels en fonction des touches tapées sur le clavier
    #La touche Return affiche le résultat
    #La touche Down permet de sélectionner la liste
    liste.bind('<Return>',affiche)
     
    zone_saisie.bind('a',recuperation)
    zone_saisie.bind('b',recuperation)
    zone_saisie.bind('c',recuperation)
    zone_saisie.bind('d',recuperation)
    zone_saisie.bind('e',recuperation)
    zone_saisie.bind('f',recuperation)
    zone_saisie.bind('g',recuperation)
    zone_saisie.bind('h',recuperation)
    zone_saisie.bind('i',recuperation)
    zone_saisie.bind('j',recuperation)
    zone_saisie.bind('k',recuperation)
    zone_saisie.bind('l',recuperation)
    zone_saisie.bind('m',recuperation)
    zone_saisie.bind('n',recuperation)
    zone_saisie.bind('o',recuperation)
    zone_saisie.bind('p',recuperation)
    zone_saisie.bind('q',recuperation)
    zone_saisie.bind('r',recuperation)
    zone_saisie.bind('s',recuperation)
    zone_saisie.bind('t',recuperation)
    zone_saisie.bind('u',recuperation)
    zone_saisie.bind('v',recuperation)
    zone_saisie.bind('w',recuperation)
    zone_saisie.bind('x',recuperation)
    zone_saisie.bind('y',recuperation)
    zone_saisie.bind('z',recuperation)
    zone_saisie.bind('é',recuperation)
    zone_saisie.bind('è',recuperation)
    zone_saisie.bind('A',recuperation)
    zone_saisie.bind('B',recuperation)
    zone_saisie.bind('C',recuperation)
    zone_saisie.bind('D',recuperation)
    zone_saisie.bind('E',recuperation)
    zone_saisie.bind('F',recuperation)
    zone_saisie.bind('G',recuperation)
    zone_saisie.bind('H',recuperation)
    zone_saisie.bind('I',recuperation)
    zone_saisie.bind('J',recuperation)
    zone_saisie.bind('K',recuperation)
    zone_saisie.bind('L',recuperation)
    zone_saisie.bind('M',recuperation)
    zone_saisie.bind('N',recuperation)
    zone_saisie.bind('O',recuperation)
    zone_saisie.bind('P',recuperation)
    zone_saisie.bind('Q',recuperation)
    zone_saisie.bind('R',recuperation)
    zone_saisie.bind('S',recuperation)
    zone_saisie.bind('T',recuperation)
    zone_saisie.bind('U',recuperation)
    zone_saisie.bind('V',recuperation)
    zone_saisie.bind('W',recuperation)
    zone_saisie.bind('X',recuperation)
    zone_saisie.bind('Y',recuperation)
    zone_saisie.bind('Z',recuperation)
    zone_saisie.bind('<Down>',selection)
    zone_saisie.bind('<Return>',affiche)
     
    #Affichage du tout
    racine.mainloop()

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    heu ...
    pour de faire ça tu peux coupler str.startswith() et os.path.commonprefix()

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    OK...
    Je vais essayer de comprendre la deuxième commande.

    Par contre, j'ai une question qui demeure

    Existe-t-il un code en python pour <<récupérer>> et affecter à une variable ce qui est saisi sur le clavier par l'utilisateur dans une application (traitement de texte, tableur,...).

    Peut être que ma question n'est pas très claire...

    Gabriel

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    en fait il faudrait intercaler un code python en l'utilisateur et le logiciel pour intercepter les saisies au clavier; çà doit-être possible(voir keylogger).
    Mais je pense que c'est beaucoup de travail pour une fonction qui existe dans pratiquement tout les logiciels; je chercherai plutôt à savoir s'il est possible d'alimenter manuellement les dictionnaires .. et encore, ça me semble aussi colossale.

  11. #11
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Existe-t-il un code en python pour <<récupérer>> et affecter à une variable ce qui est saisi sur le clavier par l'utilisateur dans une application (traitement de texte, tableur,...).
    Voir ce post et la réponse de Sve@r.

    Après tu peux le coder toi même, voir les API win32 par exemple

    Par contre tu peux faire comme dans Word, au départ ne rien avoir dans ton dictionnaire et au fur et à mesure que tu tapes du texte dans ton logiciel, les mots sont enregistrés dans un fichier.

    Tu peux aussi récupérer un dictionnaire de mots sous forme de fichier texte et vérifier pour chaque lettre entrée quels mots correspondent dans le dico, mais t'as intérêt à avoir un super algo, sinon ça va te prendre une pige.

    Bref, il y a des moyens pour l'autocomplétion, mais nous on attend ton algo.

    C'est un projet un peu gros, et si tu t'organises pas, il tombera à l'eau
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    @fred1599
    je pense que tu n'as pas bien compris, la question du PO ne porte pas l'auto-complétion en elle même, mais plutôt "est-ce possible de coder un programme qui interface n'importe quel logiciel dépourvu de cette fonction (ou remplace l'existant) ?" ; genre un super patch ...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    Je pense que mon topic n'était pas très clair. La liste des mots à compléter, je vais bien sûr la taper moi même dans un fichier txt.
    Je ne souhaite pas créer quelque chose de lourd (de tout manière j'en suis incapable) mais un utilitaire (qui puisse tenir dans une clef USB); ainsi quand je travaille sur d'autres ordinateurs avec d'autres traitements de texte, je puisse avoir la même base de mots et syntaxes susceptibles d'être complétés.

    Mais apparemment, l'affaire vous semble mal engagée...

    Je vais voir ce que propose keylogger.

    Merci pour vos réponses.

    Gabriel

  14. #14
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    non mais même pas keylogger; si tu as un dico alors cherches plutôt s'il est possible de "l'importer" dans le logiciel utilisé ...

  15. #15
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    je pense que tu n'as pas bien compris, la question du PO ne porte pas l'auto-complétion en elle même, mais plutôt "est-ce possible de coder un programme qui interface n'importe quel logiciel dépourvu de cette fonction (ou remplace l'existant) ?" ; genre un super patch ...
    Ah ok, ça va surtout dépendre du logiciel où il veut incorporer du python.

    Un peu comme Blender qui supporte le script python.

    Ai-je bien compris ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    En fait, j'aimerais pouvoir faire un interface qui ressemble un peu (mais en plus simple avec uniquement un seul dico - le mien - ) au logiciel scribedico
    http://scribedico.over-blog.com/ (utilisation limité en nombres)
    qui intervient dans la plupart des traitements de textes.

    Gabriel

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut,

    il faut que tu utilises un système de Hook pour intercepter les frappes claviers
    ( pyHook devrait faire l'affaire ) indépendamment du logiciel que tu utilises
    tu envoies ensuite une séquence de caractères pour insérer le complément.
    La fonction proposition du complément insérée dans le texte ( en grisée dans scribedico ) est un peu plus délicate à mettre en place, toutes les applications ne répondant pas forcément de la même façon aux séquences claviers ( selection mot, repositionnement curseur ...etc ) , mais pour la premiere partie ça se fait sans trop de problemes.


    ScribeDico (:-))

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Comme je découvre python (et la programmation), j'essaie à ce jour - sans succès- d'implanter pyHook...
    Merci pour la réponse.
    Gabriel

Discussions similaires

  1. Compiler programme en automatique
    Par samitomito dans le forum SAP
    Réponses: 0
    Dernier message: 08/04/2015, 15h23
  2. [WD-2007] Afficher l'onglet "Compléments" automatiquement ?
    Par Golard dans le forum VBA Word
    Réponses: 6
    Dernier message: 06/08/2014, 20h37
  3. Exécuter plusieurs programmes Prolog automatiquement
    Par alexglvr dans le forum Prolog
    Réponses: 2
    Dernier message: 06/12/2008, 12h49
  4. Lancer un programme JAVA automatiquement
    Par david71 dans le forum Général Java
    Réponses: 12
    Dernier message: 12/09/2008, 11h03
  5. [BCB6]Complémenté automatiquement une saisie
    Par Draner dans le forum C++Builder
    Réponses: 26
    Dernier message: 03/07/2008, 08h14

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