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

parent d65d45ac
......@@ -46,17 +46,18 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# from os import path as pth\n",
"from os import path as pth\n",
"import requests\n",
"\n",
"local_filename = \"moliere_avare.md\"\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",
"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",
" # nous téléchargons les données et les écrivons\n",
" # dans un fichier en local\n",
......@@ -95,7 +96,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
......@@ -105,7 +106,7 @@
"# 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",
"# 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",
"# 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",
......@@ -129,7 +130,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
......@@ -138,7 +139,7 @@
},
{
"cell_type": "code",
"execution_count": 28,
"execution_count": 6,
"metadata": {},
"outputs": [
{
......@@ -147,7 +148,7 @@
"'ACTEURS.'"
]
},
"execution_count": 28,
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
......@@ -171,7 +172,7 @@
},
{
"cell_type": "code",
"execution_count": 47,
"execution_count": 7,
"metadata": {},
"outputs": [
{
......@@ -180,7 +181,7 @@
"\"Harpagon, Père de Cléante et d'Élise, et Amoureux de Mariane\""
]
},
"execution_count": 47,
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
......@@ -189,10 +190,11 @@
"# 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",
"# 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",
"# 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",
"# , 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.group(0)"
]
......@@ -208,18 +210,7 @@
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'author': [], 'recipient': [], 'act': [], 'scene': [], 'speech_lenght': []}"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"def fill_perso_dict(fileToAnalyse, emptyPersoDict):\n",
" currentLine = fileToAnalyse.readline()\n",
......@@ -231,18 +222,21 @@
" currentLine = fileToAnalyse.readline()\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",
" # Nous avons néanmoins lue la ligne suivante. Nous devons maintenant lire ligne par ligne,\n",
" # la liste des personnages au format suivant:\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 = currentLine.split(',')\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",
......@@ -252,7 +246,7 @@
" # 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",
" 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",
......@@ -268,21 +262,41 @@
" # 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]] = perso\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 None:\n",
" isAPersoLine = False"
" if m is not None:\n",
" extractedString = m.group(0)\n",
" else:\n",
" isAPersoLine = False\n",
" \n",
" # Fin de la boucle while"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 9,
"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": [
"# 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",
......@@ -293,9 +307,16 @@
"# 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",
"# la manipulation et l'analyse. \n",
"with open(local_filename,'r') as avare_file:\n",
" # On va commencer par parser le fichier afin de définir des couleurs pour chaque personnage\n",
" pass"
"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",
" 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