"On va s'assurer qu'un fichier texte en local au format markdown contienne la pièce. Si le fichier \"moliere_avare.md\" existe on considère que c'est bon et s'il n'existe pas nous allons télécharger le contenu disponible à l'URL renseignée ci-dessus et l'écrire dans ce fichier local \"moliere_avare.md\". "
]
},
{
"cell_type": "code",
"execution_count": null,
...
...
@@ -57,11 +64,202 @@
" response = requests.get(data_url)\n",
" # Ecriture des données téléchargées dans le fichier local\n",
" with open(local_filename, \"wb\") as f:\n",
" f.write(response.content)\n",
" f.write(response.content)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Maintenant que nous sommes assurés d'avoir un fichier en local contenant le texte de l'Avare dont on va faire l'analyse, on va donc l'ouvrir, parcourir son contenu et le traiter au fur et à mesure.\n",
"\n",
"Ce que l'on sait déjà c'est que l'on va devoir créer une structure de données pour l'analyse.\n",
"On va passer par la bibliothèque Pandas et la création d'un dataframe, permettant de différencier les différents personnages et de qualifier leur \"activité\" au travers des différents actes et scènes. Néanmoins, après avoir parcouru le web, il est recommandé de passer par une structure intermédiaire pour la création du dataframe pandas. Nous allons choisir la structure de données native de python des dictionnaires en tant que structure de données intermédiaire. \n",
"\n",
"Il y a plusieurs choses auxquelles il est déjà nécessaire de penser vis-à-vis de la problématique posée et des représentations graphiques demandées, notamment celle relative à la question facultative.\n",
"\n",
"Pour commencer, afin d'obtenir une bonne lisibilité des graphiques, il sera intéressant d'associer à chaque personnage une couleur différente.\n",
"\n",
"Ensuite, la question facultative demande de déterminer à qui s'adresse chaque réplique afin d'avoir le graphe directionnel des interactions entre les personnages de la pièce. La structure de données devra donc permettre de savoir pour chaque réplique l'auteur mais aussi le destinataire de cette dernière. Ce sont des informations assez simples à obtenir mais à prendre en compte dans la manière de \"parser\" le fichier texte."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# On va d'ores et déjà utiliser une instruction afin que les graphiques s'affichent directement au sein du notebook\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# On déclare l'utilisation de la bibliothèque pandas et on crée également le dictionnaire\n",
"# qui va nous servir d'intermédiaire avant la création du dataframe pandas\n",
"import pandas as pd\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",
"# 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",
"# de définir une couleur de représentation.\n",
"\n",
"# Ce dictionnaire est initialisé vide car il sera rempli en utilisant le nom de chaque personnage\n",
"# comme clés associées à des valeurs qui seront des dictionnaires à deux entrées\n",
"# 'links' donnant les liens avec les autres personnages sous la forme d'une liste\n",
"# 'color' permettant de régler une couleur de représentation\n",
"avarePersoDict = {}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Afin de parser le fichier en s'appuyant notamment sur les symboles de titres utilisés par le format Markdown,\n",
"il nous faut avoir recours à l'utilisation d'un outil d'analyse des expressions régulières (cf. [Wikipedia_Expression_régulière](https://fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re)). La bibliothèque\n",
"[re](https://docs.python.org/3/library/re.html) disponible nativement dans python permet de faire ce travail. "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"import re"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'ACTEURS.'"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Chaîne de caractère indiquant le début d'analyse et de récupération des personnages\n",
"persoCaptureSTartLine = \"# ACTEURS.\"\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",
"Voici un lien vers un site de test en ligne d'expressions régulières python \\([regexp_test](https://pythex.org/)\\) qui a aidé à mettre en place l'expression régulière précédente."