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 :

Manipulation de fichiers texte


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut Manipulation de fichiers texte
    Bonsoir à tous,

    Avant tout, je précise que je suis débutante sur Python, et en programmation en général... Mes connaissances sont loin d'être optimales !

    Bref, je résume ce qui me pose problème ce soir. Je fais des études de linguistique et j'aimerais utiliser Python pour faire certains calculs sur des textes (par exemple la fréquence de certains mots, des moyennes sur le nombre de mots par phrase, etc...).

    Je sais comment ouvrir un fichier texte dans Python, mais j'ai des soucis en ce qui concerne l'application d'une fonction ou d'un script au contenu de ce fichier.
    Je ne sais pas s'il existe une possibilité de faire cela directement, je vous montre comment j'ai procédé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import codecs
    f=codecs.open('texte2.txt',encoding='iso-8859-1')
    data=f.read()
    J'ai donc essayé comme précédent en transformant le contenu de mon fichier en une chaine pour pouvoir agir dessus.
    Mais j'ai l'impression que cette chaine est bien trop grosse pour pouvoir être manipulée et à chaque fois que je tente une opération dessus le mode interactif de Python plante totalement et ne répond plus... (-> par exemple un data.split() ou pour couper le texte en utilisant des motifs)

    Pour avoir une idée de la longueur du genre de texte que j'utilise :
    http://www.gutenberg.org/files/11494/11494-8.txt

    Voilà donc je ne sais pas trop s'il y a un moyen de faire cela plus simplement sans passer par une chaine ?

    En tout cas désolée d'avance si ma question vous parait simpliste mais j'avoue que j'ai cherché dans différents cours et que dès qu'il s'agit de manipulation de fichiers les tutos parlent de suite choses très complexes et non pas de simple textes... Donc il n'est pas évident de trouver une réponse

    Merci d'avance pour votre aide,


    Sycosis

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Je pense que pour ce genre de fichier il serait intéressant de lire ligne par ligne, il est en effet assez volumineux.

    Au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import codecs
    f=codecs.open('texte2.txt',encoding='iso-8859-1')
    for ligne in f:
        #faire quelque chose avec la ligne

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Le fichier n'est pas si énorme que ça; même en le lisant en un bloc ça ne devrait pas être aussi lent. words = data.split() sur les données du fichier est presque instantané chez moi. Mais peut être demandes-tu d'afficher le résultat, ce qui très lent car les fonctions d'affichage sont lentes (et de toute façon, à quoi sert d'afficher une liste de 48276 chaînes ?).

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Merci pour vos réponses.

    Actuellement je cherche à segmenter le texte en mots et en phrases...
    J'aurais besoin d'afficher les résultats, oui.

    Je voudrais utiliser un script de ce genre, pour les phrases par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	import re
    	delim=r'!|\?|\.'
    	p=re.compile(delim)
            mots=p.split(chaine)
    Le souci c'est que je sais le faire sur une chaine, basique mais pour faire en sorte de le faire sur tout mon fichier en créant une boucle pour qu'il soit parcouru ligne par ligne si cela est nécessaire, je sèche...

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Citation Envoyé par Sycosis Voir le message
    J'aurais besoin d'afficher les résultats, oui.
    A cette étape ? Je ne vois pas l'intérêt. Si c'est pour vérifier que la découpe se passe comme prévu, tu peux en afficher juste une partie. Ou alors mettre au point le programme en utilisant un fichier de petite taille et le remplacer par le fichier complet une fois qu'il est terminé.

    Le code avec l'expression régulière ci-dessus tourne très bien avec la chaîne "basique" data de ton premier post. Le faire ligne par ligne, dans ce cas-ci, va compliquer les choses vu qu'une phrase peut être contenue sur plusieurs lignes.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Ou alors mettre au point le programme en utilisant un fichier de petite taille et le remplacer par le fichier complet une fois qu'il est terminé.
    Je pense que je vais faire cela et que ça sera plus pratique :p

    Maintenant, j'ai un autre challenge qui m'attend : J'aimerais calculer la fréquence des mots dans le texte pour obtenir une liste des mots qui reviennent plusieurs fois dans le texte (par exemple 5, 10 ou 15 fois, je pense que j'ajusterai le seuil ensuite pour pouvoir avoir le nombre de mots qui me convient).

    Et là... j'avoue que je ne sais vraiment pas par où m'y prendre pour commencer.
    J'ai déjà utilisé des fonctions comme count dans des exercices mais on compte toujours quelque chose en particulier : exemple le nombre de "a".
    Mais là pour compter les mots qui reviennent !

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Pour compter le nombre d'occurrences de chaque mot, il faut une structure de données qui te permet d'associer un nombre (le compteur) à un mot donné. La structure qui s'impose dans ce cas-là en Python est le dictionnaire, avec comme clés les mots et comme valeurs les compteurs. Tu parcours ta liste de mots; pour chaque mot, s'il n'est pas encore dans le dictionnaire tu l'ajoutes en initialisant le compteur à 1; s'il y est déjà tu incrémentes le compteur (une implémentation alternative est d'utiliser la classe defaultdict dans le module collections).

    Tu pourrais être intéressée par cette discussion, qui concernait aussi la linguistique: http://www.developpez.net/forums/d65...-fichier-long/. Cela peut te paraître un peu compliqué pour l'instant, mais il y a un tas de manipulations intéressantes de listes et de dictionnaires pour résoudre le genre de problèmes auxquels tu seras confrontée dans cette discussion.

Discussions similaires

  1. Manipulation de fichiers textes
    Par chlours dans le forum C++
    Réponses: 3
    Dernier message: 22/01/2008, 13h33
  2. Réponses: 2
    Dernier message: 07/10/2007, 19h52
  3. [Débutant] Manipulation de fichier texte ?
    Par Badaboumpanpan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/06/2007, 10h42
  4. Manipulation de fichiers textes - fonction
    Par kromartien dans le forum C
    Réponses: 2
    Dernier message: 11/06/2007, 00h02
  5. manipuler un fichier texte
    Par bassidi meryeme dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2005, 00h23

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