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 :

liste des mots significatifs


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut liste des mots significatifs
    Bonjour,

    je cherche à créer une fonction qui me renvoie à partir d'un fichier texte, une liste des mots significatifs.
    Voilà le code que j'ai créé jusqu'à présent :
    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
    def signif(adresse_texte):
        mon_fichier = open("adresse_texte", "r",encoding='utf-8')
        contenu = mon_fichier.read()
        liste=contenu.split(" ")
        mots=[]
        for i in range(0,len(liste)):#on supprime les mots de moins de 3 lettres
            if len(liste[i])>=3:
                mots.append(liste[i])
        for i in range(0,len(mots)):
            for k in range(0,len(mots[i])):#on passe les majuscules en minuscules
                           if ord(mots[i][k])>=65 and ord(mots[i][k])<=90:
                               mots[i]=mots[i][0:k]+chr(ord(mots[i][k])+32)+mots[i][k+1:]
        for i in range(0,len(mots)):#on enlève les caractères autres que des lettres
            for k in range(0,len(mots[i])):
                           if ord(mots[i][k])>122 or ord(mots[i][k])<97:
                               mots[i]=mots[i][0:k]+" "+mots[i][k+1:]
        for i in range(0,len(mots)):#on enlève les mots peu significatifs
            if mots[i]=="est" or mots[i]=="ils" or mots[i]=="eux" or mots[i]=="une" or mots[i]=="les" or mots[i]=="des" or mots[i]=="non" or mots[i]=="que" or mots[i]=="qui":
                mots.remove(mots[i])
        return(mots)
    J'ai cependant encore des problèmes sur les indices (surement du au fait qu'on supprime des caractères au fur et à mesure) car il ne semble pas fonctionner avec tous mes fichiers.
    De plus je ne sais pas comment traiter les apostrophes, comme pour "c'est" qui revient assez souvent.
    Si vous avez des idées d'amélioration, ça me serait d'une grande aide.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Dans un premier temps, je vous suggérerai 2 choses:

    Remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for i in range(0,len(mots)):
            for k in range(0,len(mots[i])):
                          ...
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for mot in mots: 
            for c in mot:
                          ...
    ou par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for mot in mots: 
            for ix, c in enumerate(mot):
                          ...
    Si vous avez besoin de l'indice.

    Puis votre code contient plusieurs actions différentes.
    Plutôt que de tout aligner dans la même fonction, fabriquer une fonction par action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def action_n(mots):
         ....
         return mots
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def signif(adresse_texte):
        mon_fichier = open("adresse_texte", "r",encoding='utf-8')
        contenu = mon_fichier.read()
     
        mots = action_1(contenu.split(" "))
        mots = action_2(mots)
        ...
    note: trouvez des noms plus parlants pour action_1, action_2,....

    Cela fait, il vous sera plus facile de tester vos fonctions indépendamment les unes des autres.
    Et de les améliorer sans tout casser.

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

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Merci, après rectification la seule action qui ne marche pas est celle qui consiste à supprimer les mots peu significatifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def suprr(mots):
        for i in range(0,len(mots)):
            if mots[i]=="est" or mots[i]=="ils" or mots[i]=="eux" or mots[i]=="une" or mots[i]=="les" or mots[i]=="des" or mots[i]=="non" or mots[i]=="que" or mots[i]=="qui":
                mots.remove(mots[i])#on enlève les mots peu significatifs
        return(mots)
    Je vois bien que le problème vient du fait que la longueur de la liste change au fur et à mesure qu'on supprime des mots, mais je ne sais pas comment le résoudre.

    Merci d'avance pour votre aide.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par info-python Voir le message
    Je vois bien que le problème vient du fait que la longueur de la liste change au fur et à mesure qu'on supprime des mots, mais je ne sais pas comment le résoudre.
    Pourquoi ne pas créer une nouvelle liste ne contenant que les mots "attendus"?

    D'ailleurs, maintenant que vous avez poussé ces quelques lignes dans la fonction suppr, avez vous le choix?
    L'appelant peut s'en servir en faisant:
    Mais il pourra aussi vouloir garder l'ancienne liste pour faire autre chose:
    Comme l'appelant c'est vous, vous pourriez dire "oui, mais je sais que...".
    Nan, apprenez à écrire des "fonctions pures" comme vous avez appris à conjuguer les verbes du premier groupe.

    Ne trouvez vous pas pénible d'écrire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            if mots[i]=="est" or mots[i]=="ils" or mots[i]=="eux" or mots[i]=="une" or mots[i]=="les" or mots[i]=="des" or mots[i]=="non" or mots[i]=="que" or mots[i]=="qui":
    Un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a_supprimer = "est", "ils",....
    if mot not in a_supprimer: 
          ...
    est quand même plus fluide, lisible,...

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

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Quelques questions supplémentaires : que voulez vous faire avec votre liste de mots ? Ne serait-il pas plus approprié d'utiliser un ensemble (set) de mots ou un dictionnaire (dict) du nombre d’occurrence de chaque mot ? Avec ces structures de données on peut plus aisément retirer certains éléments, et souvent ces informations suffisent. Avez vous réellement besoin de l'ordre des mots ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Quelques questions supplémentaires : que voulez vous faire avec votre liste de mots ? Ne serait-il pas plus approprié d'utiliser un ensemble (set) de mots ou un dictionnaire (dict) du nombre d’occurrence de chaque mot ? Avec ces structures de données on peut plus aisément retirer certains éléments, et souvent ces informations suffisent. Avez vous réellement besoin de l'ordre des mots ?
    Question intéressante mais visiblement le PO bataille dans la découverte des boucles for, la création de fonctions,...
    Dire à un gamin qui s'applique à écrire ses premiers mots que son histoire ne mérite pas un prix de littérature est une évidence. Pourquoi le dire? C'est pas le sujet.

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

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Question intéressante mais visiblement le PO bataille dans la découverte des boucles for, la création de fonctions,...
    Dire à un gamin qui s'applique à écrire ses premiers mots que son histoire ne mérite pas un prix de littérature est une évidence. Pourquoi le dire? C'est pas le sujet.
    Certes, mais l'un des avantages de Python, c'est tout de même qu'utiliser ces quelques structures de donnée de base est relativement aisé, en tout cas pas bien plus difficile que d'utiliser les boucles et les listes. De plus ces questions valent la peine de se les poser dans l'absolu selon l'utilisation qu'il va avoir de cette liste de mot (évidemment, si c'est juste un exercice...) et cela info-python est bien capable de le dire, en dehors de ses connaissances en Python (notez qu'une bonne partie de ses erreurs ressemblent à des habitudes venues du C ou autre langage sans itérateurs).

    Au cas où vous l'ayez lu ainsi, je précise que mon message n'était nullement un reproche mais simplement une invitation à penser également à la finalité du code qu'à ses détails (qui semblent en bonne voie d'amélioration avec ton aide).

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    merci pour tous vos conseils, j'ai créé comme vous me l'aviez suggéré une liste des mots à supprimer, puis j'ai créé une nouvelle liste contenant uniquement les mots attendus. C'est bien plus lisible comme ça et aussi bien plus simple je dois dire.
    Mon code n'a pas pour ambition d'être optimal puisque je débute (pour l'instant il fonctionne c'est l'essentiel), et il s'agit d'un exercice dont le but est d'obtenir les mots significatifs d'une page de texte, donc en gardant l'ordre des mots.
    Mais merci encore pour toutes vos suggestions.

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

Discussions similaires

  1. Liste des mots français pour application JAVA
    Par elitost dans le forum Général Java
    Réponses: 15
    Dernier message: 16/08/2010, 15h57
  2. Réponses: 1
    Dernier message: 12/10/2006, 16h48
  3. Liste des mots-clefs de MySQL
    Par EvilAngel dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 18/08/2006, 15h32
  4. Liste des mots clés c++
    Par CyberCouf dans le forum C++
    Réponses: 4
    Dernier message: 08/12/2005, 00h13

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