Introduction
Dans ce billet, nous essaierons de montrer les possibilités ainsi que les difficultés que l’on peut rencontrer lors de l’étude d’un long texte ou d’un corpus de textes, au moyen d’outils numériques. Le but est d’extraire d’un texte, ici d’un poème, le plus d’informations possibles, plus que ce que l’œil humain, même après plusieurs lectures, peut obtenir devant la quantité de vers et de mots qui le composent. Pour cela, sont nécessaires trois étapes: la préparation des données, le codage, et l’interprétation. C’est donc ce plan que nous suivrons dans cet exposé.
Il apparait nécessaire maintenant de faire une brève présentation du poème que nous allons analyser et qui fait partie du corpus de déclamations que j’étudie dans le cadre de mon mémoire. Il s’agit d’une controverse datant du Ve-VIe après J.C couramment intitulée “Le pêcheur sacrilège” ou AL 21 Riese. Cette pièce poétique est aussi un plaidoyer contre un pêcheur ayant volé l’or contenu dans le temple de Neptune et l’ayant ensuite ramené sous la forme d’un poison doré avec l’inscription “De tuo tibi Neptune”. Le déclamateur cherche à prouver sa culpabilité.
Le travail réalisé va être présenté et commenté ci-dessous. Mais la version Pdf à la fin du billet permet d’avoir un aperçu plus détaillé des lignes de codes qui seront abordées plus loin.
Préparation des données
Accéder au texte
Notre travail reposant sur un texte, il nous donc commencer en premier lieu par entrer en possession de ce matériau fondamental. Il y a, selon moi, trois manières de procéder, sachant que notre étude sera d’autant plus aisée que nous aurons un texte débarrassé des caractères non alphanumériques. La méthode la plus simple est de l’exporter, au format souhaité, directement depuis un des nombreux entrepôts de textes en ligne comme Perseus Digital Library. La deuxième, la plus fastidieuse, est de recopier l’intégralité du texte. La troisième, celle que nous suivrons, consiste à simplement à réaliser un copier-coller à partir d’un site qui donne accès à notre poème.
Il convient de préciser que la pièce 21 de l’Anthologie Latine est très tardive et, par conséquent, ne se retrouve pas facilement sur internet et sur les sites spécialisés dont nous venons de parler. C’est pourquoi, nous choisissons cette option. Dans tous les cas, pour tout projet de ce genre, la préparation des données est très souvent impérative et relativement aisée grâce aux outils que l’on verra plus tard. Quoiqu’il en soit, c’est sur le site Musisque Deoque, répertoriant tout particulièrement des œuvres poétiques latines, que nous retrouvons notre texte.
Nettoyer le texte
Pour cela, on peut soit passer par VS Code, soit directement par RStudio, le but étant de ne conserver que les mots d’AL 21 séparés par un seul espace pour pouvoir l’exploiter par la suite. Dans RStudio, les fonctions stringr sont les plus utiles pour cela. Mais, étant donné le procédé auquel nous avons recouru et l’état particulièrement dégradé des éléments copiés, il convient davantage de travailler avec VS Code et sa fonction Replace. Le fichier ainsi nettoyé se nomme AL_21.txt.
J’en profite ici, mais nous y reviendrons plus loin, pour mentionner l’outil OpenRefine et son utilité dans le traitement des fichier csv et tsv. En effet, son rôle est salutaire et parfois mieux adapté que RStudio lorsqu’il s’agit de trier des informations contenues dans un tableau de données. Grâce à la fonction fwrite, il est ainsi possible de demander à R d’exporter un tableau au format voulu et de l’exploiter ensuite avec OpenRefine.
Le codage dans R
La distribution des principaux termes
Notre travail s’articule en deux parties : une étude de la distribution des mots les plus fréquents d’Al 21 ainsi qu’une étude grammaticale et syntaxique de l’œuvre. Nous aborderons d’abord la distribution avec le fichier R AL_21_distribution_termes. Notre démarche ici obéit à deux objectifs : obtenir les dix mots les plus fréquents et observer la manière dont ils se répartissent dans notre déclamation.
Un texte non lemmatisé
Après avoir installé le package pacman, nous insérons notre fichier AL_21.txt dans R qui en fait une liste unlist(). Notre texte étant nettoyé, il n’est pas utile de recourir aux stringr. Puis, la suite de mots doit être mise dans un tableau tibble et en faire des tokens pour qu’ils puissent par la suite être dénombrés avec la fonction count. On se rend compte que la plupart des occurrences obtenues ne sont pas intéressantes pour l’interprétation à venir, car il s’agit de termes courants et que l’on peut retrouver dans la majorité des écrits latins.

