Ce site a été réalisé dans le cadre du cours Projet encadré 2 du Master Plurital de L'Inalco, encadré par Serge Fleury et Jean-Michel Daube. Le but de ce cours sera de réaliser et d'utiliser une batterie d'outils permettant d'extraire des données linguistiques (récupération de corpus, normalisation des textes, segmentation, étiquetage, extraction, structuration et présentation des résultats...) notamment grâce aux langages Perl et XML.
Les finalités de cette chaîne de traitement sont multiples : lexicologie, recherche d'information, terminologie... Ce projet est aussi l'occasion d'une évaluation critique des résultats obtenus, d'un point de vue quantitatif et qualitatif.
Pour atteindre ces objectifs, nous utiliserons les fonctionnalités de Perl v5.26.1 et de ses bibliothèques. Nous utiliserons également des programmes créés pour le cours, tels que patron2graphe.exe (pour la visualisation), ou encore des requêtes XPath et XQuery pour l'extraction de patrons morphosyntaxiques.
Le corpus traité correspond aux flux RSS du journal Le Monde de l'année 2017. Les fils sont classés par rubrique, sous forme de fichiers XML. Chaque fichier contient un ensemble de données agencés selon une arboresence XML (voir graphique ci-dessous). Nous nous intéresserons dans le cadre de notre projet à l'extraction des sous-nœuds titre et description des sous-nœuds item.
Le projet se divise en quatre étapes clé, correspondant chacune à un ensemble de programmes appelés "Boîtes à outils", ou "BàO", dont voici les objectifs :
BàO 1 : Créer un programme permettant de parcourir l'arboresence des flux RSS afin d'en extraire du texte brut et du texte balisé au format XML. Le texte pourra ensuite être traité dans le logiciel d'étiquetage Cordial et TreeTagger. Le programme s'appuiera sur les expressions régulières de Perl.
BàO 2 (BàO 1 enrichie) : Créer une version enrichie des programmes de la BàO1, avec étiquetage automatique des textes extraits à l'aide du programme TreeTagger. Cette étape sera également l'occasion d'évaluer et de comparer les sorties obtenues avec TreeTagger et l'étiqueteur Cordial.
BàO 3 : Créer des requêtes et des programmes permettant d'extraire les termes à l'aide de patrons morphosyntaxiques (code Perl), du langage XQuery/XPath (plusieurs méthodes), de la technologie XSLT, sur les contenus étiquetés avec TreeTagger et Cordial. Le but de cette étape sera également d'évaluer l'efficacité des différentes méthodes en termes de prétraitement des fichiers, de temps d'écriture, de résultats obtenus, etc. Les résultats seront ensuite évalués en fonction des différentes rubriques.
BàO 4 : Visualiser les résultats obtenus et les dépendances entre les termes à l'aide du programme patron2graphe
On peut résumer les étapes du projet à l'aide du schéma suivant. Le bleu correspond au corpus de départ, les boîtes roses aux différentes étapes, et les boîtes en violet au sorties obtenues.
Lors de cette étape, nous allons créer deux programmes permettant de parcourir l'arboresence des flux RSS afin d'en extraire du texte brut et du texte balisé au format XML. Nous traiterons les résultats obtenus dans le logiciel d'étiquetage Cordial. Le premier programme s'appuiera sur la techologie Perl regexp, et le deuxième sur la bibliothèque XML::RSS.
On commence par extraire les fichiers à l'aide d'un script Perl permettant de parcourir l'arborescence. Un programme de lecture de fichier est appelé de manière récursive : si l'élément trouvé dans l'arborescence est un fichier, on extrait son contenu, s'il s'agit d'un dossier, le même programme est appelé à nouveau. Pour chaque fichier trouvé, nous lançons plusieurs commandes afin d'extraire le contenu souhaité, à savoir les titres et les descriptions des articles.
Script BàO 1On exécutera ce script à l'aide de la commande suivante :
perl5.26.1 parcours-arborescence-fichiers-2018-BAO1.pl IN 3260
Ici, le premier argument correspond au nom du répertoire à parcourir (IN) et le deuxième au numéro de la rubrique recherchée. Dans notre cas, il s'agira de la rubrique 3260, correspondant au fil RSS de la rubrique littéraire.
Exemple de fichier XML lu en entrée Sortie au format texte Sortie au format XMLÀ l'issue du programme, nous obtenons le premier résultat escompté, à savoir un document au format texte contenant uniquement les titres et les descriptions des articles ainsi qu'un fichier XML que nous étiqueterons morphosyntaxiquement à la prochaine étape. Nous avons également pu parcourir l'ensemble de l'arboresence grâce à l'appel récursif du programme de lecture de fichiers.
Maintenant que nous sommes parvenus à récupérer le contenu de nos fils RSS, nous allons créer une version enrichie de nos programmes, en y intégrant l'étiquetage morphosyntaxique des textes. Pour effectuer cette opération, nous aurons recours au programme d'étiquetage morphosyntaxique TreeTagger pour le fichier XML, et au programme Cordial pour la sortie au format texte brut. Cette étape sera également l'occasion d'évaluer et de comparer les sorties obtenues avec les deux étiqueteurs.
Nous commençons par étiqueter le corpus au format texte brut à l'aide des fonctionnalités d'étiquetage morphosyntaxique du logiciel Cordial 6. Le résultat de l'étiquetage est un fichier texte séparé par des tabulations au format .cnr. Dans notre cas, nous n'avons conservé que la forme, le lemme et la catégorie grammaticale de chaque mot. Le résultat est donc une liste des mots tokenisés en trois colonnes. Cette opération ne peut pas être réalisée directement dans le script. Nous passons donc par l'interface du logiciel. Voici le résultat obtenu sur la rubrique littéraire (3260) :
Sortie au format CNRExtrait de la sortie :
Pour la version XML, nous utilisons le programme TreeTagger, que nous pouvons intégrer directement à notre précédent script grâce à la fonction system de Perl. Pour ce faire, nous ajoutons une fonction etiquetage qui appelle le programme et s'exécute sur chaque élément titre et description. Téléchargement du script enrichi :
Script BàO 2Comme pour la première BàO, on exécutera ce script sur l'ensemble de l'arborescence à l'aide de la commande suivante :
perl5.26.1 parcours-arborescence-fichiers-2018-BAO2.pl IN 3260
Après étiquetage, nous obtenons un nouveau fichier XML avec pour chaque mot, sa forme, son lemme et sa catégorie grammaticale. Contrairement à Cordial, la sortie est représentée directement dans le corps du texte à l'aide de balises. Ces balises nous permettront par la suite d'appliquer des patrons morphosyntaxiques, grâce notamment aux langages de requête Xquery ou à la technologie XSLT.
Sortie au format XML, avec étiquetage TreeTaggerLe programme TreeTagger se contentant d'indiquer les parties du discours, nous avons dû recourir à deux programmes intermédiaires, respectivement tokenise-utf8.pl, pour la tokénisation en amont du traitement, et treetagger2xml-utf8.pl, pour la transformation du texte au format XML avec balises, afin d'obtenir ce résultat final.
À l'issue du programme, nous obtenons le résultat attendu : un document au format XML contenant les textes étiquetés avec TreeTagger au sein du document XML d'origine.
Extrait de la sortie :
Pour cette troisième étape, nous allons créer des requêtes et des programmes permettant d'extraire les termes à l'aide de patrons morphosyntaxiques. Nous nous aiderons pour cela des contenus étiquetés avec TreeTagger et Cordial d'autres technologies : commandes Perl, langage XQuery/XPath et XSLT. Le but de cette étape sera également d'évaluer l'efficacité des différentes méthodes en termes de prétraitement des fichiers, de temps d'écriture, de résultats obtenus, etc.
Pour commencer, nous allons extraire les patrons morphosyntaxiques à l'aide d'un simple programme Perl utilisant un fichier de paramètres contenant un motif. Le script suivant permet d'extraire dans un premier temps les termes du texte à partir du fichier Cordial. Puis, dans un second, d'appliquer un patron morphosyntaxique, afin de n'extraire que les suites de catégories grammaticales indiquées dans le fichier de paramètre.
Script d'extraction de patrons morphosyntaxiques Fichier de paramètresL'exécution du script avec le patron NOM-PREP-NOM nous permet d'obtenir la liste des occurrences suivante.
Liste NOM-PREP-NOMExtrait de la sortie :
Nous pouvons tester cette opération sur des éléments plus spécifiques, comme les noms propres mentionnés dans les articles (patron NP.?.?.? NP.?.?.?).
Liste NP-NPExtrait de la sortie :
La fonction d'étiquetage de Cordial a l'avantage d'être précise dans sa catégorisation, et de permettre ainsi l'application de patrons spécifiques. Elle offre également un taux d'erreur plus faible que d'autres programmes d'étiquetage morphosyntaxique comme TreeTagger. Le seul inconvénient du logiciel est l'impossibilité de l'utiliser en ligne de commande et donc de l'intégrer au sein d'un script.
La technologie XSLT/Xpath fait partie du langage XML. Elle permet d'effectuer des traitements sur des nœuds donnés au sein d'un document structuré au format XML grâce à l'application de règles, en agissant comme une feuille de style. La technologie s'appuie sur le langage de requête XPath.
Pour obtenir des patrons morphosyntaxiques, nous allons utiliser cette fois-ci le corpus au format XML étiqueté avec TreeTagger. Nous pouvons, comme pour la sortie Cordial, extraire uniquement les motifs NOM-PREP-NOM. Il nous suffit pour cela de créer une feuille de style XSL indiquant les nœuds à extraire, et d'ajouter dans notre fichier XML étiqueté une ligne indiquant la feuille de style XSL à appliquer.
Feuille de style XSLUne fois la feuille de style avec motif NOM-PRP-NOM appliquée, nous obtenons le résultat suivant
Liste NOM-PRP-NOMExtrait de la sortie :
Comme pour l'extraction de motifs sur la sortie Cordial, nous pouvons extraire les patrons des noms de personnes. Dans TreeTagger, ces derniers peuvent être extraits à l'aide du motif NAM-NAM.
Liste NAM-NAM Feuille de style XSLExtrait de la sortie :
Si l'on compare les premiers résultas avec ceux de la sortie Cordial, on remarque que l'opération d'extraction par feuille de style sur sortie TreeTagger n'a pas reconnue le nom "Alexia Stresi" contrairement au script précédent. Par ailleurs, si l'on regarde de plus près, on constate que ce nom a été étiqueté par TreeTagger avec les balises "VER:simp" et "VER:ppr", autrement dit, en tant que verbes.
Malgré de type d'erreur, si l'on compare le nombre de tokens, on s'aperçoit que pour le même motif NAM-NAM, l'extraction sur sortie Cordial permet d'obtenir 1419 résultats contre 1545 avec la sortie TreeTagger. On observe la même tendance pour le motif NOM-PREP-NOM. Cette différence de résultats est liée à la plus grande précision de l'étiquetage de Cordial, qui catérogise par exemple les articles contractés "au" et "des" en tant que "DETDETDMS" et "DETDPIG" respectivement, tandis que TreeTagger rangera ces mots dans la super-catégorie "PRP".
Pour finir, nous utiliserons une troisième méthode utilisant exclusivement le langage de requêtes Xquery basé, comme la technologie XSLT, sur le langage de requête XPath. Pour y parvenir, nous nous servirons du logiciel d'édition XML BaseX.
BaseX reconnaît automatiquement l'ensemble de l'arborescence XML. Notre but sera, comme pour XSLT/Xpath, d'extraire uniquement les termes correspondant aux patrons morphosyntaxiques de notre choix, en restreignant le contenu affiché. Pour ce faire, nous nous baserons une nouvelle fois sur le fichier XML étiqueté avec TreeTagger, avec comme patrons les séquences NOM-PRP-NOM et NAM-NAM.
Comme pour XSLT/Xpath, nous devrons sélectionner les nœuds souhaités en pointant d'abord vers les éléments de l'arborescence à traiter, puis en affichant les résultats à l'aide d'une condition. La requête et les résultats pour la reconnaissance des patrons NOM-PRP-NOM se présentent ainsi...
Requête Xquery : NOM-PRP-NOM Résultat dans BaseXExtrait de la sortie :
...ceux des patrons NAM-NAM...
Requête Xquery : NAM-NAM Résultat dans BaseXExtrait de la sortie :
On constate que les deux résultats sont en tous points identiques à ceux générés par l'application de la feuille de style XSL. Cette méthode semble cependant encore plus rapide et moins complexe que la précédente (pas de création de feuille de style, meilleure visualisation des erreurs de saisie éventuelles, plus grande rapidité de traitement).
Pour la dernière étape, nous allons visualiser les relations de dépendance entre les termes de notre corpus grâce au programme Patron2graphe.
Dans notre exemple, nous nous servirons d'une liste de patrons NOM-ADJ afin d'y analyser les occurrences du mot "écrivain".
Exemple de commande d'exécution du programme :
./patron2graphe.exe "utf-8" Liste3_NOM-ADJ.txt motif-utf8.txt > out.log 2> err.log
L'exécution est effectuée sur un corpus donné. Dans notre exemple, nous nous sommes limité à la liste des NOM-ADJ que nous avons extraite à l'étape précédente. Le programme patron2graphe nous permet de limiter les dépendances à un motif particulier. Dans notre liste, nous choisirons de visualiser les mots "écrivains", "écrivain" et "écrivaine" grâce au motif "écrivain.?.?". Nous pouvons alors observer leurs dépendances comme dans l'illustration ci-dessous.
Ce mode de visualisation permet de mettre en évidence la force des relations entre certains termes et la fréquence de leurs co-occurrences. Dans notre exemple, on constate par exemple que les trois formes du mot écrivains sont la plupart du temps associées à un adjectif de nationalité. De même, "écrivain" au masculin est plus fortement lié à "américain", tout comme "américaine" l'est pour pour "écrivaine" ou "anglo-saxons" pour "écrivains" au pluriel.
On constate également, sans suprise, que la forme "écrivain" au masculin est surreprésentée par rapport à sa forme féminine, moins fréquente. De même, si l'on s'attarde encore un peu plus sur les pays d'origine, on observe encore une fois une prévalence des pays anglophones (américain, britannique, anglo-saxon, 20 occurrences) et des pays européens (12 pays représentés, 27 occurrences), une représentation moindre des pays d'Amérique du Sud, d'Afrique et du Proche-Orient, et l'absence d'autres régions du monde, comme la Chine et le reste de l'Asie.
Pour tenter de confirmer ces premiers résultats, nous pouvons effectuer une nouvelle opération sur le corpus NOM-ADJ, mais avec cette fois le motif "auteur.?.?". Nous pourrons ainsi voir si ces tendance se reproduisent. Après exécution de la commande, nous obtenons ce nouveau graphe, moins complexe.
Malgré le nombre plus restreint d'occurrences, on constate des proportions similaires dans les résultats obtenus. Ici, la forme féminine n'est plus du tout utilisée, et les pays anglo-saxons sont encore une fois en tête. Les pays européens sont également en majorité, accompagnés des adjectifs "afro" et "japonais". On voit toutefois que le mot "auteur" est plus fréquemment employé avec des adjectifs qualificatifs (par opposition aux adjectifs de nationalité) que le mot "écrivain".