Récupération de la liste des personnages terminée

parent d65d45ac
...@@ -46,17 +46,18 @@ ...@@ -46,17 +46,18 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 2,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# from os import path as pth\n", "from os import path as pth\n",
"import requests\n", "import requests\n",
"\n", "\n",
"local_filename = \"moliere_avare.md\"\n", "local_filename = \"moliere_avare.md\"\n",
"# Si le fichier csv des données d'incidence existe en local\n", "# Si le fichier csv des données d'incidence existe en local\n",
"# il n'est pas nécessaire de le télécharger par l'URL\n", "# il n'est pas nécessaire de le télécharger par l'URL\n",
"if not pth.exists(local_filename):\n", "if not pth.exists(local_filename):\n",
" print(\"Le fichier local contenant la pièce de théâtre n'existe pas.\")\n",
" # Si le fichier n'existe pas en local dans le dossier courant\n", " # Si le fichier n'existe pas en local dans le dossier courant\n",
" # nous téléchargons les données et les écrivons\n", " # nous téléchargons les données et les écrivons\n",
" # dans un fichier en local\n", " # dans un fichier en local\n",
...@@ -95,7 +96,7 @@ ...@@ -95,7 +96,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 4,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -105,7 +106,7 @@ ...@@ -105,7 +106,7 @@
"# Le dictionnaire établi une structure en tableau à 5 colonnes permettant d'enregistrer\n", "# Le dictionnaire établi une structure en tableau à 5 colonnes permettant d'enregistrer\n",
"# l'auteur, le destinataire, l'acte, la scène, ainsi que la longueur en termes de mots \n", "# l'auteur, le destinataire, l'acte, la scène, ainsi que la longueur en termes de mots \n",
"# pour chaque réplique de la pièce\n", "# pour chaque réplique de la pièce\n",
"avareAnalysisDict = {'author':[],'recipient':[],'act':[],'scene':[],'speech_lenght':[]}\n", "avareAnalysisDict = {'author':[],'recipient':[],'act':[],'scene':[],'speech_length':[]}\n",
"\n", "\n",
"# Nous créons également d'ores et déjà un dictionnaire des personnages de la scène\n", "# Nous créons également d'ores et déjà un dictionnaire des personnages de la scène\n",
"# permettant d'enregistrer les informations de liens avec les autres personnages\n", "# permettant d'enregistrer les informations de liens avec les autres personnages\n",
...@@ -129,7 +130,7 @@ ...@@ -129,7 +130,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": 5,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -138,7 +139,7 @@ ...@@ -138,7 +139,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 28, "execution_count": 6,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
...@@ -147,7 +148,7 @@ ...@@ -147,7 +148,7 @@
"'ACTEURS.'" "'ACTEURS.'"
] ]
}, },
"execution_count": 28, "execution_count": 6,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
...@@ -171,7 +172,7 @@ ...@@ -171,7 +172,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 47, "execution_count": 7,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
...@@ -180,7 +181,7 @@ ...@@ -180,7 +181,7 @@
"\"Harpagon, Père de Cléante et d'Élise, et Amoureux de Mariane\"" "\"Harpagon, Père de Cléante et d'Élise, et Amoureux de Mariane\""
] ]
}, },
"execution_count": 47, "execution_count": 7,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
...@@ -189,10 +190,11 @@ ...@@ -189,10 +190,11 @@
"# Exemple d'une ligne de la liste des personnages\n", "# Exemple d'une ligne de la liste des personnages\n",
"persoLineExample = \" – Harpagon, Père de Cléante et d'Élise, et Amoureux de Mariane.\"\n", "persoLineExample = \" – Harpagon, Père de Cléante et d'Élise, et Amoureux de Mariane.\"\n",
"# L'expression régulière proposée est la suivante\n", "# L'expression régulière proposée est la suivante\n",
"# On cherche une chaîne de caractères Commencant par une majuscule --> [A-ZÀ-Ÿ]{1}\n", "# On cherche une chaîne de caractères commencant par une majuscule --> [A-ZÀ-Ÿ]{1}\n",
"# potentiellement accentuée et ensuite composées de lettres potentiellement\n", "# potentiellement accentuée et ensuite composées de lettres potentiellement\n",
"# accentuées elles aussi, contenant des espaces, des virgules, des apostrophes --> [a-zA-ZÀ-ÿ\\s,\\']+\n", "# accentuées elles aussi, contenant des espaces, des virgules, des apostrophes --> [a-zA-ZÀ-ÿ\\s,\\']+\n",
"# et précédée d'un espace suivi d'un tiret suivi d'un espace (ce n'est pas le tiret du 6) --> (?<=\\s–\\s)\n", "# et précédée d'un espace suivi d'un tiret suivi d'un espace (ce n'est pas le tiret du 6) --> (?<=\\s–\\s)\n",
"# , chaîne de caractères qui ne sera pas capturée\n",
"m1 = re.search('(?<=\\s–\\s)[A-ZÀ-Ÿ]{1}[a-zA-ZÀ-ÿ\\s,\\']+',persoLineExample)\n", "m1 = re.search('(?<=\\s–\\s)[A-ZÀ-Ÿ]{1}[a-zA-ZÀ-ÿ\\s,\\']+',persoLineExample)\n",
"m1.group(0)" "m1.group(0)"
] ]
...@@ -208,18 +210,7 @@ ...@@ -208,18 +210,7 @@
"cell_type": "code", "cell_type": "code",
"execution_count": 8, "execution_count": 8,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/plain": [
"{'author': [], 'recipient': [], 'act': [], 'scene': [], 'speech_lenght': []}"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"def fill_perso_dict(fileToAnalyse, emptyPersoDict):\n", "def fill_perso_dict(fileToAnalyse, emptyPersoDict):\n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\n",
...@@ -231,18 +222,21 @@ ...@@ -231,18 +222,21 @@
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\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 lue la ligne suivante. Nous devons maintenant lire ligne par ligne,\n", " # Nous avons néanmoins lu la ligne suivante qui est obligatoirement un personnage.\n",
" # la liste des personnages au format suivant:\n", " # Nous devons maintenant lire ligne par ligne, la liste des personnages au format suivant:\n",
" # \"- NomPersonnage, lien, lien, ...\"\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", " # 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", " # du dictionnaire.\n",
" isAPersoLine = True\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", " while (currentLine and isAPersoLine):\n",
" # Traitement de la ligne courante qui est obligatoirement\n", " # Traitement de la ligne courante qui est obligatoirement\n",
" # une ligne listant un personnage de la pièce.\n", " # une ligne listant un personnage de la pièce.\n",
" # Comme le montre l'exemple au-dessus, le nom ainsi que\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", " # les différents types de liens sont séparés par une virgule.\n",
" parts = currentLine.split(',')\n", " parts = extractedString.split(',')\n",
" # La ligne au-dessus crée une liste dont chaque élément\n", " # La ligne au-dessus crée une liste dont chaque élément\n",
" # est séparé par des virgules\n", " # est séparé par des virgules\n",
" # typiquement \"tata, titi, toto\".split(',') --> ['tata', ' titi', ' toto']\n", " # typiquement \"tata, titi, toto\".split(',') --> ['tata', ' titi', ' toto']\n",
...@@ -252,7 +246,7 @@ ...@@ -252,7 +246,7 @@
" # Le premier élément donne le nom du personnage, indice 0 de la liste\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", " # Les éléments suivants donnent les liens avec les autres personnages\n",
" # On parcours le reste de ces derniers\n", " # On parcours le reste de ces derniers\n",
" for elt in parts[1,:]:\n", " for elt in parts[1:]:\n",
" # En regardant cette partie dans le fichier,\n", " # En regardant cette partie dans le fichier,\n",
" # on voit que soit les parties commencent\n", " # on voit que soit les parties commencent\n",
" # par un espace et une lettre,\n", " # par un espace et une lettre,\n",
...@@ -268,21 +262,41 @@ ...@@ -268,21 +262,41 @@
" # l'espace\n", " # l'espace\n",
" currentLink = elt[1:]\n", " currentLink = elt[1:]\n",
" persoCaracs[\"links\"].append(currentLink)\n", " persoCaracs[\"links\"].append(currentLink)\n",
" # Fin de la boucle for\n",
" \n",
" # On enregistre le dictionnaire temporaire des caractéristiques\n", " # On enregistre le dictionnaire temporaire des caractéristiques\n",
" # du personnage courant rempli, dans le dictionnaire\n", " # du personnage courant rempli, dans le dictionnaire\n",
" # global des personnages\n", " # global des personnages\n",
" emptyPersoDict[parts[0]] = perso\n", " emptyPersoDict[parts[0]] = persoCaracs\n",
" currentLine = fileToAnalyse.readline()\n", " currentLine = fileToAnalyse.readline()\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 None:\n", " if m is not None:\n",
" isAPersoLine = False" " extractedString = m.group(0)\n",
" else:\n",
" isAPersoLine = False\n",
" \n",
" # Fin de la boucle while"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 9,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"##################################################\n",
"Contenu du dictionnaire des personnages initialisé\n",
"##################################################\n",
"\n",
"{'Harpagon': {'links': [\"Père de Cléante et d'Élise\", 'Amoureux de Mariane'], 'color': None}, 'Cléante': {'links': [\"Fils d'Harpagon\", 'Amant de Mariane'], 'color': None}, 'Élise': {'links': [\"Fille d'Harpagon\", 'Amante de Valère'], 'color': None}, 'Valère': {'links': [\"Fils d'Anselme\", \"Amant d'Élise\"], 'color': None}, 'Mariane': {'links': ['Amante de Cléante', \"aimée d'Harpagon\"], 'color': None}, 'Anselme': {'links': ['Père de Valère et de Mariane'], 'color': None}, 'Frosine': {'links': [\"Femme d'Intrigue\"], 'color': None}, 'Maitre Simon': {'links': ['Courtier'], 'color': None}, 'Maitre Jacques': {'links': [\"Cuisinier et Cocher d'Harpagon\"], 'color': None}, 'La Flèche': {'links': ['Valet de Cléante'], 'color': None}, 'Dame Claude': {'links': [\"Servante d'Harpagon\"], 'color': None}, 'Brindavoine': {'links': [\"laquais d'Harpagon\"], 'color': None}, 'La Merluche': {'links': [\"laquais d'Harpagon\"], 'color': None}, 'Le commissaire': {'links': ['son clerc'], 'color': None}}\n",
"\n",
"##################################################\n"
]
}
],
"source": [ "source": [
"# On ouvre le fichier local en lecture 'r' pour en faire l'analyse\n", "# On ouvre le fichier local en lecture 'r' pour en faire l'analyse\n",
"# en utilisant l'instruction with qui se chargera de fermer\n", "# en utilisant l'instruction with qui se chargera de fermer\n",
...@@ -293,9 +307,16 @@ ...@@ -293,9 +307,16 @@
"# le fichier, à savoir le lire de manière à ranger les données\n", "# le fichier, à savoir le lire de manière à ranger les données\n",
"# de manière intelligente dans une structure de données facilitant\n", "# de manière intelligente dans une structure de données facilitant\n",
"# la manipulation et l'analyse. \n", "# la manipulation et l'analyse. \n",
"with open(local_filename,'r') as avare_file:\n", "with open(local_filename,'r') as avareFile:\n",
" # On va commencer par parser le fichier afin de définir des couleurs pour chaque personnage\n", " # On va commencer par parser le fichier afin de récupérer la liste des personnages\n",
" pass" " fill_perso_dict(avareFile, avarePersoDict)\n",
" print(\"##################################################\")\n",
" print(\"Contenu du dictionnaire des personnages initialisé\")\n",
" print(\"##################################################\\n\")\n",
" print(avarePersoDict)\n",
" print(\"\\n##################################################\")\n",
"\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