Il nous faut donc être plus précis dans notre recherche. Dans notre cas de figure, une solution peut être d’insérer une liste préétablie de termes parmi les plus fréquents (stopwords_latin_v2_6) et de la faire fusionner avec nos résultats (fonction anti_join) afin de ne faire apparaitre que les termes les plus représentatifs de notre déclamation.

Le graphique construit à partir de la fonction ggplot nous donne des résultats bien plus spécifiques que plus haut. Les dimensions religieuse et criminelle semblent les plus caractéristiques. Cependant, remarquons que le texte n’est pas lemmatisé et que notre liste comprend plusieurs termes pour un même lemme (aurum /auro). Notre représentation n’est donc pas optimale. Pour résoudre ce problème il nous faudrait un texte qui soit lemmatisé au préalable.
Lemmatisation d’AL 21
Les contraintes rencontrées nous obligent à aborder cette étape nécessaire dans la distribution mais dont notre étude grammaticale et syntaxique bénéficiera également. Pour cela, nous utilisons le service de lemmatisation Deucalion. Le procédé est relativement simple, il suffit de coller notre texte dans un espace dédié et le site sort une page où les données, séparées par des tabulations, peut être copié.
Il ne reste plus qu’à sélectionner les données ou plutôt la ou les colonnes qui nous intéressent. La suite de l’étude de la distribution ne requiert que la colonne “lemme”. Donc, nous ne conservons que celle-là avec OpenRefine et nous l’exportons dans R.
Un texte lemmatisé
Maintenant, nous pouvons reprendre les étapes déjà mentionnées et observer la nouvelle représentation graphique.

Cette fois-ci, les différentes formes d’un même mot sont regroupées et viennent grossir le nombre d’occurrences de termes déjà présent sur le graphe précédent. Cependant, de nouvelles entrées ont été ajoutées comme rapio, donum ou furtum. Nous verrons comment interpréter cela plus tard.
Répartition des principaux termes
Une fois que nous connaissons les lemmes les plus caractéristiques de ce texte, nous pouvons maintenant nous intéresser à la répartition d’un terme donné au sein de la déclamation. Nous ne nous concentrerons que sur un exemple précis, celui d’aurum, le lemme le plus fréquent et le plus représentatif des potentialités de la distribution dans R.
Il faut commencer par indexer (fonction seq) le texte lemmatisé mais non fusionné à la liste de stopwords, car la distribution serait alors biaisée, des lemmes ayant été retirés. Ensuite, la fonction which intègre le lemme choisi. Et, on attribue le résultat NA à toutes les occurrences autres que aurum et la valeur 1 sinon. La fonction plot, enfin, nous permet de visualiser ceci.

