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 recuperer et manipuler la sortie de TreeTagger avec python


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 41
    Par défaut Comment recuperer et manipuler la sortie de TreeTagger avec python
    Bonjour,

    Je voulais écrire un programme python qui récupère la sortie d'une commande TreeTagger et qui compte le nombre des fois ou la sortie est répété, il stock par la suite chaque mot et son occurrence dans un htable (je sais pas si ça existe en python), et enfin il enleve les mots qui sont répétés moins de 10 fois.

    Mon problème c'est que je suis débutante en python de coup je sais pas trop comment faire pour que le programme puisse lire d'un fichier texte qui est à la base la sortie de TreeTagger et par la suite manipuler plutot compter ce qui est à l'interieur, ou peut être je suis sensé créer ce fichier texte dans le programme en ajoutant la commande d'execution de TreeTagger dans le code python. Je suis un peu perdue, j'aimerais bien trouver une solution.

    Merci.

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    Citation Envoyé par Derfh Voir le message
    Mon problème c'est que je suis débutante en python
    C'est très vague. As-tu seulement commencé à lire des tutoriaux ? Comme "notre" très fameux Swinnen ?

    Parce que, sinon, à ce compte là, je suis aussi débutant en Ruby ou C# et, si j'avais à faire ce que tu veux faire, je serais tout aussi perdu !

    Où en es-tu de ton apprentissage Python ?

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 41
    Par défaut
    En fait j'ai pu lire quelques tuto mais j'essaye plus d'apprendre en pratiquant la chose
    Là j'ai pu faire un programme qui compte le nombre d'occurence des mots gràce à Python Dictionnary
    mon code ressemble à ceci (Il peut y avoir des bétises)

    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
    def compter(src, dst):
     
    	dico={}
     
    	entete = src.readline().rstrip('\n\r').split(",")
    	lemidx = entete.index("Lemme")
     
    	for ligne in src:
     
    		donnees = ligne.rstrip('\n\r').split(",")
     
    		r = donnees[lemidx]
    		if not ( r in dico):
     
    		    dico[r]=1
     
    		else:
     
    		    dico[r]+=1
     
    	dst.write("%s" % (dico))
     
    	pass
     
    source = open("test.txt","r")
    destination = open("Htable.txt","w")
     
     
    compter(source, destination)
     
    destination.close()
     
    source.close()
    Mais maintenant le problème qui se pose c'est que j'ai testé ce code sur un fichier text dont les informations sont séparées par un virgule et qu'il y'a des mots d'entete qui identifie chaque bloc d'information ce qui n'est pas le cas d'une sortie TreeTagger parce que dans ce cas les blocs d'informations sont séparées par des tabulations et il n'existe aucune entete pour identifier chaque bloc

    Avez vous une idée comment ça passe dans ce cas ?

  4. #4
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par Derfh Voir le message
    le cas d'une sortie TreeTagger parce que dans ce cas les blocs d'informations sont séparées par des tabulations et il n'existe aucune entete pour identifier chaque bloc.

    Avez vous une idée comment ça passe dans ce cas ?
    S'il n'y a pas de ligne d'entête, c'est que chaque "colonne" est clairement spécifiée dans la documentation de TreeTagger : plus besoin de déterminer lemidx qui est, alors, une constante (là, je ne peux pas t'aider). Dès l'ouverture du fichier à traiter, tu attaques/lis directement les lignes de "données".

    Ensuite, ce n'est qu'une question de séparateur de mots : dans ton code, c'était la virgule qui te permettait de découper une ligne de texte ? maintenant, c'est un caractère tabulation ('\t') !

    Si tu as écris/compris le bout de code que tu as posté, ça devrait t'aider.
    Par contre, écrire un dictionnaire via "dst.write('%s' % dico)", c'est du brutal, surtout quand on voit qu'un changement de séparateur pose tant de problèmes.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 41
    Par défaut
    Citation Envoyé par plxpy Voir le message
    S'il n'y a pas de ligne d'entête, c'est que chaque "colonne" est clairement spécifiée dans la documentation de TreeTagger : plus besoin de déterminer lemidx qui est, alors, une constante (là, je ne peux pas t'aider). Dès l'ouverture du fichier à traiter, tu attaques/lis directement les lignes de "données".
    Je sais pas comment faire pour lire drectement les lignes de données parce que je vais avoir besoin d'un identifiant de chaque lemme pour réaliser la boucle


    Citation Envoyé par plxpy Voir le message
    Ensuite, ce n'est qu'une question de séparateur de mots : dans ton code, c'était la virgule qui te permettait de découper une ligne de texte ? maintenant, c'est un caractère tabulation ('\t') !
    Oui justement il ne y'avait pas un vrai problème sur cette partie! mais parce que il y'a des codes qui n'acceptent pas le anti slash t comme le cas de R c'est pour ça je me suis poser la question

    J'ai changé le code pour éviter d'utiliser la méthode de dictionnaire vu que en affichage ça me donne que des nombres, je voulais un truc plus organisé de coup j'ai réalisé un code basique mais le problème qui se pose ici c'est que il parcours que la ligne et il compte le nombre d'occurence sur la ligne et pas sur tous le document, je sais peut être que j'ai mal écris la boucle mais je sais pas par quoi la remplacer, j'ai tous essayé mais ça ne marche toujours pas.

    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
    def compter(src, dst):
     
     
    	entete = src.readline().rstrip('\n\r').split("\t")
    	lemidx = entete.index("text")
     
     
    	for ligne in src:
     
    		donnees = ligne.rstrip('\n\r').split("\t")
    		r = donnees[lemidx]
    		a = 0 
     
    		if not (r in dst):
     
    		    a=1
     
    		else:
     
    		    a+=1 
     
    		dst.write("%s %s\n" % (donnees[lemidx],a))
     
    	pass
     
     
    source = open("toto.out","r")
    destination = open("Table.txt",'a+r')
     
     
    compter(source, destination)
     
     
    destination.close()
     
    source.close()

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Pas facile de comprendre ce que vous voulez faire à partir de votre code.
    Peut être qu'on y verrait plus clair si vous postiez quelques lignes significatives du fichier d'entrée et une description succincte de ce que vous voudriez obtenir en sortie à partir de là.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 41
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Pas facile de comprendre ce que vous voulez faire à partir de votre code.
    Peut être qu'on y verrait plus clair si vous postiez quelques lignes significatives du fichier d'entrée et une description succincte de ce que vous voudriez obtenir en sortie à partir de là.

    - W
    Oui justement j'ai peut être mal expliqué, en gros je veux à partir d'un fichier d'entrée qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    toto      NN     toto
    titi      NN     titi 
    of       IN      of
    totos    NN     toto
    is       VBZ    be
    was      VBZ    be
    toto     NN     toto

    avoir en sortie un fichier qui ressemble à ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    toto   3
    titi   1
    of    1
    be    2
    Ce qui veux dire que le programme a calculé le nombre d'occurence de chaque mot de la 3éme colonne du premier fichier et il a par la suite insérer le resultat dans le deuxieme fichier en évitant la répetition. J'arrive toujours pas à avoir ce resultat vu que mon code calcule le nombre d'occurence sur chaque ligne et pas sur tous le fichier ce qui fait ça m'affiche un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    toto  1
    titi  1
    of    1
    toto  1
    be    1
    be    1
    toto  1

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Si vous voulez apprendre à programmer avec Python...
    Pensez à la console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> data = '''toto      NN     toto
    ... titi      NN     titi
    ... of       IN      of
    ... totos    NN     toto
    ... is       VBZ    be
    ... was      VBZ    be
    ... toto     NN     toto
    ... '''
    Pour construire la liste des derniers mots de chaque ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> words = [ line.split()[-1] for line in data.splitlines() ]
    >>> words
    ['toto', 'titi', 'of', 'toto', 'be', 'be', 'toto']
    En plus délié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> words = []
    >>> for line in data.splitlines():
    ...     words.append(line.split()[-1])
    ...
    >>> words
    ['toto', 'titi', 'of', 'toto', 'be', 'be', 'toto']
    Pour compter, pas la peine de se fatiguer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from collections import Counter
    >>> counter = Counter(words)
    >>> counter
    Counter({'toto': 3, 'be': 2, 'titi': 1, 'of': 1})
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 41
    Par défaut
    Je vous remercie énormément c'est exactement ce que je veux comme resultat mais j'ai besoin de faire un code de coup je peux pas travailler sur la console, je sais pas si ces commandes marcherons également sur un code ou pas ! C'est ce que j'essaye de faire en faisant des petites modifications mais honnêtement j'arrive pas à m'en sortir

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 255
    Par défaut
    hello,
    si c'est la lecture du fichier dans une chaîne qui te pose problème tu peux faire comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open (r"f:\temp\data.txt", "r") as myfile:
        data=myfile.read()
    Ami calmant, J.P

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par Derfh Voir le message
    Je vous remercie énormément c'est exactement ce que je veux comme resultat mais j'ai besoin de faire un code de coup je peux pas travailler sur la console, je sais pas si ces commandes marcherons également sur un code ou pas ! C'est ce que j'essaye de faire en faisant des petites modifications mais honnêtement j'arrive pas à m'en sortir
    Si vous ne savez pas encore la différence et les similitudes entre des instructions tapées à la console et celles d'un script, c'est que vous avez sauté l'apprentissage des bases.
    Si je potasse, à votre place, les premiers chapitres du tutoriels Python, le "swinnen" vous ne seriez pas plus avancé.

    Désolé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Comment récuperer et manipuler la sortie de TreeTagger avec Python ?
    Par Derfh dans le forum Statistiques, Data Mining et Data Science
    Réponses: 0
    Dernier message: 30/12/2014, 14h56
  2. [AJAX] Comment recuperer la propriété d'un objet Java avec XmlHttpRequest ?
    Par framus.class dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/02/2008, 10h58
  3. Réponses: 2
    Dernier message: 19/12/2005, 14h15
  4. comment recuperer le nom des champs ?????
    Par e11137 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/01/2004, 11h00
  5. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 10h40

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