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 :

faire des manipulations sur un texte


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut faire des manipulations sur un texte
    Bonjour à tous!!
    Je serai très heureuse si quelqu'un pouvait m'aider...
    Voilà, j'ai fais beaucoup de manipulations sur mon texte mais je n'arrive pas à trouver comment écrire une fonction qui donne le nombre de mots qui n'apparaissent qu'une seule fois et leur pourcentage dans le texte??
    Voilà, je croise les doigts pour avoir de l'aide parce que je fouille un peu partout et malgré tous mes essais, j'en suis toujours au même point.
    MERCIIIIIII

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Je pense que tu peux utiliser dans ton cas la fonction count

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_texte.count("mardi") # te donnera le nombre de mardi dans mon_texte.
    Maintenant si tu veux savoir quels sont les mots que l'on ne retrouve qu'une seule fois dans un texte, je te laisse un peu réfléchir.
    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)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    oui j'ai utilisé cette fonction pour une manipulation précédente, merci.
    Mais là où j'ai séché c'était pour le nombre de mots n'apparaissant qu'une seule fois avec leur pourcentage dans le texte.
    J'ai pensé peut-être:

    if fdist.freq (mots) = 1
    print mots

    Mais ça ne fonctionne pas donc je vais continuer à chercher pour le moment...
    MERCI beaucoup en tout cas pour votre aide

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Une fonction simple que j'ai créé, mais qui doit être affiné, quoique, peut-être que cela te suffira, à toi de le dire...

    Ce que j'ai compris, c'est que tu veux qu'on te retourne les mots qui se trouvent dans le texte 1 seule fois.

    Voici un code non optimisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def compte_mots(texte):
        for mots in texte.split():
            if texte.count(mots)==1:
                print mots
            else : pass
    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)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    AH OUI!! merci beaucoup, ca me va très bien... Encore merci et a bientôt (même si j'espère ne pas avoir d'autres problèmes!) Merci pour ton aide

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    même si j'espère ne pas avoir d'autres problèmes
    Lesquels?
    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)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Salut !

    Un petit peu d'aide et une remarque pour fred1599.

    Aides :
    1. si tu ne veux pas tenir compte de la casse (i.e. si pour ton problème "Toto" et "toto" et "TOTO" sont le même mot), il faudra utiliser la méthode lower ;
    2. la fonction len permet de compter le nombre total d'éléments d'une séquence, cela te donnera le diviseur à utiliser pour calculer ton pourcentage.

    @fred1599 :
    Un else: pass ??
    Pour info (et sûrement + pour debutante en galere que pour fred1599), ce else: pass ne fait rien. Donc, pas la peine de l'écrire.

    Si je résume tout ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def motsuniques(texte, ignorecasse=True):
        if ignorecasse:
            texte = texte.lower()
        mots = texte.split()
        # Ici, je passe la longueur en float pour éviter d'obtenir un résultat
        # toujours égal à 0. Cela n'est pas nécessaire pour Python 3.
        total = float(len(mots))
        for mot in mots:
            if mots.count(mot) == 1:
                # Attention, la syntaxe de print n'est pas la même pour Python 3.
                print mot, 1 / total

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Un else: pass ??
    Je suis débutant, j'ai appris comme ça, même si on me dit que ça ne sert à rien, c'est un réflexe, une manie, une erreur (possible), je ne peux pas m'en passer. Après un if je met un else, j'y peux rien.

    Pour ton code :

    Arf, je l'avais prévu, mais j'attendais sa réponse concernant son problème, et j'ajouterais un autre problème qui dans ton code n'est pas prévu : la ponctuation.

    Quand tu splittes, la ponctuation se greffe dans ta liste de mots et du coup

    [bonjour] et [bonjour,] seront deux mots différents.

    Il est évident que j'avais déjà prévu tout cela, mais j'attendais que la difficulté proposée par débutante augmente afin d'y aller par palier.

    La fonction len pour calculer le pourcentage était prévu aussi, mais apparement je ne pense pas que ça soit le plus compliqué. D'ailleurs plus de questions concernant ce sujet.

    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)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Quand tu splittes, la ponctuation se greffe dans ta liste de mots et du coup

    [bonjour] et [bonjour,] seront deux mots différents.
    Bien vu ! Et j'ai pas de réponse à ce problème (enfin, j'ai pas le temps de m'y coller).
    ...
    En fait, si, je vois comment faire... mais je ne le dirais pas

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    Merci nardo, mon texte est deja une liste ( appelée l ) et je considère pour le moment que 'de' et 'De' ou 'DE sont tous des mots différents (on va commencer au plus facile...).

    donc dois je faire comme ceci (pour l'instant sans le pourcentage que je calculerai après): donc juste pour avoir le nombre de mots uniques:

    def motsuniques(l):
    mots = l.split()
    for mot in mots:
    if mots.count(mot)==1:
    print mot

    en fait ca marche pas donc j'ai du faire un mauvais truc quelque part.
    Dsl je dois etre vraiment nulle pour l'instant (mais il y a un début à tout...)
    Merci

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    PS: je n'ai pas mis les indentations la mais je les ai dans mon programme Python...

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par debutante en galere Voir le message
    en fait ca marche pas donc j'ai du faire un mauvais truc quelque part.
    Et tu as une erreur du style 'list' object has no attribute 'split' ? Tout est dit !

  13. #13
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Ba moi je vais le dire

    Voila un nouveau code prévu pour éviter les erreurs avec la ponctuation, puis la casse comme tu l'avais déjà précisé Nardo précédemment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
     
    def compte_mots(texte):
        for ponct in ponctuation:
            texte=texte.replace(ponct, "")
        texte=texte.lower()
        for mots in texte.split():
            if texte.count(mots)==1:
                print mots
     
     
    ponctuation=[",", ".", ";", "!", "?", ":"]
    Pour le pourcentage c'est un calcul simple, en utilisant la fonction len

    Si tu n'y arrives pas débutante moi ou quelqu'un d'autre l'ajouterait sûrement à ton code.
    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)

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        for ponct in ponctuation:
            texte=texte.replace(ponct, "")
    Juste pour pinailler :

    1. Python a déjà la liste des signes de ponctuation ;
    2. il vaut mieux remplacer un signe de ponctuation par un blanc, ce qui permet d'éviter de coller 2 mots par erreur si les règles d'écriture ne sont pas respectées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
     
    from string import punctuation
     
    def compte_mots(texte):
        for signe in punctuation:
            texte = texte.replace(signe, " ")
    # Le reste de la fonction comme avant
     
    # Et on supprime la définition de ponctuation.
    Après, on s'emballe un peu, vu que son programme a comme entrée une liste de mots. Mais ça fait tellement de bien !

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    Bon malheureusement j'y arrive vraiment pas...
    Je me fiche de la ponctuation et des majuscules, donc dois-je faire seulement:

    def motsuniques(liste):
    for mots in liste:
    if liste.count(mots)==1:
    print mots
    return motsuniques

    (avec indentations biensur)
    ??
    non parce qu'il me semble qu'on doit utiliser return après une def??
    Dsl je crois être sur le point d'abandonner...
    (Ps: je pense que pour le pourcentage, ca ira mais c'est vraiment cette question qui me bloque...)
    Encore merci

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Après, on s'emballe un peu, vu que son programme a comme entrée une liste de mots. Mais ça fait tellement de bien !
    En effet

    Mais elle a bien parlé de texte au départ, c'est pour ça que je ne suis plus de trop actuellement.

    Pour une liste, il y a moins de travail du coup.

    Pour la ponctuation, idem je le sais, quelle tartuffe, j'y pense jamais. Il y a plus d'idées dans 2 têtes que dans une

    Je crois qu'elle à déjà ce qu'il faut. Il manque plus que le résolu, à moins que...
    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)

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    Bon malheureusement j'y arrive vraiment pas...
    Je me fiche de la ponctuation et des majuscules, donc dois-je faire seulement:

    def motsuniques(liste):
    for mots in liste:
    if liste.count(mots)==1:
    print mots
    return motsuniques

    (avec indentations biensur)
    ??
    non parce qu'il me semble qu'on doit utiliser return après une def??
    Dsl je crois être sur le point d'abandonner...
    (Ps: je pense que pour le pourcentage, ca ira mais c'est vraiment cette question qui me bloque...) Mai ça a l'air tellement simple pour vous, c'est assez énervant d'ailleurs (vivement que j'en sois à votre niveau!!!)
    Encore merci

  18. #18
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    return motsuniques
    Ton problème est là !

    Ton code devrait être celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def motsuniques(liste):
        for mots in liste:
            if liste.count(mots)==1:
                print mots
     
    ta_liste=["bonjour", "coucou", "bonjour"]
    motsuniques(ta_liste) # test de ta fonction avec ta_liste
    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)

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Points : 2
    Points
    2
    Par défaut
    OK là j'ai compris!!! maintenat dernière question si tu as le temps... (dsl)
    Cette manip me donne la liste des mots uniques mais en fait moi je recherche le nombre de mots uniques....
    Y a t-il une solution à partir de là?

  20. #20
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Ta fonction se transforme comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #! /usr/bin/python
    # -*- coding:utf-8 -*-
     
    def motsuniques(liste):
        for mots in liste:
            if liste.count(mots)==1:
                liste_compteur.append(mots)
        print "il y a %d mot(s) unique(s)" %(len(liste_compteur))
     
    listes=["bonjour", "coucou", "bonjour"]
    liste_compteur=[] # créé une liste vide
     
    motsuniques(listes)
    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)

Discussions similaires

  1. [Toutes versions] Faire des operations sur des zones de texte d'un formulaire
    Par lolo25 dans le forum IHM
    Réponses: 1
    Dernier message: 01/04/2009, 14h37
  2. Faire des retry sur des erreurs FTP
    Par fejjal dans le forum Réseau
    Réponses: 4
    Dernier message: 16/02/2006, 00h34
  3. Faire des modifs sur une sheet excel Read Only via VBA
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 19h02
  4. Commande date. Faire des opération sur l'heure?
    Par fidififouille dans le forum Linux
    Réponses: 9
    Dernier message: 23/08/2004, 16h16
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 11h31

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