From e721b8a8e8e3ed1039639b29c1d889e2a25c5b2d Mon Sep 17 00:00:00 2001 From: 70246f4c8f01100bd046595e4e75f4bf <70246f4c8f01100bd046595e4e75f4bf@app-learninglab.inria.fr> Date: Sat, 18 Nov 2023 16:35:03 +0000 Subject: [PATCH] Update Journal_de_bord_fichier.md --- Journal_de_bord_fichier.md | 134 +++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/Journal_de_bord_fichier.md b/Journal_de_bord_fichier.md index 4fc3caf..fa8f712 100644 --- a/Journal_de_bord_fichier.md +++ b/Journal_de_bord_fichier.md @@ -163,3 +163,137 @@ Pour finir, j'ai fait un gros diagramme pour montrer la proportion des intervent Pour voir tous les graphiques, cf fichier jupyter. + + +# Mission 5: 21/11/23 + +Sujet 5 : Analyse des dialogues dans l'Avare de Molière. + +J'avais déjà un peu expliqué les étapes pour la mission 4, donc voici les étapes plus détaillées. + +Objectifs du projet: +- Classer les personnages selon la quantité de parole grâce à une analyse syntaxique du texte (scènes / répliques / mots). En particulier, quel est celui qui parle le plus ? Quel est celui qui ne parle pas du tout ? +- Réaliser un graphique qui montrera le nombre de mots que chaque acteur prononce dans chaque scène en s'inspirant de l'étude de l'Avare de Molière réalisée par l'OBVIL. + + +## Importation des données + +Pour utiliser n'importe quelle donnée, il faut évidemment y avoir accès. Il faut alors importer le texte de la pièce dans le code. + +D'abord on écrit l'URL du fichier texte: + +``` +url = "https://dramacode.github.io/markdown/moliere_avare.txt" +``` + +Puis il ouvre l'URL et lit le contenu en tant que fichier texte: + +``` +with urllib.request.urlopen(url) as response: + data = response.read() +``` +On appelle "texte" tous les caractères du texte en entier, c'est à dire le fichier texte qu'on utilisera: +``` +texte = io.StringIO(data.decode('utf-8')).read() % +``` + +## Compter le nombre d'interventions de chaque personnage + +La variable suivante est le compteur pour stocker le nombre d'occurrences du mot. Le "[]" signifie que c'est un tableau vide pour l'instant. +``` +compteurs_occurrences = [] +``` + +Les scènes de la pièce sont séparées par des "###" dans le fichier texte. Donc on va séparer les scènes en utilisant cela: le "split("###")" sépare donc les scènes: +``` +with urllib.request.urlopen(url) as response: + parties_texte = response.read().decode('utf-8').split('###')[1:] +``` +Une fois que les scènes sont séparées (on appellera une scène une "partie" à partir de maintenant), on doit trouver combien de fois chaque personnage parle pour chaque partie. + +On ne peut pas juste rechercher combien de fois le nom du personnage apparaît, puisqu'il peut être mentionné par un autre sans pour autant parler. + +Quand un personnage parle, il est noté **seul sur une ligne** de cette façon: **"HARPAGON."** (ne pas oublier le point). + +Donc on doit parcourir chaque partie du texte, et on compte combien de fois le mot apparaît seul sur une ligne: +``` +mot_a_chercher = "HARPAGON." # C'est un exemple, mais il faudra faire cela pour tous les personnages. Dans le code il y a une liste de tous les personnages commentés + + +for partie in parties_texte: # = "Pour chaque partie du texte:" + lignes = partie.strip().splitlines() # on divise la partie en lignes + compteur_occurrences = 0 # On définit le "Compteur d'occurrences" pour cette partie, il est égal à 0 pour l'instant. + + for ligne in lignes: # = "Pour chaque ligne de la partie en question:" + if ligne.strip() == mot_a_chercher: # Si le mot apparaît seul sur la ligne (par exemple si la ligne = "HARPAGON."), + compteur_occurrences += 1 # On ajoute +1 au décompte du total de combien de fois le mot apparaît dans la partie + + compteurs_occurrences.append(compteur_occurrences) # Ajoute le compteur d'occurrences de cette partie à la liste des compteurs +``` + +Si on veut savoir le résultat de cette boucle, on peut afficher le nombre d'occurrences du mot dans chaque partie du texte: + +``` +for i, occurrences in enumerate(compteurs_occurrences, start=1): # Pour chaque valeur de "compteurs_occurences", + print(f"Le mot '{mot_a_chercher}' apparaît {occurrences} fois dans la partie {i} du texte.") # Ecrire "Le mot 'HARPAGON.' apparaît 6 fois dans la partie 2 du texte." (exemple) +``` + + + +Autrement dit, le résultat du print est que le nom "HARPAGON." apparaît x fois dans la partie 1, y fois dans la partie 2, etc. + +Mais pour stocker ces résultats, on va les mettre dans des tableaux. + +# Stocker les données du nombre d'interventions de chaque personnage + +D'abord, on fait un tableau avec chaque personnage. Ce sera la base du tableau qu'on va construire. +``` +personnages=["HARPAGON", "VALÈRE", "ÉLISE", "CLÉANTE", "LA FLÈCHE", "MARIANE", "ANSELME", "FROSINE", "MAÎTRE SIMON", "MAÎTRE JACQUES", "BRINDAVOINE", "LA MERLUCHE", "LE COMMISSAIRE"] +``` +J'ai alors recopié les résultats des compteurs pour chaque personnage et chaque scène dans des tableaux sous cette forme: + + +Comme il y a 32 scènes et 13 personnages (14 mais yen a un qui parle pas), cela donne quelque chose comme ça (Les 0 signifient que les personnages ne parlent pas de toute la scène): + +Le premier chiffre correspond au nombre d'interventions d'Harpagon, le deuxième chiffre pour Valère, etc: +``` +partie1=[0,8,8,0,0,0,0,0,0,0,0,0,0] +partie2=[0,0,9,10,0,0,0,0,0,0,0,0,0] +partie3=[34,0,0,0,32,0,0,0,0,0,0,0,0] +partie4=[53,0,23,29,0,0,0,0,0,0,0,0,0] +partie5=[20,22,4,0,0,0,0,0,0,0,0,0,0] +partie6=[0,0,0,21,20,0,0,0,0,0,0,0,0] +partie7=[9,0,0,6,1,0,0,0,5,0,0,0,0] +partie8=[1,0,0,0,0,0,0,1,0,0,0,0,0] +partie9=[0,0,0,0,6,0,0,5,0,0,0,0,0] +partie10=[35,0,0,0,0,0,0,35,0,0,0,0,0] +partie11=[34,11,1,3,0,0,0,0,0,27,1,2,0] +partie12=[0,11,0,0,0,0,0,0,0,11,0,0,0] +partie13=[0,0,0,0,0,0,0,2,0,1,0,0,0] +partie14=[0,0,0,0,0,0,0,5,0,0,0,0,0] +partie15=[2,0,0,0,0,0,0,1,0,0,0,0,0] +partie16=[6,0,1,0,0,1,0,1,0,0,0,0,0] +partie17=[9,0,0,20,0,10,0,5,0,0,0,0,0] +partie18=[2,0,0,0,0,0,0,0,0,0,2,0,0] +partie19=[6,2,0,2,0,0,0,0,0,0,0,3,0] +partie20=[0,0,2,10,0,6,0,6,0,0,0,0,0] +partie21=[3,0,1,1,0,0,0,0,0,0,0,0,0] +partie22=[23,0,0,22,0,0,0,0,0,0,0,0,0] +partie23=[8,0,0,8,0,0,0,0,0,17,0,0,0] +partie24=[18,0,0,19,0,0,0,0,0,0,0,0,0] +partie25=[0,0,0,5,5,0,0,0,0,0,0,0,0] +partie26=[1,0,0,0,0,0,0,0,0,0,0,0,0] +partie27=[6,0,0,0,0,0,0,0,0,0,0,0,7] +partie28=[19,0,0,0,0,0,0,0,0,22,0,0,8] +partie29=[30,30,0,0,0,0,0,0,0,0,0,0,0] +partie30=[4,1,1,0,0,0,0,1,0,0,0,0,0] +partie31=[11,14,0,0,0,3,14,0,0,0,0,0,0] +partie32=[10,0,0,4,0,1,6,0,0,0,0,0,2] +``` + + + + + + + -- 2.18.1