Interprétation de la distribution des principaux termes
Il convient maintenant d’exploiter nos recherches en commençant par la liste des dix mots les plus fréquents. Comme nous l’avons déjà dit, les aspects criminel (scelus, crimen, facinus) et sacré (templum) dominent dans la déclamation. Mais, les autres résultats semblent montrer que le déclamateur insiste et intensifie la portée du crime. Le terme aurum (or) revient le plus. Il s’agit en effet de l’objet volé mais, la qualité de l’objet ainsi accentuée, fait apparaitre par synecdoque le vol du métal précieux comme plus important que le vol lui-même. De plus, la répétition de magnus (grand) et ars (art) par hyperbole aggrave le forfait du pêcheur. De même que les antithétiques donum (don) et furtum (vol) tendent à exciter le sentiment d’injustice de l’auditoire. La distribution spécifique du lemme aurum tend à confirmer cette interprétation. En effet, le déclamateur rappelle fréquemment que l’or a disparu du temple, mais c’est surtout vers la fin du texte, peu avant le 1500e mot que ce terme est comme martelé. Or, cela correspond à peu près aux parties “preuve” et “réfutation”, parties venant avant l’épilogue, comme si l’auteur de ce procès à charge souhaitait que ses auditeurs aient davantage en tête la valeur considérable du larcin, avant la fin de son discours.
L’étude grammaticale et syntaxique
Présentation de la méthode
Cette partie s’appuie largement sur les fonctionnalités du package Tidyr, car nos recherches nous amènent à extraire du tableau généré par Deucalion des données bien précises. Contrairement à l’étude précédente, nous ne traitons plus de lemmes mais de classes grammaticales et de syntaxe. Pourtant, le procédé est assez similaire, sauf que nous ne donnons à R non pas la colonne des lemmes mais celles qui contribuent à leurs caractérisations comme le temps pour les verbes ou les cas pour les formes déclinables. Cela nous donne accès à des données chiffrées portant sur la langue.
Limites de Deucalion
Le rôle de Deucalion, comme on a pu le voir, est important dans notre étude. Cependant, afin d’en exploiter tout son potentiel, il convient d’avoir à l’esprit ces trois inconvénients, plus ou moins problématiques, qu’il est préférable de résoudre. D’une part, bien que Deucalion parvienne très souvent à une lemmatisation complète, certaines lignes demeurent incomplètes. Outre le fait qu’il faut en tenir compte pour l’interprétation, cela entraine des décalages dans les colonnes, créant des colonnes hétérogènes avec des informations propres aux colonnes voisines venant s’y insérer. D’autre part, Deucalion sort dans la colonne “Dis”, dans une même cellule, un ensemble de caractéristiques relatives au lemme comme le genre pour le nom ou le mode pour le verbe. Le problème est que, selon que ce soit un nom ou un verbe, ces marques non seulement ne viennent pas dans le même ordre, mais encore diffèrent à cause de la nature propre de l’élément lemmatisé (un nom ne peut pas avoir de temps ou de personne). Enfin, d’un point de vu formel, certaines cases présentent une forme un peu lourde du type telle caractéristique est égale à telle chose.
A cela, nous pouvons apporter deux solutions. La première est la plus fastidieuse. Elle consiste vérifier et à corriger les lignes et les colonnes une par une. La deuxième a l’avantage d’être plus rapide car automatisée par R, mais elle ne permet pas de tout modifier ou, du moins, de le faire de manière plus aisée que manuellement. Dans notre cas, il parait nécessaire de combiner ces deux approches, car notre travail n’implique pas d’étudier toutes les propriétés des lemmes, mais seulement leur nature et leur fonction (répertorier tous les mots masculins ou tous les pluriels sort du cadre de notre étude). Or, on peut constater que pour toutes les catégories, hormis les verbes, la lemmatisation de la nature et du cas est correcte. Donc, ceux-là peuvent être directement traités dans R. Pour les verbes, au contraire, il faut passer par VS Code et OpenRefine afin de corriger au cas par cas en ajoutant des NA là où la lemmatisation a échoué.
Etude de la nature des lemmes
Comme mentionné précédemment, on fait lire notre tableau csv à R et on utilise les fonctionnalités de Tidyr pour y rechercher des informations précises. Les fonctions group_by et arrange permettent d’organiser la colonne “nature”. Puis, la fonction count dénombre le tout. On s’aperçoit alors que Deucalion a procédé à une sous-catégorisation des natures, distinguant par exemple les noms propres (NOMpro) des noms communs (NOMcom). Ce degré de précision étant superflu ici, nous utilisons, pour chaque nature, un filtre filter afin de regrouper chaque classe grammaticale. Nous unifions ces catégories en une seule avec mutate. Cela fait, il ne reste plus qu’à compter (count) séparément chaque nature et à former un tableau (tibble). Ce dernier doit être “retourné” avec pivot_longer afin de le visualiser correctement avec ggplot.

Le graphe obtenu montre assez clairement la répartition à laquelle nous souhaitions aboutir. Néanmoins, le nombre d’occurrences demeure relativement flou pour l’interprétation. Il est alors conseillé de l’échanger pour des fréquences. Le procédé est plutôt rapide. Il faut dégroupé ungroup les éléments, comptabiliser le nombre total d’occurrences avec summarise et sum, joindre cross_join le résultat au tableau et ne sélectionner select que les colonnes nature et fréquence.

