Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mooc-rr
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
7404ea6678ce6fbf3a726e36f2bf2079
mooc-rr
Commits
67209c63
Commit
67209c63
authored
Oct 02, 2024
by
7404ea6678ce6fbf3a726e36f2bf2079
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Récupération de la liste des personnages terminée
parent
d65d45ac
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
34 deletions
+55
-34
exercice_fr.ipynb
module3/exo3/exercice_fr.ipynb
+55
-34
No files found.
module3/exo3/exercice_fr.ipynb
View file @
67209c63
...
...
@@ -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_leng
ht
':[]}\n",
"avareAnalysisDict = {'author':[],'recipient':[],'act':[],'scene':[],'speech_leng
th
':[]}\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":
4
7,
"execution_count": 7,
"metadata": {},
"outputs": [
{
...
...
@@ -180,7 +181,7 @@
"\"Harpagon, Père de Cléante et d'Élise, et Amoureux de Mariane\""
]
},
"execution_count":
4
7,
"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
C
ommencant par une majuscule --> [A-ZÀ-Ÿ]{1}\n",
"# On cherche une chaîne de caractères
c
ommencant 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 lu
e 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]] = perso
Caracs
\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",
" "
]
},
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment