diff --git a/module3/exo3/exercice.ipynb b/module3/exo3/exercice.ipynb index 18a5e25189fd934aeffeb47a4636a3257aeff1ab..07ee71763558958fda912f9e4df24210c4ce4857 100644 --- a/module3/exo3/exercice.ipynb +++ b/module3/exo3/exercice.ipynb @@ -7,6 +7,23 @@ "# Analyse des dialogues dans _L'Avare_ de Molière" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Préparation des données\n", + "\n", + "Le texte de _l'Avare_ est disponible sur le site de [l'Observatoire de la vie littéraire (OBVIL)](http://obvil.sorbonne-universite.site/obvil/presentation).\n", + "Pour cette analyse, je prends la [version XML/TEI](http://dramacode.github.io/moliere/moliere_avare.xml).\n", + "\n", + "Pour préparer les données, il faudra donc :\n", + "* récupérer le texte au format XML ;\n", + "* compter le nombre de mots de chaque tirade, et mettre le résultat dans une base de données, autrement dit un _dataframe_ sous pandas ;\n", + "* utiliser ce _dataframe_ pour l'analyse.\n", + "\n", + "Je commence par importer les bibliothèques Python :" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -24,8 +41,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Le texte de _l'Avare_ est disponible sur le site de [l'Observatoire de la vie littéraire (OBVIL)](http://obvil.sorbonne-universite.site/obvil/presentation).\n", - "Pour cette analyse, nous prenons la [version XML/TEI](http://dramacode.github.io/moliere/moliere_avare.xml)." + "Comme dans un exercice précédent, je ne récupère le texte de la pièce que s'il n'est pas déjà disponible localement :" ] }, { @@ -44,93 +60,85 @@ ] }, { - "cell_type": "code", - "execution_count": 3, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{http://www.tei-c.org/ns/1.0}TEI {'{http://www.w3.org/XML/1998/namespace}lang': 'fr'}\n" - ] - } - ], "source": [ - "import xml.etree.ElementTree as ET\n", - "tree = ET.parse(data_file)\n", - "root = tree.getroot()\n", - "print(root.tag, root.attrib)" + "Pour naviguer dans le document XML, j'utilise un objet _ElementTree_ de la bibliothèque _xml_. Il faut d'abord obtenir la racine de cet _ElementTree_ :" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "ET.register_namespace('ns', 'http://www.tei-c.org/ns/1.0')" + "import xml.etree.ElementTree as ET\n", + "tree = ET.parse(data_file)\n", + "root = tree.getroot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Dictionnaire des rôles avec identifiants et noms en langage courant :" + "Tous les éléments du documents XML sont préfixés par le _namespace_ `{http://www.tei-c.org/ns/1.0}`" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'harpagon': 'Harpagon', 'cleante': 'Cléante', 'elise': 'Élise', 'valere': 'Valère', 'mariane': 'Mariane', 'anselme': 'Anselme', 'frosine': 'Frosine', 'maitre-simon': 'Maitre Simon', 'maitre-jacques': 'Maitre Jacques', 'la-fleche': 'La Flèche', 'dame-claude': 'Dame Claude', 'brindavoine': 'Brindavoine', 'la-merluche': 'La Merluche', 'commissaire': 'Le commissaire'}\n" + "{http://www.tei-c.org/ns/1.0}TEI\n" ] } ], "source": [ - "roles = {element.get('{http://www.w3.org/XML/1998/namespace}id'): element.text\n", - " for element in root.iter(\"{http://www.tei-c.org/ns/1.0}role\")}\n", - "print(roles)" + "print(root.tag)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Création d'un dictionnaire des **rôles** avec identifiants et noms en langage courant :" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tag : {http://www.tei-c.org/ns/1.0}teiHeader attributes : {}\n", - "tag : {http://www.tei-c.org/ns/1.0}text attributes : {}\n" + "{'harpagon': 'Harpagon', 'cleante': 'Cléante', 'elise': 'Élise', 'valere': 'Valère', 'mariane': 'Mariane', 'anselme': 'Anselme', 'frosine': 'Frosine', 'maitre-simon': 'Maitre Simon', 'maitre-jacques': 'Maitre Jacques', 'la-fleche': 'La Flèche', 'dame-claude': 'Dame Claude', 'brindavoine': 'Brindavoine', 'la-merluche': 'La Merluche', 'commissaire': 'Le commissaire'}\n" ] } ], "source": [ - "#print(ET.tostring(root, encoding=\"unicode\", method=\"text\")) # Affichage du document en mode texte\n", - "#print(root.findall(\".\"))\n", - "for child in root:\n", - " print(\"tag :\", child.tag, \" attributes :\", child.attrib)" + "roles = {element.get('{http://www.w3.org/XML/1998/namespace}id'): element.text\n", + " for element in root.iter(\"{http://www.tei-c.org/ns/1.0}role\")}\n", + "print(roles)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Liste des personnages par scène, à partir des _indications de scène_ :" + "Pour savoir qui joue dans les scènes, nous allons compter le nombre de mots pour chaque rôle.\n", + "\n", + "Il existe cependant, dans les indications scéniques (didascalies), une liste des rôles que nous pouvons afficher :" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -174,11 +182,7 @@ } ], "source": [ - "#for scene in root.findall(\".//{http://www.tei-c.org/ns/1.0}div2\"):\n", - "# for st in scene.find(\"./{http://www.tei-c.org/ns/1.0}stage\"):\n", - "# print(st.text)\n", "for scene in root.findall(\".//{http://www.tei-c.org/ns/1.0}div2\"):\n", - "# for st in scene.find(\"./{http://www.tei-c.org/ns/1.0}stage\"):\n", " print(scene.get('{http://www.w3.org/XML/1998/namespace}id'), scene[1].text)" ] }, @@ -191,109 +195,105 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'I01': {'valere', 'elise'}, 'I02': {'cleante', 'elise'}, 'I03': {'la-fleche', 'harpagon'}, 'I04': {'cleante', 'elise', 'harpagon'}, 'I05': {'valere', 'elise', 'harpagon'}, 'II01': {'cleante', 'la-fleche'}, 'II02': {'cleante', 'maitre-simon', 'la-fleche', 'harpagon'}, 'II03': {'frosine', 'harpagon'}, 'II04': {'frosine', 'la-fleche'}, 'II05': {'frosine', 'harpagon'}, 'III01': {'brindavoine', 'cleante', 'la-merluche', 'harpagon', 'maitre-jacques', 'valere', 'elise'}, 'III02': {'maitre-jacques', 'valere'}, 'III03': {'frosine', 'maitre-jacques'}, 'III04': {'frosine', 'mariane'}, 'III05': {'frosine', 'harpagon'}, 'III06': {'frosine', 'mariane', 'elise', 'harpagon'}, 'III07': {'frosine', 'cleante', 'harpagon', 'valere', 'mariane'}, 'III08': {'brindavoine', 'harpagon'}, 'III09': {'la-merluche', 'cleante', 'valere', 'harpagon'}, 'IV01': {'frosine', 'cleante', 'mariane', 'elise'}, 'IV02': {'cleante', 'elise', 'harpagon'}, 'IV03': {'cleante', 'harpagon'}, 'IV04': {'cleante', 'maitre-jacques', 'harpagon'}, 'IV05': {'cleante', 'harpagon'}, 'IV06': {'cleante', 'la-fleche'}, 'IV07': {'harpagon'}, 'V01': {'commissaire', 'harpagon'}, 'V02': {'commissaire', 'maitre-jacques', 'harpagon'}, 'V03': {'maitre-jacques', 'valere', 'harpagon'}, 'V04': {'frosine', 'harpagon', 'maitre-jacques', 'valere', 'elise'}, 'V05': {'anselme', 'harpagon', 'maitre-jacques', 'valere', 'mariane'}, 'V06': {'cleante', 'anselme', 'commissaire', 'harpagon', 'maitre-jacques', 'mariane'}}\n" + "ename": "AttributeError", + "evalue": "'str' object has no attribute 'findall'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m roles_par_scenes ={scene.get('{http://www.w3.org/XML/1998/namespace}id'):\n\u001b[1;32m 3\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0msp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'who'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mscene\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfindall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./{http://www.tei-c.org/ns/1.0}sp\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0msp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mscene\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfindall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./{http://www.tei-c.org/ns/1.0}sp\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m for scene in root.findall(\".//{http://www.tei-c.org/ns/1.0}div2\")}\n", + "\u001b[0;31mAttributeError\u001b[0m: 'str' object has no attribute 'findall'" ] } ], "source": [ + "# dictionnaire scènes / rôles :\n", "roles_par_scenes ={scene.get('{http://www.w3.org/XML/1998/namespace}id'):\n", " {sp.get('who') for sp in scene.findall(\"./{http://www.tei-c.org/ns/1.0}sp\")}\n", " for sp in scene.findall(\"./{http://www.tei-c.org/ns/1.0}sp\")\n", - " for scene in root.findall(\".//{http://www.tei-c.org/ns/1.0}div2\")}\n", - "print(roles_par_scenes)\n", - "#for scene in root.findall(\".//{http://www.tei-c.org/ns/1.0}div2\"):\n", - "# liste_roles = {sp.get('who') for sp in scene.findall(\"./{http://www.tei-c.org/ns/1.0}sp\")}\n", - "# print(scene.get('{http://www.w3.org/XML/1998/namespace}id'), liste_roles)" + " for scene in root.findall(\".//{http://www.tei-c.org/ns/1.0}div2\")}" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Acte Premier\n", - "Acte II\n", - "Acte III \n", - "Acte IV\n", - "Acte V\n" + "I01 Élise, Valère, \n", + "I02 Élise, Cléante, \n", + "I03 Harpagon, La Flèche, \n", + "I04 Élise, Harpagon, Cléante, \n", + "I05 Élise, Harpagon, Valère, \n", + "II01 La Flèche, Cléante, \n", + "II02 Maitre Simon, Cléante, Harpagon, La Flèche, \n", + "II03 Frosine, Harpagon, \n", + "II04 Frosine, La Flèche, \n", + "II05 Frosine, Harpagon, \n", + "III01 Élise, Harpagon, Cléante, Valère, La Merluche, Brindavoine, Maitre Jacques, \n", + "III02 Maitre Jacques, Valère, \n", + "III03 Frosine, Maitre Jacques, \n", + "III04 Mariane, Frosine, \n", + "III05 Frosine, Harpagon, \n", + "III06 Mariane, Frosine, Élise, Harpagon, \n", + "III07 Harpagon, Cléante, Frosine, Valère, Mariane, \n", + "III08 Brindavoine, Harpagon, \n", + "III09 Harpagon, Valère, La Merluche, Cléante, \n", + "IV01 Mariane, Frosine, Élise, Cléante, \n", + "IV02 Élise, Harpagon, Cléante, \n", + "IV03 Harpagon, Cléante, \n", + "IV04 Maitre Jacques, Harpagon, Cléante, \n", + "IV05 Harpagon, Cléante, \n", + "IV06 Cléante, La Flèche, \n", + "IV07 Harpagon, \n", + "V01 Harpagon, Le commissaire, \n", + "V02 Maitre Jacques, Harpagon, Le commissaire, \n", + "V03 Maitre Jacques, Harpagon, Valère, \n", + "V04 Élise, Harpagon, Frosine, Valère, Maitre Jacques, \n", + "V05 Harpagon, Valère, Mariane, Maitre Jacques, Anselme, \n", + "V06 Harpagon, Le commissaire, Cléante, Mariane, Maitre Jacques, Anselme, \n" ] } ], "source": [ - "for element in root.iter(\"{http://www.tei-c.org/ns/1.0}div1\"):\n", - " print(element[0].text)" + "# affichage :\n", + "for scene in roles_par_scenes:\n", + " print(scene, end=' ')\n", + " for role in roles_par_scenes[scene]:\n", + " print(roles[role], end=', ')\n", + " print()" ] }, { - "cell_type": "code", - "execution_count": 10, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'I01'}\n", - "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'I02'}\n", - "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'I03'}\n", - "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'I04'}\n", - "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'I05'}\n", - "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'II01'}\n", - "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'II02'}\n", - "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'II03'}\n", - "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'II04'}\n", - "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'II05'}\n", - "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'III01'}\n", - "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'III02'}\n", - "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'III03'}\n", - "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'III04'}\n", - "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'III05'}\n", - "{'type': 'scene', 'n': '6', '{http://www.w3.org/XML/1998/namespace}id': 'III06'}\n", - "{'type': 'scene', 'n': '7', '{http://www.w3.org/XML/1998/namespace}id': 'III07'}\n", - "{'type': 'scene', 'n': '8', '{http://www.w3.org/XML/1998/namespace}id': 'III08'}\n", - "{'type': 'scene', 'n': '9', '{http://www.w3.org/XML/1998/namespace}id': 'III09'}\n", - "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'IV01'}\n", - "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'IV02'}\n", - "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'IV03'}\n", - "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'IV04'}\n", - "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'IV05'}\n", - "{'type': 'scene', 'n': '6', '{http://www.w3.org/XML/1998/namespace}id': 'IV06'}\n", - "{'type': 'scene', 'n': '7', '{http://www.w3.org/XML/1998/namespace}id': 'IV07'}\n", - "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'V01'}\n", - "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'V02'}\n", - "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'V03'}\n", - "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'V04'}\n", - "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'V05'}\n", - "{'type': 'scene', 'n': '6', '{http://www.w3.org/XML/1998/namespace}id': 'V06'}\n" - ] - } - ], "source": [ - "for element in root.iter(\"{http://www.tei-c.org/ns/1.0}div2\"):\n", - " print(element.attrib)" + "Différences entre les indications scéniques et les prises de paroles :\n", + "\n", + "* Certains personnages ne parlent pas (exemples : au III-01, Dame Claude ne parle pas, au III-05, Mariane ne parle pas)\n", + "* Valère prend la parole alors qu'il n'est pas annoncé aux scènes III-07 et III-09.\n", + "* Scène IV-07 : Harpagon est seul, il n'y a pas d'indication de scène.\n", + "Cette vérification nous permet de voir qu'il faut se fier aux prises de paroles, mais pas aux indications de scènes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Fonction permettant de compter le nombre de mots dans une phrase, en écartant tous les séparateurs (ponctuation, saut à la ligne, tirets, etc.)." + "Pour compter le nombre de mots, il nous faut une fonction qui élimine tous les séparateurs (ponctuation, saut à la ligne, tirets, etc.).\n", + "Une succession de plusieurs séparateurs sera comptée comme un unique espace, pour que le nombre de mots soit correctement calculé." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -311,9 +311,17 @@ " return nbMots" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Comparons le décompte brutal du nombre de mots avec cette fonction.\n", + "Pour la première phrase, par exemple, un `split` direct donne 24 mots, car il compte le « ? » final, ce que ne fait pas la fonction `compte_mots`." + ] + }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -492,13 +500,7 @@ "Vous avez entendu… 3 3\n", "Quoi ? mon Père. 4 3\n", "Là… 1 1\n", - "Quoi ? 2 1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Quoi ? 2 1\n", "Ce que je viens de dire. 6 6\n", "Non. 1 1\n", "Si fait, si fait. 4 4\n", @@ -545,7 +547,13 @@ "Nous marchandons, mon Frère et moi, à qui parlera le premier ; et nous avons tous deux quelque chose à vous dire. 22 21\n", "Et moi, j'ai quelque chose aussi à vous dire à tous deux. 12 13\n", "C'est de mariage, mon Père, que nous désirons vous parler. 10 11\n", - "Et c'est de mariage aussi que je veux vous entretenir. 10 11\n", + "Et c'est de mariage aussi que je veux vous entretenir. 10 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Ah ! mon Père. 4 3\n", "Pourquoi ce cri ? 4 3\n", "Est-ce le mot, ma Fille, ou la chose, qui vous fait peur ? 13 13\n", @@ -647,13 +655,7 @@ "Assurément, cela ne reçoit point de contradiction. 7 7\n", "Il est vrai que votre Fille vous peut représenter que le mariage est une plus grande affaire qu'on ne peut croire ; qu'il y va d'être heureux, ou malheureux, toute sa vie ; et qu'un engagement qui doit durer jusqu'à la mort, ne se doit jamais faire qu'avec de grandes précautions. 51 55\n", "Sans dot. 2 2\n", - "Vous avez raison. 3 3\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Vous avez raison. 3 3\n", "Voilà qui décide tout, cela s'entend. 6 7\n", "Il y a des gens qui pourraient vous dire qu'en de telles occasions l'inclination d'une Fille est une chose sans doute où l'on doit avoir de l'égard ; et que cette grande inégalité d'âge, d'humeur, et de sentiments, rend un mariage sujet à des accidents très fâcheux. 47 53\n", "Sans dot. 2 2\n", @@ -791,13 +793,7 @@ "Qui vous a dit que c'était céans ? 8 8\n", "Ce n'est pas moi, Monsieur, au moins, qui leur ai découvert votre nom, et votre logis : mais, à mon avis, il n'y a pas grand mal à cela. 29 30\n", "Ce sont des Personnes discrètes ; et vous pouvez ici vous expliquer ensemble. 13 12\n", - "Comment ? 2 1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Comment ? 2 1\n", "Monsieur est la Personne qui veut vous emprunter les quinze mille livres dont je vous ai parlé. 17 17\n", "Comment, pendard, c'est toi qui t'abandonnes à ces coupables extrémités ? 11 12\n", "Comment, mon Père, c'est vous qui vous portez à ces honteuses actions ? 13 13\n", @@ -806,7 +802,13 @@ "Oses-tu bien, après cela, paraître devant moi ? 8 8\n", "Osez-vous bien, après cela, vous présenter aux yeux du monde ? 11 11\n", "N'as-tu point de honte, dis-moi, d'en venir à ces débauches-là ? de te précipiter dans des dépenses effroyables ? et de faire une honteuse dissipation du bien que tes Parents t'ont amassé avec tant de sueurs ? 37 40\n", - "Ne rougissez-vous point, de déshonorer votre condition, par les commerces que vous faites ? de sacrifier gloire et réputation, au désir insatiable d'entasser écu sur écu ? et de renchérir, en fait d'intérêts, sur les plus infâmes subtilités qu'aient jamais inventées les plus célèbres Usuriers ? 46 47\n", + "Ne rougissez-vous point, de déshonorer votre condition, par les commerces que vous faites ? de sacrifier gloire et réputation, au désir insatiable d'entasser écu sur écu ? et de renchérir, en fait d'intérêts, sur les plus infâmes subtilités qu'aient jamais inventées les plus célèbres Usuriers ? 46 47\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Ôte-toi de mes yeux, coquin, ôte-toi de mes yeux. 9 11\n", "Qui est plus criminel, à votre avis, ou celui qui achète un argent dont il a besoin, ou bien celui qui vole un argent dont il n'a que faire ? 30 30\n", "Retire-toi, te dis-je, et ne m'échauffe pas les oreilles. 9 12\n", @@ -906,13 +908,7 @@ "J'ai peur qu'un Homme de mon âge ne soit pas de son goût ; et que cela ne vienne à produire chez moi certains petits désordres qui ne m'accommoderaient pas. 30 32\n", "Ah que vous la connaissez mal ! 7 6\n", "C'est encore une particularité que j'avais à vous dire. 9 11\n", - "Elle a une aversion épouvantable pour tous les jeunes gens, et n'a de l'amour que pour les vieillards. 18 20\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Elle a une aversion épouvantable pour tous les jeunes gens, et n'a de l'amour que pour les vieillards. 18 20\n", "Elle ? 2 1\n", "Oui, elle. 2 2\n", "Je voudrais que vous l'eussiez entendue parler là-dessus. 8 10\n", @@ -1093,7 +1089,13 @@ "Ma foi, ils ne sont point du tout en état de marcher : Je ne vous dirai point qu'ils sont sur la litière, les pauvres bêtes n'en ont point, et ce serait fort mal parler : mais vous leur faites observer des jeûnes si austères, que ce ne sont plus rien que des idées ou des fantômes ; des façons de Chevaux. 62 61\n", "Les voilà bien malades, ils ne font rien. 8 8\n", "Et pour ne faire rien, Monsieur, est-ce qu'il ne faut rien manger ? 13 14\n", - "Il leur vaudrait bien mieux, les pauvres animaux, de travailler beaucoup, de manger de même. 15 15\n", + "Il leur vaudrait bien mieux, les pauvres animaux, de travailler beaucoup, de manger de même. 15 15\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Cela me fend le cœur, de les voir ainsi exténués : car enfin j'ai une tendresse pour mes Chevaux, qu'il me semble que c'est moi-même, quand je les vois pâtir ; je m'ôte tous les jours pour eux les choses de la bouche ; et c'est être, Monsieur, d'un naturel trop dur, que de n'avoir nulle pitié de son prochain. 60 65\n", "Le travail ne sera pas grand, d'aller jusqu'à la foire. 10 12\n", "Non, Monsieur, je n'ai pas le courage de les mener, et je ferais conscience de leur donner des coups de fouet en l'état où ils sont. 26 28\n", @@ -1111,13 +1113,7 @@ "Non, en aucune façon. 4 4\n", "Pardonnez-moi ; je sais fort bien que je vous mettrais en colère. 12 12\n", "Point du tout ; au contraire, c'est me faire plaisir, et je suis bien aise d'apprendre comme on parle de moi. 21 22\n", - "Monsieur, puisque vous le voulez, je vous dirai franchement qu'on se moque partout de vous ; qu'on nous jette de tous côtés cent brocards à votre sujet ; et que l'on n'est point plus ravi, que de vous tenir au cul et aux chausses, et de faire sans cesse des contes de votre lésine. 54 56\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Monsieur, puisque vous le voulez, je vous dirai franchement qu'on se moque partout de vous ; qu'on nous jette de tous côtés cent brocards à votre sujet ; et que l'on n'est point plus ravi, que de vous tenir au cul et aux chausses, et de faire sans cesse des contes de votre lésine. 54 56\n", "L'un dit que vous faites imprimer des Almanachs particuliers, où vous faites doubler les Quatre-temps, et les vigiles, afin de profiter des jeûnes, où vous obligez votre monde. 28 30\n", "L'autre, que vous avez toujours une querelle toute prête à faire à vos valets dans le temps des Étrennes, ou de leur sortie d'avec vous, pour vous trouver une raison de ne leur donner rien. 35 37\n", "Celui-là conte qu'une fois vous fîtes assigner le Chat d'un de vos Voisins, pour vous avoir mangé un reste d'un gigot de Mouton. 23 27\n", @@ -1208,13 +1204,7 @@ "Quelle belle confession à lui faire ! 7 6\n", "Et moi, pour vous répondre, j'ai à vous dire que les choses sont fort égales ; et que si vous auriez de la répugnance à me voir votre Belle-Mère, je n'en aurais pas moins sans doute à vous voir mon Beau-Fils. 41 44\n", "Ne croyez pas, je vous prie, que ce soit moi qui cherche à vous donner cette inquiétude. 17 17\n", - "Je serais fort fâchée de vous causer du déplaisir ; et si je ne m'y vois forcée par une Puissance absolue, je vous donne ma parole, que je ne consentirai point au mariage qui vous chagrine. 36 36\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Je serais fort fâchée de vous causer du déplaisir ; et si je ne m'y vois forcée par une Puissance absolue, je vous donne ma parole, que je ne consentirai point au mariage qui vous chagrine. 36 36\n", "Elle a raison. 3 3\n", "À sot compliment, il faut une réponse de même. 9 9\n", "Je vous demande pardon, ma Belle, de l'impertinence de mon Fils. 11 12\n", @@ -1279,7 +1269,13 @@ "Mon Dieu, que de façons ! 6 5\n", "Gardez la Bague, puisque Monsieur le veut. 7 7\n", "Pour ne vous point mettre en colère, je la garde maintenant ; et je prendrai un autre temps pour vous la rendre. 22 21\n", - "Monsieur, il y a là un Homme qui veut vous parler. 11 11\n", + "Monsieur, il y a là un Homme qui veut vous parler. 11 11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Dis-lui que je suis empêché, et qu'il revienne une autre fois. 11 13\n", "Il dit qu'il vous apporte de l'argent. 7 9\n", "Je vous demande pardon. 4 4\n", @@ -1353,13 +1349,7 @@ "Vous pouvez partir quand il vous plaira. 7 7\n", "Puisque vous n'y allez pas, mon Père, je m'en vais les conduire. 12 14\n", "Non, demeurez. 2 2\n", - "Elles iront bien toutes seules ; et j'ai besoin de vous. 11 11\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Elles iront bien toutes seules ; et j'ai besoin de vous. 11 11\n", "Ô çà, intérêt de Belle-Mère à part, que te semble à toi de cette Personne ? 16 16\n", "Ce qui m'en semble ? 5 5\n", "Oui, de son air, de sa taille, de sa beauté, de son esprit ? 14 13\n", @@ -1519,13 +1509,7 @@ "Hélas, mon pauvre argent, mon pauvre argent, mon cher ami, on m'a privé de toi ; et puisque tu m'es enlevé, j'ai perdu mon support, ma consolation, ma joie, tout est fini pour moi, et je n'ai plus que faire au monde. 42 45\n", "Sans toi, il m'est impossible de vivre. 7 8\n", "C'en est fait, je n'en puis plus, je me meurs, je suis mort, je suis enterré. 16 18\n", - "N'y a-t-il personne qui veuille me ressusciter, en me rendant mon cher argent, ou en m'apprenant qui l'a pris ? 20 24\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "N'y a-t-il personne qui veuille me ressusciter, en me rendant mon cher argent, ou en m'apprenant qui l'a pris ? 20 24\n", "Euh ? que dites-vous ? 5 4\n", "Ce n'est personne. 3 4\n", "Il faut, qui que ce soit qui ait fait le coup, qu'avec beaucoup de soin on ait épié l'heure ; et l'on a choisi justement le temps que je parlais à mon traître de Fils. 35 37\n", @@ -1533,7 +1517,13 @@ "Je veux aller quérir la justice, et faire donner la Question à toute la Maison ; à Servantes, à Valets, à Fils, à Fille, et à moi aussi. 28 27\n", "Que de gens assemblés ! 5 4\n", "Je ne jette mes regards sur personne, qui ne me donne des soupçons, et tout me semble mon voleur. 19 19\n", - "Eh ! de quoi est-ce qu'on parle là ? de celui qui m'a dérobé ? 15 15\n", + "Eh ! de quoi est-ce qu'on parle là ? de celui qui m'a dérobé ? 15 15\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Quel bruit fait-on là-haut ? est-ce mon voleur qui y est ? 12 13\n", "De grâce, si l'on sait des nouvelles de mon voleur, je supplie que l'on m'en dise. 16 19\n", "N'est-il point caché là parmi vous ? 7 8\n", @@ -1684,13 +1674,7 @@ "Mon cœur n'a point agi par les ressorts que vous pensez, et un motif plus noble m'a inspiré cette résolution. 20 22\n", "Vous verrez que c'est par charité chrétienne qu'il veut avoir mon bien ; mais j'y donnerai bon ordre ; et la Justice, pendard effronté, me va faire raison de tout. 30 31\n", "Vous en userez comme vous voudrez, et me voilà prêt à souffrir toutes les violences qu'il vous plaira ; mais je vous prie de croire, au moins, que s'il y a du mal, ce n'est que moi qu'il en faut accuser, et que votre Fille en tout ceci n'est aucunement coupable. 51 55\n", - "Je le crois bien, vraiment ; il serait fort étrange que ma Fille eût trempé dans ce crime. 18 17\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Je le crois bien, vraiment ; il serait fort étrange que ma Fille eût trempé dans ce crime. 18 17\n", "Mais je veux ravoir mon affaire, et que tu me confesses en quel endroit tu me l'as enlevée. 18 19\n", "Moi ? je ne l'ai point enlevée, et elle est encore chez vous. 13 13\n", "Ô ma chère Cassette ! 5 4\n", @@ -1777,7 +1761,13 @@ "Vous, ma Sœur ? 4 3\n", "Oui, mon cœur s'est ému, dès le moment que vous avez ouvert la bouche ; et notre Mère, que vous allez ravir, m'a mille fois entretenue des disgrâces de notre Famille. 31 32\n", "Le Ciel ne nous fit point aussi périr dans ce triste naufrage ; mais il ne nous sauva la vie que par la perte de notre liberté ; et ce furent des corsaires qui nous recueillirent, ma Mère et moi, sur un débris de notre Vaisseau. 46 44\n", - "Après dix ans d'esclavage, une heureuse fortune nous rendit notre liberté, et nous retournâmes dans Naples, où nous trouvâmes tout notre bien vendu, sans y pouvoir trouver des nouvelles de notre Père. 32 33\n", + "Après dix ans d'esclavage, une heureuse fortune nous rendit notre liberté, et nous retournâmes dans Naples, où nous trouvâmes tout notre bien vendu, sans y pouvoir trouver des nouvelles de notre Père. 32 33\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Nous passâmes à Gênes, où ma Mère alla ramasser quelques malheureux restes d'une succession qu'on avait déchirée ; et de là, fuyant la barbare injustice de ses Parents, elle vint en ces lieux, où elle n'a presque vécu que d'une vie languissante. 42 45\n", "Ô Ciel ! quels sont les traits de ta puissance ! et que tu fais bien voir qu'il n'appartient qu'à toi de faire des miracles. 25 26\n", "Embrassez-moi, mes Enfants, et mêlez tous deux vos transports à ceux de votre Père. 14 15\n", @@ -1806,13 +1796,7 @@ "N'en a-t-on rien ôté ? 5 7\n", "Rien du tout. 3 3\n", "Voyez si c'est votre dessein de souscrire à ce mariage, et de joindre votre consentement à celui de sa Mère, qui lui laisse la liberté de faire un choix entre nous deux. 32 33\n", - "Mais vous ne savez pas, que ce n'est pas assez que ce consentement ; et que le Ciel, avec un Frère que vous voyez, vient de me rendre un Père dont vous avez à m'obtenir. 35 36\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Mais vous ne savez pas, que ce n'est pas assez que ce consentement ; et que le Ciel, avec un Frère que vous voyez, vient de me rendre un Père dont vous avez à m'obtenir. 35 36\n", "Le Ciel, mes Enfants, ne me redonne point à vous, pour être contraire à vos vœux. 16 16\n", "Seigneur Harpagon, vous jugez bien que le choix d'une jeune personne tombera sur le Fils plutôt que sur le Père. 20 21\n", "Allons, ne vous faites point dire ce qu'il n'est pas nécessaire d'entendre, et consentez ainsi que moi à ce double hyménée. 21 24\n", @@ -1849,9 +1833,16 @@ " print(sentence.text, len(sentence.text.split()), compte_mots(sentence.text))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour créer le _dataframe_, nous allons passer par une liste contenant un dictionnaire pour chaque prise de parole du document XML. Ce dictionnaire indique l'acte, la scène, le rôle et le nombre de mots." + ] + }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -1871,12 +1862,20 @@ " nbMots += compte_mots(phrase.text)\n", " data.append({'act': numeroActe, 'scene': numeroScene, 'role': roleId, 'mots': nbMots})\n", " identifiantsParoles.append(paroleId)\n", + "############### Pour vérifier la bonne exécution, il est possible d'afficher les données :\n", "# print(\"Acte {}, Scène {}, Rôle : {}, nombre de mots : {}\".format(numeroActe, numeroScene, roleId, nbMots))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Enregistrons ces données dans un _dataframe_ pour pandas, et vérifions le type des données :" + ] + }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1889,7 +1888,7 @@ "dtype: object" ] }, - "execution_count": 84, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1899,9 +1898,16 @@ "df.dtypes" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Les données sont agrégées à un niveau supérieur : toutes les phrases d'une prise de parole sont additionnées. Au début, par exemple, Valère prononce 23 + 10 + 25 = 58 mots avant qu'Élise ne parle :" + ] + }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -1933,65 +1939,74 @@ " \n", " \n", " \n", - " V06-20\n", - " 5\n", - " 23\n", - " maitre-jacques\n", - " 5-6\n", + " I01-1\n", + " 1\n", + " 58\n", + " valere\n", + " 1-1\n", " \n", " \n", - " V06-21\n", - " 5\n", - " 8\n", - " anselme\n", - " 5-6\n", + " I01-2\n", + " 1\n", + " 68\n", + " elise\n", + " 1-1\n", " \n", " \n", - " V06-22\n", - " 5\n", - " 5\n", - " harpagon\n", - " 5-6\n", + " I01-3\n", + " 1\n", + " 14\n", + " valere\n", + " 1-1\n", " \n", " \n", - " V06-23\n", - " 5\n", - " 11\n", - " anselme\n", - " 5-6\n", + " I01-4\n", + " 1\n", + " 51\n", + " elise\n", + " 1-1\n", " \n", " \n", - " V06-24\n", - " 5\n", - " 6\n", - " harpagon\n", - " 5-6\n", + " I01-5\n", + " 1\n", + " 45\n", + " valere\n", + " 1-1\n", " \n", " \n", "\n", "" ], "text/plain": [ - " act mots role scene\n", - "V06-20 5 23 maitre-jacques 5-6\n", - "V06-21 5 8 anselme 5-6\n", - "V06-22 5 5 harpagon 5-6\n", - "V06-23 5 11 anselme 5-6\n", - "V06-24 5 6 harpagon 5-6" + " act mots role scene\n", + "I01-1 1 58 valere 1-1\n", + "I01-2 1 68 elise 1-1\n", + "I01-3 1 14 valere 1-1\n", + "I01-4 1 51 elise 1-1\n", + "I01-5 1 45 valere 1-1" ] }, - "execution_count": 85, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.tail()" + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Quantité de parole\n", + "\n", + "Nous allons pouvoir commencer l'analyse. Pour s'échauffer, le nombre total de mots : il s'élève à 20 757." ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -2000,7 +2015,7 @@ "20757" ] }, - "execution_count": 56, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -2011,7 +2026,108 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " mots\n", + "role \n", + "harpagon 6132\n", + "cleante 3341\n", + "valere 2693\n", + "frosine 2339\n", + "maitre-jacques 1672\n", + "la-fleche 1496\n", + "elise 1067\n", + "mariane 919\n", + "anselme 517\n", + "commissaire 294\n", + "maitre-simon 197\n", + "la-merluche 47\n", + "brindavoine 43\n" + ] + } + ], + "source": [ + "motsParRole = df.groupby(['role']).sum()\n", + "motsParRole = motsParRole.sort_values(by=['mots'], ascending=False)\n", + "print(motsParRole)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n", + " )" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "motsParRole.plot.bar(rot=0)\n", + "plt.xticks(rotation='vertical')" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "harpagon est dans le df\n", + "cleante est dans le df\n", + "elise est dans le df\n", + "valere est dans le df\n", + "mariane est dans le df\n", + "anselme est dans le df\n", + "frosine est dans le df\n", + "maitre-simon est dans le df\n", + "maitre-jacques est dans le df\n", + "la-fleche est dans le df\n", + "dame-claude n'y est pas\n", + "brindavoine est dans le df\n", + "la-merluche est dans le df\n", + "commissaire est dans le df\n" + ] + } + ], + "source": [ + "for role in roles:\n", + " if role in motsParRole.index:\n", + " print(role, \"est dans le df\")\n", + " else:\n", + " print(role, \"n'y est pas\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -2384,7 +2500,7 @@ "[95 rows x 1 columns]" ] }, - "execution_count": 86, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -2395,46 +2511,96 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " mots\n", - "role \n", - "anselme 517\n" + "\n", + "\n", + "\n", + "\n", + "\n" ] } ], "source": [ - "reponse = df.groupby(['role']).sum()\n", - "#reponse\n", - "print(reponse[:1])" + "for acte in root.iter(\"{http://www.tei-c.org/ns/1.0}div1\"):\n", + " numeroActe = acte.get('n')\n", + " print(type(numeroActe))" ] }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "\n", - "\n", - "\n", - "\n" + "Acte Premier\n", + "Acte II\n", + "Acte III \n", + "Acte IV\n", + "Acte V\n" ] } ], "source": [ - "for acte in root.iter(\"{http://www.tei-c.org/ns/1.0}div1\"):\n", - " numeroActe = acte.get('n')\n", - " print(type(numeroActe))" + "for element in root.iter(\"{http://www.tei-c.org/ns/1.0}div1\"):\n", + " print(element[0].text)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'I01'}\n", + "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'I02'}\n", + "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'I03'}\n", + "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'I04'}\n", + "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'I05'}\n", + "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'II01'}\n", + "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'II02'}\n", + "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'II03'}\n", + "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'II04'}\n", + "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'II05'}\n", + "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'III01'}\n", + "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'III02'}\n", + "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'III03'}\n", + "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'III04'}\n", + "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'III05'}\n", + "{'type': 'scene', 'n': '6', '{http://www.w3.org/XML/1998/namespace}id': 'III06'}\n", + "{'type': 'scene', 'n': '7', '{http://www.w3.org/XML/1998/namespace}id': 'III07'}\n", + "{'type': 'scene', 'n': '8', '{http://www.w3.org/XML/1998/namespace}id': 'III08'}\n", + "{'type': 'scene', 'n': '9', '{http://www.w3.org/XML/1998/namespace}id': 'III09'}\n", + "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'IV01'}\n", + "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'IV02'}\n", + "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'IV03'}\n", + "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'IV04'}\n", + "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'IV05'}\n", + "{'type': 'scene', 'n': '6', '{http://www.w3.org/XML/1998/namespace}id': 'IV06'}\n", + "{'type': 'scene', 'n': '7', '{http://www.w3.org/XML/1998/namespace}id': 'IV07'}\n", + "{'type': 'scene', 'n': '1', '{http://www.w3.org/XML/1998/namespace}id': 'V01'}\n", + "{'type': 'scene', 'n': '2', '{http://www.w3.org/XML/1998/namespace}id': 'V02'}\n", + "{'type': 'scene', 'n': '3', '{http://www.w3.org/XML/1998/namespace}id': 'V03'}\n", + "{'type': 'scene', 'n': '4', '{http://www.w3.org/XML/1998/namespace}id': 'V04'}\n", + "{'type': 'scene', 'n': '5', '{http://www.w3.org/XML/1998/namespace}id': 'V05'}\n", + "{'type': 'scene', 'n': '6', '{http://www.w3.org/XML/1998/namespace}id': 'V06'}\n" + ] + } + ], + "source": [ + "for element in root.iter(\"{http://www.tei-c.org/ns/1.0}div2\"):\n", + " print(element.attrib)" ] } ],