Les traits grammaticaux (verbes)
Nous reviendrons sur l’interprétation de ces résultats. Passons maintenant à l’étude plus spécifique des verbes et de leurs traits grammaticaux. Contrairement aux autres classes grammaticales, comme on l’a vu plus haut, leur analyse requiert un nettoyage préalable et distinct selon leur mode (un participe est déclinable, un verbe conjugué non). Nous allons donc recourir de nombreuses fois à la fonction separate_wider_delim et ne sélectionner (select) que les colonnes d’intérêt, afin de clarifier la présentation des résultats. Il faut également transférer nos données à VS Code pour combler et replacer correctement les valeurs dans leur colonne propre. La fonction filter nous permet de trier et ainsi de choisir les modes, que nous aborderons d’abord. Une fois purifiées, les données sont dénombrées (count), puis placées dans un tableau et enfin réorganisées. Nous présenterons ici les résultats sous forme de fréquences, pour la même raison que plus haut.

Pour l’étude de la répartition des temps et des voix, nous procédons d’une manière différente car nous avons maintenant une colonne fixe “mode”. Il suffit de sélectionner (select) les colonnes mode et temps ou mode et voix et de les rassembler dans un même tableau avec full_join. Une fois dénombrés (count) et réorganisés reorder selon un ordre décroissant decreasing, on obtient les graphes suivants :


Concernant l’étude des personnes du verbe, une étape doit précéder le processus que l’on a suivi pour le temps et la voix. En effet, les colonnes “personne” et “nombre” sont séparées dans notre tableau. La fonction unite permet de les faire fusionner, nous employons comme séparateur sep la formule “ème du ” pour rendre la fusion plus esthétique. Il est à noter que le participe et l’infinitif étant des modes non personnels, il ne seront ici pas pris en compte.

L’étude syntaxique
Nous aborderons dans cette partie la répartition des cas des mots déclinables. Il est évident que certaines catégories grammaticales, n’admettant pas de déclinaisons, seront mises de côté lors de notre tri préalable (select(cas)). De déclinables et identifiés comme tels par Deucalion nous trouvons les noms, les adjectifs et les participes. Le fait que les participes fassent partie de cette catégorie explique pourquoi nous nous intéressons aux cas en dernier. En effet, il nous fallait d’abord les purifier avant de pouvoir les étudier. Pour le reste, nous suivons le même procédé que précédemment.

Interprétation
La forte proportion de noms est à mettre en relation avec l’écrasante majorité de nominatifs dans le texte. Le fait d’avoir une quantité si élevée de noms au nominatif, ou plutôt de noms sujets et de noms attributs du sujet traduit une volonté manifeste de catégorisation du sujet. En effet, le déclamateur insiste davantage sur l’état du sujet que sur l’objet d’une action, puisqu’il y a environ deux nominatifs pour un accusatif, complément naturel et régulier du verbe transitif. En outre, rappelons que l’occurrence qui arrive en tête dans le texte non lemmatisé est le verbe être (est, 46 occurrences). Cela implique que l’auteur de la déclamation livre un véritable procès à charge contre l’accusé, appuyant moins sur les circonstances du crime que sur leur auteur lui-même (la troisième personne du singulier, c’est-à-dire le pêcheur, est sept à huit fois plus usitée que les autres). D’ailleurs, la lecture du texte nous le confirme, les attaques ad personam et ad hominem font légion. De même, les autres documents vont dans ce sens. L’indicatif, cinq fois plus important que le subjonctif, place le discours dans le domaine du factuel et non dans de l’hypothèse. Fait ou plutôt méfait qui poursuit le pêcheur même dans le présent (trois fois que le passé) et pour lequel il est directement responsable (quatre fois plus de verbes actifs que le passifs).
Conclusion
Pour finir, grâce à des processus automatisés, nous sommes parvenus à caractériser un texte latin de manière plutôt intéressante. Cela a été rendu possible par le formidable outil qu’est Deucalion et qui nous permet d’analyser autant des termes que leur nature, leurs traits grammaticaux ou leur syntaxe. Le nettoyage des données, rendu possible par VS Code et OpenRefine, est, néanmoins, souvent nécessaire. Les multiples fonctionnalités de R et du package Tidyr ont contribué à l’exploitation des informations fournies par Deucalion. Notre déclamateur a une propension à l’exagération du crime de l’inculpé (prédominance d’aurum). Il s’inscrit dans une stratégie rhétorique de l’attaque personnelle, visant à expliquer le forfait par la prédisposition (ars) du pêcheur au larcin (furtum).
Sources
- Deucalion : https://dh.chartes.psl.eu/deucalion/latin
- Tidyverse : https://www.tidyverse.org/packages/
- Musisque Deoque : https://www.mqdq.it/texts/ANTH|anth|021