add work on file parsing taking into account specific cases encountered in the...

add work on file parsing taking into account specific cases encountered in the text of the theatre piece
parent cf43cd50
...@@ -150,6 +150,29 @@ ...@@ -150,6 +150,29 @@
"\"" "\""
] ]
}, },
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nota Bene: en continuant à travailler sur le sujet et en approfdondissant le parcours du texte, on peut se rendre compte qu'il y a parfois quelques indications de mise en scène qui viennent perturber ce schéma. Différente options s'offrent à nous:\n",
"- modifier le texte afin d'utiliser les mécanismes du markdown et mettre ces indications en italiques ou en gras --> utilisations de balises permettant de reconnaître facilement ces éléments\n",
"- ou bien repérer les numéros de ces lignes car il n'y en pas beaucoup afin de les ignorer (il nous faudra alors un moyen de connaître dans les fonctions d'analyse le numéro de la ligne du fichier en cours d'analyse.)\n",
"- pour être plus générique, l'idéal serait d'avoir un traitement intelligent, un réseaux de neurones par exemple spécialisé dans l'analyse du langage pour identifier ces éléments de mis en scène.\n",
"De plus les lignes indiquant la fin des actes sont également à ignorer en tant que réplique. Et pour finir, il y a au moins une scène ne donnant pas la liste des personnages, Harpagon étant le seul protagoniste, il faudra prendre en compte ce cas."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Déclaration des numéros de lignes à ignorer\n",
"playInstructionsLineNumbersList = [201, 204, 213, 251, 272, 384, 623, 782, 815, 1280, 1283,\\\n",
" 1342, 1369, 1411, 1527, 1610, 1633, 1665, 1866, 1874, 1970, \\\n",
" 2299, 2319, 2327, 2357, 2521, 2524]"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": 5,
...@@ -177,11 +200,11 @@ ...@@ -177,11 +200,11 @@
], ],
"source": [ "source": [
"# Chaîne de caractère indiquant le début d'analyse et de récupération des personnages\n", "# Chaîne de caractère indiquant le début d'analyse et de récupération des personnages\n",
"persoCaptureSTartLine = \"# ACTEURS.\"\n", "persoCaptureStartLine = \"# ACTEURS.\"\n",
"# L'expression régulière suivante permet de valider qu'une chaîne de caractère\n", "# L'expression régulière suivante permet de valider qu'une chaîne de caractère\n",
"# contenue dans une ligne lue correspond à la ligne précédant la définition\n", "# contenue dans une ligne lue correspond à la ligne précédant la définition\n",
"# de la liste des personnages\n", "# de la liste des personnages\n",
"m = re.search('(?<=# )ACTEURS\\.$', persoCaptureSTartLine)\n", "m = re.search('(?<=# )ACTEURS\\.$', persoCaptureStartLine)\n",
"m.group(0)" "m.group(0)"
] ]
}, },
...@@ -230,7 +253,7 @@ ...@@ -230,7 +253,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 23, "execution_count": 14,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -241,19 +264,23 @@ ...@@ -241,19 +264,23 @@
" \"\"\"\n", " \"\"\"\n",
" Fonction remplissant un dictionnaire d'entrée avec la liste\n", " Fonction remplissant un dictionnaire d'entrée avec la liste\n",
" des personnages de la pièce de théâtre lue dans le fichier\n", " des personnages de la pièce de théâtre lue dans le fichier\n",
" passé en entrée.\n", " passé en entrée. On considère que le fichier en entrée est lu\n",
" à partir du début, de sa première ligne.\n",
" \n", " \n",
" :param fileToAnalyse: pointeur obtenu par ouverture d'un fichier\n", " :param fileToAnalyse: pointeur obtenu par ouverture d'un fichier\n",
" :param emptyPersoDict: dictionnaire à remplir par la fonction\n", " :param emptyPersoDict: dictionnaire à remplir par la fonction\n",
" :return: aucun retour\n", " :return: numéro de la dernière ligne lue\n",
" \"\"\"\n", " \"\"\"\n",
" lineNum = 0\n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\n",
" lineNum += 1\n",
" isStartPersoListLine = False\n", " isStartPersoListLine = False\n",
" while (currentLine and not isStartPersoListLine):\n", " while (currentLine and not isStartPersoListLine):\n",
" m = re.search('(?<=# )ACTEURS\\.$', currentLine)\n", " m = re.search('(?<=# )ACTEURS\\.$', currentLine)\n",
" if m is not None:\n", " if m is not None:\n",
" isStartPersoListLine = True\n", " isStartPersoListLine = True\n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\n",
" lineNum += 1\n",
" \n", " \n",
" # La lecture s'est arrêtée car la ligne de début de définition de la liste des personnages a été rencontrée.\n", " # La lecture s'est arrêtée car la ligne de début de définition de la liste des personnages a été rencontrée.\n",
" # Nous avons néanmoins lu la ligne suivante qui est obligatoirement un personnage.\n", " # Nous avons néanmoins lu la ligne suivante qui est obligatoirement un personnage.\n",
...@@ -303,25 +330,55 @@ ...@@ -303,25 +330,55 @@
" # global des personnages\n", " # global des personnages\n",
" emptyPersoDict[parts[0]] = persoCaracs\n", " emptyPersoDict[parts[0]] = persoCaracs\n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\n",
" lineNum += 1\n",
" m = re.search('(?<=\\s–\\s)[A-ZÀ-Ÿ]{1}[a-zA-ZÀ-ÿ\\s,\\']+', currentLine)\n", " m = re.search('(?<=\\s–\\s)[A-ZÀ-Ÿ]{1}[a-zA-ZÀ-ÿ\\s,\\']+', currentLine)\n",
" if m is not None:\n", " if m is not None:\n",
" extractedString = m.group(0)\n", " extractedString = m.group(0)\n",
" else:\n", " else:\n",
" isAPersoLine = False\n", " isAPersoLine = False\n",
" \n", " \n",
" # Fin de la boucle while" " # Fin de la boucle while\n",
" \n",
" return lineNum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Définition de la fonction permettant de compter le nombre de mots d'une ligne constituant une réplique."
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 35, "execution_count": 13,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# Fonction qui permet d'extraire la liste des personnages\n", "def count_words(speechLine):\n",
"# de la stocker dans un dictionnaire en parcourant ligne par ligne\n", " \"\"\"\n",
"# un fichier texte passé en entrée.\n", " Fonction qui compte le nombre de mots contenus dans une ligne de texte.\n",
"def generate_text_synthesis_data_table(fileToAnalyse, persoDict, emptyAnalysisDict):\n", " \n",
" :param speechLine: ligne de texte en entrée dont il faut compter le nombre de mots\n",
" :return: dataframe pandas dont le template est donné par le dictionnaire\n",
" \"\"\"\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Définition de la fonction principale d'analyse du fichier texte générant un tableau de données de synthèse."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def generate_text_synthesis_data_table(fileToAnalyse, persoDict, emptyAnalysisDict, lineNum):\n",
" \"\"\"\n", " \"\"\"\n",
" Fonction principale d'analyse du texte générant un dataframe pandas\n", " Fonction principale d'analyse du texte générant un dataframe pandas\n",
" de synthèse des informations permettant l'analyse globale.\n", " de synthèse des informations permettant l'analyse globale.\n",
...@@ -329,9 +386,11 @@ ...@@ -329,9 +386,11 @@
" :param fileToAnalyse: pointeur obtenu par ouverture d'un fichier\n", " :param fileToAnalyse: pointeur obtenu par ouverture d'un fichier\n",
" :param persoDict: dictionnaire donnant la liste des personnages de la pièce\n", " :param persoDict: dictionnaire donnant la liste des personnages de la pièce\n",
" :param emptyAnalysisDict: dictionnaire à remplir par la fonction\n", " :param emptyAnalysisDict: dictionnaire à remplir par la fonction\n",
" :param lineNum: numéro de le ligne à partir de laquelle nous commencons la lecture\n",
" :return: dataframe pandas dont le template est donné par le dictionnaire\n", " :return: dataframe pandas dont le template est donné par le dictionnaire\n",
" \"\"\"\n", " \"\"\"\n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\n",
" lineNum += 1\n",
" # Expression régulière de détection de déclaration des actes\n", " # Expression régulière de détection de déclaration des actes\n",
" # Ligne qui commence par exactement 2 #, ni plus ni moins, donc tout autre caractère qu'un #\n", " # Ligne qui commence par exactement 2 #, ni plus ni moins, donc tout autre caractère qu'un #\n",
" actLinePattern = re.compile('^#{2}[^#]')\n", " actLinePattern = re.compile('^#{2}[^#]')\n",
...@@ -344,6 +403,12 @@ ...@@ -344,6 +403,12 @@
" sceneNum = 0\n", " sceneNum = 0\n",
" # Variable indiquant si la ligne précédente déclare une scène\n", " # Variable indiquant si la ligne précédente déclare une scène\n",
" previousLineIsScene = False\n", " previousLineIsScene = False\n",
" # Variable contenant l'auteur courant de la réplique analysée\n",
" # Nous l'initialisons à la valeur vide None\n",
" currentAuthor = None\n",
" # Variable donnant le nombre de mots de la réplique courante\n",
" # analysée. On l'initialise à 0.\n",
" currentSpeechLen = 0\n",
" \n", " \n",
" # Boucle principale de parcours du fichier texte\n", " # Boucle principale de parcours du fichier texte\n",
" while (currentLine):\n", " while (currentLine):\n",
...@@ -359,8 +424,28 @@ ...@@ -359,8 +424,28 @@
" # Déclaration d'une scène de la pièce\n", " # Déclaration d'une scène de la pièce\n",
" # On incrémente le numéro de scène\n", " # On incrémente le numéro de scène\n",
" sceneNum += 1\n", " sceneNum += 1\n",
" # Si ce n'est pas la première scène de l'acte,\n",
" # il faut traiter le cas de la dernière réplique.\n",
" # On considère que l'auteur courant s'adresse forcément\n",
" # au dernier auteur enregistré.\n",
" if sceneNum > 1:\n",
" # Récupération du dernier élément de la colonne des auteurs\n",
" # qui est l'auteur de la réplique précédente\n",
" previousAuthor = emptyAnalysisDict['author'][-1]\n",
" emptyAnalysisDict['author'].append(currentAuthor)\n",
" emptyAnalysisDict['recipient'].append(previousAuthor)\n",
" emptyAnalysisDict['act'].append(actNum)\n",
" emptyAnalysisDict['scene'].append(sceneNum-1)\n",
" emptyAnalysisDict['speech_length'].append(currentSpeechLen)\n",
" # On met temporairement la variable\n",
" # previousLineIsScene à vrai pour indiquer\n",
" # que l'on a détecté le début d'une scène\n",
" previousLineIsScene = True\n", " previousLineIsScene = True\n",
" # On déclare la liste des protagonistes de la scène courante\n",
" scenePersoList = []\n", " scenePersoList = []\n",
" # On réinitialise les autres variables de l'auteur et de la taille d'une réplique\n",
" currentAuthor = None\n",
" currentSpeechLen = 0\n",
" else:\n", " else:\n",
" # La ligne courante est une ligne autre,\n", " # La ligne courante est une ligne autre,\n",
" # comme on a pu le voir dans l'exemple un peu plus haut\n", " # comme on a pu le voir dans l'exemple un peu plus haut\n",
...@@ -369,15 +454,73 @@ ...@@ -369,15 +454,73 @@
" # - une déclaration des personnages de la scène\n", " # - une déclaration des personnages de la scène\n",
" # - une identification de l'auteur de la réplique qui va suivre\n", " # - une identification de l'auteur de la réplique qui va suivre\n",
" # - une ligne composant une réplique\n", " # - une ligne composant une réplique\n",
" # - une ligne donnant des indications sur la mise en scène\n",
" # - une ligne indiquant la fin d'un acte\n",
" if not previousLineIsScene:\n", " if not previousLineIsScene:\n",
" pass\n", " # La ligne courante ne contient forcément pas la liste des protagonistes de la scène\n",
" # Testons si la ligne est vide auquel cas on peut quasiment passer directement à la suivante.\n",
" # Notons qu'une chaîne de caractères vide est interprêtées par python comme une valeur booléénne fausse\n",
" if not currentLine:\n",
" # La ligne n'est pas vide, c'est soit la déclaration de l'auteur d'une réplique,\n",
" # soit une ligne contenant constituant une réplique.\n",
" # On va donc traiter cette ligne soit de manière à identifier l'auteur qui,\n",
" # il faut le noter est le destinataire de la réplique de l'auteur précédent,\n",
" # soit de manière à compter le nombre de mots total d'une réplique afin\n",
" # de remplir avec toutes les informations glannées à cette étape\n",
" # de synthèse des données de la pièce.\n",
" # On peut noter également que l'on peut facilement différencier les lignes de répliques\n",
" # des lignes donnant l'auteur d'une réplique. En effet, les lignes de répliques commencent\n",
" # par une lettre majuscule tandis que les lignes donnant l'auteur d'une réplique\n",
" # commencent par des espaces.\n",
" if currentLine.startsWith(\" \"):\n",
" # La ligne commence avec un espace, elle déclare donc l'auteur d'une réplique\n",
" # on va parcourir la liste des protagonistes de la scène et identifier l'auteur\n",
" for perso in scenePersoList:\n",
" # On fait une recherche ignorant si les lettres sont en majuscules ou minuscules\n",
" # grâce à l'option passée à la fonction de recherche d'expression régulière\n",
" # re.IGNORECASE\n",
" m = re.search(perso, re.IGNORECASE)\n",
" if m:\n",
" # le résultats de la recherche n'est pas vide\n",
" # L'auteur est trouvé. Vérifions si quelqu'un\n",
" # a déjà parlé dans la scène auquel cas l'auteur\n",
" # courant est le destinataire de l'auteur précédent.\n",
" if currentAuthor is not None:\n",
" # Il y avait déjà un auteur d'une réplique, currentAuthor\n",
" # le nouvel auteur est donc aussi le destinataire de la réplique précédente.\n",
" # On peut maintenant remplir le dictionnaire pour la réplique précédente,\n",
" # car nous avons toutes les informations nécessaires sur celles-ci.\n",
" # Pour rappel, la structure du dictionnaire,\n",
" # {'author':[],'recipient':[],'act':[],'scene':[],'speech_length':[]}\n",
" emptyAnalysisDict['author'].append(currentAuthor)\n",
" emptyAnalysisDict['recipient'].append(perso)\n",
" emptyAnalysisDict['act'].append(actNum)\n",
" emptyAnalysisDict['scene'].append(sceneNum)\n",
" emptyAnalysisDict['speech_length'].append(currentSpeechLen)\n",
" # On réinitialise la variable mesurant le nombre de mot d'une réplique\n",
" currentSpeechLen = 0\n",
" # Fin du si\n",
" # Dans tous les cas l'auteur courant est donné par la valeur \"perso\"\n",
" # qui a été trouvée dans la ligne\n",
" currentAuthor = perso\n",
" else:\n",
" # Nous sommes désormais dans le cas d'une ligne qui constitue une réplique\n",
" # comptons le nombre de mots de celle-ci et ajoutons le au nombre de mots\n",
" # déjà comptabilisé pour la réplique en cours.\n",
" # Nous faison appel ici à une fonction spécialisée dans le comptage des mots d'une ligne.\n",
" currentSpeechLen += count_words(currentLine)\n",
" \n",
"\n",
" else:\n", " else:\n",
" # La ligne courante présente forcément les personnages de la scène\n", " # La ligne courante présente forcément les personnages de la scène\n",
" # car c'est la ligne qui suit la déclaration de scène.\n", " # car c'est la ligne qui suit la déclaration de scène,\n",
" # On peut donc récupérer réduire l'analyse du texte à ces seuls\n", " # à l'exception d'un seule scène, la 7 de l'acte 4\n",
" # On peut donc réduire l'analyse du texte à ces seuls\n",
" # protagonistes.\n", " # protagonistes.\n",
" # Boucle sur les clés du dictionnaire de personnage\n", " # Boucle sur les clés du dictionnaire de personnage\n",
" # qui sont leur nom.\n", " # qui sont leur nom.\n",
" if currentLine:\n",
" # La ligne n'est pas vide, ce n'est pas l'exception\n",
" for namePerso in persoDict:\n", " for namePerso in persoDict:\n",
" # On vérifie si namePerso fait partie des protagonistes\n", " # On vérifie si namePerso fait partie des protagonistes\n",
" m = re.search(namePerso, currentLine, re.IGNORECASE)\n", " m = re.search(namePerso, currentLine, re.IGNORECASE)\n",
...@@ -387,73 +530,21 @@ ...@@ -387,73 +530,21 @@
" # on l'ajoute à la liste des personnages de la scène\n", " # on l'ajoute à la liste des personnages de la scène\n",
" scenePersoList.append(m.group(0))\n", " scenePersoList.append(m.group(0))\n",
" print(scenePersoList)\n", " print(scenePersoList)\n",
" else:\n",
" # La ligne est vide on sait que c'est le cas particulier\n",
" # le seul protagoniste est Harpagon\n",
" scenePersoList.append('Harpagon')\n",
" previousLineIsScene = False\n", " previousLineIsScene = False\n",
" \n", " \n",
" \n", " \n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\n",
"\n", " # On lit une ligne on incrémente donc le numéro de la ligne courante dans le fichier\n",
" \"\"\" \n", " lineNum += 1\n"
" # La lecture s'est arrêtée car la ligne de début de définition de la liste des personnages a été rencontrée.\n",
" # Nous avons néanmoins lu la ligne suivante qui est obligatoirement un personnage.\n",
" # Nous devons maintenant lire ligne par ligne, la liste des personnages au format suivant:\n",
" # \"- NomPersonnage, lien, lien, ...\"\n",
" # Ainsi dès que la ligne ne commence plus par un tiret nous pouvons arrêter la lecture et le remplissage\n",
" # du dictionnaire.\n",
" isAPersoLine = True\n",
" # On extrait la chaîne de caractères qui nous intéresse\n",
" m = re.search('(?<=\\s–\\s)[A-ZÀ-Ÿ]{1}[a-zA-ZÀ-ÿ\\s,\\']+', persoLineExample)\n",
" extractedString = m.group(0)\n",
" while (currentLine and isAPersoLine):\n",
" # Traitement de la ligne courante qui est obligatoirement\n",
" # une ligne listant un personnage de la pièce.\n",
" # Comme le montre l'exemple au-dessus, le nom ainsi que\n",
" # les différents types de liens sont séparés par une virgule.\n",
" parts = extractedString.split(',')\n",
" # La ligne au-dessus crée une liste dont chaque élément\n",
" # est séparé par des virgules\n",
" # typiquement \"tata, titi, toto\".split(',') --> ['tata', ' titi', ' toto']\n",
" # Création d'un dictionnaire vide temporaire pour enregistrer les liens\n",
" # ainsi que la couleur à paramétrer\n",
" persoCaracs = {\"links\":[],\"color\":None}\n",
" # Le premier élément donne le nom du personnage, indice 0 de la liste\n",
" # Les éléments suivants donnent les liens avec les autres personnages\n",
" # On parcours le reste de ces derniers\n",
" for elt in parts[1:]:\n",
" # En regardant cette partie dans le fichier,\n",
" # on voit que soit les parties commencent\n",
" # par un espace et une lettre,\n",
" # soit un espace et un \"et\" que l'on ne\n",
" # souhaite pas capturer\n",
" # On vérifie si l'élément commence par \" et \" ou non\n",
" if elt.startswith(\" et \"):\n",
" # L'élément commence bien par \" et \"\n",
" # on enlève cette partie\n",
" currentLink = elt[4:]\n",
" else:\n",
" # Ce n'est pas le cas, on enlève juste\n",
" # l'espace\n",
" currentLink = elt[1:]\n",
" persoCaracs[\"links\"].append(currentLink)\n",
" # Fin de la boucle for\n",
" \n",
" # On enregistre le dictionnaire temporaire des caractéristiques\n",
" # du personnage courant rempli, dans le dictionnaire\n",
" # global des personnages\n",
" emptyPersoDict[parts[0]] = persoCaracs\n",
" currentLine = fileToAnalyse.readline()\n",
" m = re.search('(?<=\\s–\\s)[A-ZÀ-Ÿ]{1}[a-zA-ZÀ-ÿ\\s,\\']+', currentLine)\n",
" if m is not None:\n",
" extractedString = m.group(0)\n",
" else:\n",
" isAPersoLine = False\n",
" \n",
" # Fin de la boucle while\n",
"\"\"\""
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 36, "execution_count": 10,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
...@@ -471,139 +562,107 @@ ...@@ -471,139 +562,107 @@
"\n", "\n",
"### Scène Première.\n", "### Scène Première.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Élise', 'Valère']\n", "['Élise', 'Valère']\n",
"### Scène II.\n", "### Scène II.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Cléante', 'Élise']\n", "['Cléante', 'Élise']\n",
"### Scène III.\n", "### Scène III.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'La Flèche']\n", "['Harpagon', 'La Flèche']\n",
"### Scène IV.\n", "### Scène IV.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise']\n", "['Harpagon', 'Cléante', 'Élise']\n",
"### Scène V.\n", "### Scène V.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Élise', 'Valère']\n", "['Harpagon', 'Élise', 'Valère']\n",
"## Acte II.\n", "## Acte II.\n",
"\n", "\n",
"### Scène Première.\n", "### Scène Première.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Cléante', 'La Flèche']\n", "['Cléante', 'La Flèche']\n",
"### Scène II.\n", "### Scène II.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'La Flèche']\n", "['Harpagon', 'Cléante', 'La Flèche']\n",
"### Scène III.\n", "### Scène III.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Frosine']\n", "['Harpagon', 'Frosine']\n",
"### Scène IV.\n", "### Scène IV.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Frosine', 'La Flèche']\n", "['Frosine', 'La Flèche']\n",
"### Scène V.\n", "### Scène V.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Frosine']\n", "['Harpagon', 'Frosine']\n",
"## Acte III.\n", "## Acte III.\n",
"\n", "\n",
"### Scène Première.\n", "### Scène Première.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise', 'Valère', 'Dame Claude', 'Brindavoine', 'La Merluche']\n", "['Harpagon', 'Cléante', 'Élise', 'Valère', 'Dame Claude', 'Brindavoine', 'La Merluche']\n",
"### Scène II.\n", "### Scène II.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Valère']\n", "['Valère']\n",
"### Scène III.\n", "### Scène III.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Mariane', 'Frosine']\n", "['Mariane', 'Frosine']\n",
"### Scène IV.\n", "### Scène IV.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Mariane', 'Frosine']\n", "['Mariane', 'Frosine']\n",
"### Scène V.\n", "### Scène V.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Mariane', 'Frosine']\n", "['Harpagon', 'Mariane', 'Frosine']\n",
"### Scène VI.\n", "### Scène VI.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Élise', 'Mariane', 'Frosine']\n", "['Harpagon', 'Élise', 'Mariane', 'Frosine']\n",
"### Scène VII.\n", "### Scène VII.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine']\n", "['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine']\n",
"### Scène VIII.\n", "### Scène VIII.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine', 'Brindavoine']\n", "['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine', 'Brindavoine']\n",
"### Scène IX.\n", "### Scène IX.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine', 'La Merluche']\n", "['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine', 'La Merluche']\n",
"## Acte IV.\n", "## Acte IV.\n",
"\n", "\n",
"### Scène Première.\n", "### Scène Première.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Cléante', 'Élise', 'Mariane', 'Frosine']\n", "['Cléante', 'Élise', 'Mariane', 'Frosine']\n",
"### Scène II.\n", "### Scène II.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine']\n", "['Harpagon', 'Cléante', 'Élise', 'Mariane', 'Frosine']\n",
"### Scène III.\n", "### Scène III.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante']\n", "['Harpagon', 'Cléante']\n",
"### Scène IV.\n", "### Scène IV.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante']\n", "['Harpagon', 'Cléante']\n",
"### Scène V.\n", "### Scène V.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante']\n", "['Harpagon', 'Cléante']\n",
"### Scène VI.\n", "### Scène VI.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Cléante', 'La Flèche']\n", "['Cléante', 'La Flèche']\n",
"### Scène VII.\n", "### Scène VII.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"[]\n", "[]\n",
"## Acte V.\n", "## Acte V.\n",
"\n", "\n",
"### Scène Première.\n", "### Scène Première.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Le Commissaire']\n", "['Harpagon', 'Le Commissaire']\n",
"### Scène II.\n", "### Scène II.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Le Commissaire']\n", "['Harpagon', 'Le Commissaire']\n",
"### Scène III.\n", "### Scène III.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Valère', 'le Commissaire']\n", "['Harpagon', 'Valère', 'le Commissaire']\n",
"### Scène IV.\n", "### Scène IV.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Élise', 'Valère', 'Mariane', 'Frosine', 'le Commissaire']\n", "['Harpagon', 'Élise', 'Valère', 'Mariane', 'Frosine', 'le Commissaire']\n",
"### Scène V.\n", "### Scène V.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Élise', 'Valère', 'Mariane', 'Anselme', 'Frosine', 'le Commissaire']\n", "['Harpagon', 'Élise', 'Valère', 'Mariane', 'Anselme', 'Frosine', 'le Commissaire']\n",
"### Scène VI.\n", "### Scène VI.\n",
"\n", "\n",
"Set previousLineIsScene to True\n",
"['Harpagon', 'Cléante', 'Élise', 'Valère', 'Mariane', 'Anselme', 'Frosine', 'La Flèche', 'le Commissaire']\n" "['Harpagon', 'Cléante', 'Élise', 'Valère', 'Mariane', 'Anselme', 'Frosine', 'La Flèche', 'le Commissaire']\n"
] ]
} }
...@@ -620,7 +679,7 @@ ...@@ -620,7 +679,7 @@
"# la manipulation et l'analyse. \n", "# la manipulation et l'analyse. \n",
"with open(local_filename,'r') as avareFile:\n", "with open(local_filename,'r') as avareFile:\n",
" # On va commencer par parser le fichier afin de récupérer la liste des personnages\n", " # On va commencer par parser le fichier afin de récupérer la liste des personnages\n",
" fill_perso_dict(avareFile, avarePersoDict)\n", " lineNum = fill_perso_dict(avareFile, avarePersoDict)\n",
" \n", " \n",
" print(\"##################################################\")\n", " print(\"##################################################\")\n",
" print(\"Contenu du dictionnaire des personnages initialisé\")\n", " print(\"Contenu du dictionnaire des personnages initialisé\")\n",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment