Extraction des patrons morphosyntaxiques

Extrcation à partir des sorties TreeTagger

XSLT est un langage de transformation XML. Il permet entre autres de transformer un fichier XML en lui appliquant des feuilles de style. Pour extraire les patrons avec XSLT nous avons fait 4 feuilles de styles séparés permettant d'extraire les différents patrons, puis nous nous sommes aperçu qu’il était possible de réaliser ces opérations à l'aide d'une feuille de style seulement.
Nous avons donc fait une permettant de réaliser l'opération des quatres séparés. C'est celle-ci que nous allons utiliser que nous allons détailler.
Ces feuilles de style parcours toutes les balises 〈element〉 à l'aide d'une boucle 〈xsl:for-each〉. C’est ce que fait la boucle ci-dessous :

〈?xml version="1.0" encoding="UTF-8"?〉
〈xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"〉
〈xsl:output method="text" encoding="UTF-8" indent="yes"/〉
	
	〈!-- affiche la liste des séquences NOM ADJ & ADJ NOM --〉
	
	〈xsl:template match="/"〉
		〈!-- Pour chaque balise element--〉
		〈xsl:for-each select="//element"〉
			........................
		〈/xsl:for-each"〉
	〈/xsl:template match〉

Ensuite on utilise la balise 〈xsl:if〉 et on instancie la condition à respecter pour que le contenu de la balise soit exécuté. Dans notre feuille regroupant l'extraction de tous les patrons, chaque balise 〈xsl:if〉 permet d'extraire un patron en particulier. En effet, en langage humain on peut résumer la feuille comme ceci : si l'élément itéré est un nom alors on regarde ensuite si l'élément suivant est un adjectif. Pour accéder à l'élément suivant, nous utilisons la commande XPath following-sibling qui nous donne accès aux éléments suivants, en l'occurrence à l'élément courant plus 1 précisé entre crochet. Si nous voulions avoir accès au deuxième élément après l'élément courant nous mettrons 2 entre crochet comme dans le cas de l'extraction d'un patron de longueurs trois. Donc si l'élément suivant est un adjectif, on instancie deux variables qui vont contenir ces deux éléments puis on les affiche. C'est ce que fait cette partie du code ci-dessous :

〈xsl:template match="/"〉
〈!-- Pour chaque balise element--〉
〈xsl:for-each select="//element"〉 

		〈!-- Si la balise data de l'élément courant contient la string NOM et que l'élément suivant est un adjectif --〉
		〈xsl:if test="(./data[1][contains(text(), 'NOM')] and following-sibling::element[1]/data[1][contains(text(), 'ADJ')])"〉                  
			〈!-- On instancie deux variables qui vont contenir le nom et l'adjectif --〉
			〈xsl:variable name="nom1" select="./data[3]"/〉
			〈xsl:variable name="adj1" select="following-sibling::element[1]/data[3]"/〉
			〈!-- On les affiche --〉
			〈xsl:text>PATRONS NOM/ADJ : 〈/xsl:text〉
			〈xsl:value-of select="$nom1"/〉〈xsl:text〉 〈/xsl:text〉
			〈xsl:value-of select="$adj1"/〉〈xsl:text〉
〈/xsl:text〉
			〈xsl:text〉
〈/xsl:text〉
		〈/xsl:if>

Nous avons ajouté 〈xsl:text〉 PATRONS NOM/ADJ : 〈/xsl:text〉 dans la cas où nous utilisons la feuille de style extrayant tous les patrons en même temps. Cela nous permet de distinguer plus aisément les différentes données que nous avons récoltées. Nous recommençons la même opération pour extraire les autres patrons.
Pour appliquer la feuille de style :

xsltproc BAO3_Tout.xsl fichier.xml > fichier.txt

Extraction à partir des sorties UdPipe.

Maintenant, nous allons réaliser une autre feuille de style permettant de réaliser les mêmes traitements que précédemment mais cette fois-ci sur les fichier de sorties UdPipe.
Un fichier de sortie UdPipe est différent d'un fichier de sortie étiqueté par TreeTagger.
Voici un aperçu d'un de nos fichiers xml étiquetés avec UdPipe en comparaison avec un fichier étiqueté avec TreeTagger :

Pour réaliser cette feuille de style nous nous sommes basé sur celle réalisée pour l'extraction des patrons du fichiers étiquetés avec TreeTagger. On a seulement changé les noms des balises et les chemins menant aux informations que nous voulions extraire.

Comparaison des résultats

Ci-dessus nous avons à gauche le fichier texte de sortie après application de la feuille de style sur le fichier XML UdPipe et à droite nous avons les résultats de l'extraction pour le fichier étiquetés avec TreeTagger. On remarque tout d'abord qu'on a extrait plus de patrons avec les fichiers étiquetés par UdPipe qu'avec les fichiers étiquetés par TreeTagger. En allant voir les deux fichiers, on se rend compte que ces différences sont dû naturellement au fait que les fichiers n'ont pas été étiquetés de la même façon. Par exemple dans le fichier étiqueté UdPipe le patrons ADJ/NOM "premiers titres" a été extrait tandis que dans l'autre ce n'est pas le cas. Cela est dû au fait que dans TreeTagger a étiqueté "premiers" comme un NUM et non comme un ADJ comme l'a fait UdPipe.

Voici les feuilles de style ainsi que les résultats obtenus :

Patrons Fichier Résultats
Tout les patrons (TreeTagger) Feuille de style Liste extraction TreeTagger
Tout les patrons (UdPipe) Feuille de style Liste extraction UdPipe

Voici les feuilles de style des patrons de longueurs 3 choisis :

Patrons Fichier Résultats
PROPN/PROPN/VERB (UdPipe) Feuille de style Liste extraction UdPipe
NAM/NAM/VERB (TreeTagger) Feuille de style Liste extraction TreeTagger
PROPN/VERB/VERB (UdPipe) Feuille de style Liste extraction UdPipe
NAM/VER/VER (TreeTagger) Feuille de style Liste extraction TreeTagger

Extraction des relations en dépendances

L’inconvénient avec la méthode XSLT est que nous ne pouvons pas directement afficher les résultats en fonction de la fréquence des couples GOUV/DEP, de manière simple.
Néanmoins, nous pouvons effectuer le tri dans la ligne de commandes.

xsltproc feuille-de-style.xsl fichier-udpipe.xml | sort | uniq -c | sort -nr
Relations Fichier Résultats Résultat trié
Relation 'obj' Feuille de style Liste extraction relation 'OBJ' Liste extraction relation 'OBJ' triée