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 :

une fonction python qui recense tous les mots utilisés dans l’ensemble de la liste de fichier donné


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Par défaut une fonction python qui recense tous les mots utilisés dans l’ensemble de la liste de fichier donné
    Bonjour, je cherche à ecrire une fonction sur python qui prend en parametre une liste de fichier et qui compte le nombre d'apparition de tous les mots présent dans la liste de fichier donnée
    le resultat de cette fonction doit etre une liste dont chaque élément est une liste de plusieurs éléments :
    le premier est le mot utilisé, le deuxième élément est le nombre d’utilisation de ce mot
    dans le premier fichier, le troisième est le nombre d’utilisations de ce mot dans le
    deuxième fichier…

    Le code que j'ai pour le moment reussi a faire est:

    Code:

    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
    # -*- coding: utf-8 -*-
    """
    Created on Tue Dec 27 12:38:19 2022
     
    @author: Utilisateur
    """
    import re
    def mots_dans_fichiers(liste_fichiers):
     
        listefinale = []
        for i in range (len(liste_fichiers)):
            with open(liste_fichiers[i], 'r') as fd:
                azerty = fd.read()
                mot = re.split('[^a-zA-Z0-9_éèàêùçî]', azerty)
                dic = {}
                for i in mot:
                    if i != "":
                        if i in dic:
                            dic[i] += 1
                        else:
                            dic[i] =1
                for i in dic.items():
                    listefinale.append([i[0], i[1]])
        return listefinale
     
     
    def main ():
     
        print(mots_dans_fichiers(["C:\\Users\\Utilisateur\\Downloads\\test\\fichier.txt", "C:\\Users\\Utilisateur\\Downloads\\test\\fichier2.txt"]))
     
    if __name__ == '__main__':
        main()


    Le probleme de ce code est que cela me renvie le mot suivie du nombre d'occurence de ce mot dans tous les fichiers réunis. (le programme fait comme si la liste de fichiers etait un grand fichier texte.

    Merci de vos reponses
    Fichiers attachés Fichiers attachés
    • Type de fichier : py test.py (868 octets, 27 affichages)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par bien_ou_bien Voir le message
    Le probleme de ce code est que cela me renvie le mot suivie du nombre d'occurence de ce mot dans tous les fichiers réunis.
    non parce que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                for i in dic.items():
                    listefinale.append([i[0], i[1]])
    ajoute les tuples (mot, occurence) trouvé dans le fichier courant en ignorant ce qui a été fait par l'itération précédente.

    Pour le reste, si on veut: "une liste dont chaque élément est une liste de plusieurs éléments :
    le premier est le mot utilisé, le deuxième élément est le nombre d’utilisation de ce mot
    dans le premier fichier, le troisième est le nombre d’utilisations de ce mot dans le
    deuxième fichier…"

    déjà un dictionnaire dont les clefs seraient les mots associés à une liste d'entiers ou l'entier en ième position reflète le nombre d’occurrences du mot dans le ième fichier semblerait plus approprié ... mais c'est vous qui codez.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Par défaut
    bonjour merci de votre réponse, mais je suis débutant, il y a donc quelque chose que je ne comprends pas dans votre réponse parce que quand je dis "Le probleme de ce code est que cela me renvie le mot suivie du nombre d'occurence de ce mot dans tous les fichiers réunis." vous m'avez repondu que non alors que quand j'exécute le prgramme, c'est bien cela qui se passe.
    aussi pour
    déjà un dictionnaire dont les clefs seraient les mots associés à une liste d'entiers ou l'entier en ième position reflète le nombre d’occurrences du mot dans le ième fichier semblerait plus approprié ... mais c'est vous qui codez.
    est ce que vous voulez dire qu'il faudrait rajouter un dictionnaire pour chaque nouveau fichier grace a une boucle ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par bien_ou_bien Voir le message
    aussi pour est ce que vous voulez dire qu'il faudrait rajouter un dictionnaire pour chaque nouveau fichier grace a une boucle ?
    Vous devez prendre une feuille de papier et réfléchir en gribouillant dessus avec un crayon avant de coder.

    Si on part d'un seul fichier contenant A B A, on devrait sortir [A, 2], [B, 1].
    Si le deuxième fichier contient B C C, on devrait avoir [A, 2, 0], [B, 1, 1] [C, 0, 2]
    Et si vous ne voyez pas qu'en récupérant le B, chercher une s/liste commençant par B ou la créer sera plus facile avec un dictionnaire qu'avec une liste...

    Citation Envoyé par bien_ou_bien Voir le message
    mais je suis débutant, il y a donc quelque chose que je ne comprends pas dans votre réponse parce que quand je dis "Le probleme de ce code est que cela me renvie le mot suivie du nombre d'occurence de ce mot dans tous les fichiers réunis." vous m'avez repondu que non alors que quand j'exécute le prgramme, c'est bien cela qui se passe.
    Si vous ne comprenez pas le code que vous avez écrit... est ce que vous comprenez ce que vous racontez en français? Et pour apprendre le français, vous souvenez vous être allé voir parent/maîtresse pour leur demander de vous expliquer le sens de ce que vous aviez écrit ?

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Par défaut
    Si vous ne comprenez pas le code que vous avez écrit... est ce que vous comprenez ce que vous racontez en français? Et pour apprendre le français, vous souvenez vous être allé voir parent/maîtresse pour leur demander de vous expliquer le sens de ce que vous aviez écrit ?
    Vous ne comprenez pas ce que j'ai dit. Je comprends le code que j'ai saisi dans le tout premier message et pourquoi ce code ne fait pas ce que je veux. En fait je suis allé chercher de l'aide sur ce forum car je n'ai justement aucune idée de comment régler le problème.


    Si on part d'un seul fichier contenant A B A, on devrait sortir [A, 2], [B, 1].
    Si le deuxième fichier contient B C C, on devrait avoir [A, 2, 0], [B, 1, 1] [C, 0, 2]
    Et si vous ne voyez pas qu'en récupérant le B, chercher une s/liste commençant par B ou la créer sera plus facile avec un dictionnaire qu'avec une liste..
    Merci de l'aide

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjoiur
    Citation Envoyé par bien_ou_bien Voir le message
    En fait je suis allé chercher de l'aide sur ce forum car je n'ai justement aucune idée de comment régler le problème.
    L'informatique en général et l'algorithmique en particulier existaient bien avant les forums. Concevoir un algo c'est d'abord le réfléchir, au besoin en gribouillant sur une feuille comme l'a dit wiztricks.
    Toi tu es parti bille en tête, sans vraiment de plan organisé, codant un peu comme ça te vient.

    Déjà traiter n éléments c'est traiter un élément n fois. Autrement dit, faire une fonction qui compte les mots dans "tous les fichiers" c'est faire une fonction qui compte les mots dans un fichier, plus facile à mettre au point et à tester ; puis une fois bien réglée, l'appliquer sur chacun des fichiers en récupérant le résultat et en le concaténant à la liste de tous les résultats.
    Ainsi en reprenant l'exemple de wiztricks, avec ABA la fonction retourne ["A", 2], ["B", 1] qu'on concatène au résultat final contenant alors {"A" : [2,], "B" : [1,], "C" : [0,]}. Puis avec BCC la fonction retourne ["B", 1], ["C", 2] ce qui, si on le mixe correctement, donne alors le résultat {"A" : [2, 0,], "B" : [1, 1,], "C" : [0, 2]}.

    Exemple
    Code python : 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
    #!/usr/bin/env python
     
    def compterMots(fic):
    	return ((m, fic.count(m)) for m in set(fic))
     
    resultat=dict()
    for (i, r) in enumerate(
    	(
    		compterMots("ABA"),
    		compterMots("BCC"),
    	)
    ):
    	for (m, c) in r:
    		resultat.setdefault(m, [0,] * i).append(c)
     
    for v in resultat.values():
    	v.extend([0,] * (i - len(v) + 1))
     
    print(resultat)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Boucle sur tous les mots contenus dans un fichier texte
    Par medmaysais dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/03/2016, 09h56
  2. Réponses: 1
    Dernier message: 17/06/2013, 10h45
  3. Une méthode toString qui appelle tous les objets
    Par Invité dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 28/05/2013, 18h09
  4. Réponses: 8
    Dernier message: 19/10/2011, 19h03
  5. Réponses: 9
    Dernier message: 05/12/2007, 15h24

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