Boîte à Outils n°3 : Extraction de patrons morphosyntaxiques



Présentation

1. Objectif

L’objectif de cette troisième boîte à outils est de parcourir les fichiers étiquetés par TreeTagger et Talismane générés lors de la BàO2 et d'en extraire des patrons morpho-syntaxiques via différentes méthodes de traitement automatique. Par exemple, nous souhaitons extraire tout les syntagmes qui respectent le patron NOM-ADJ. Nous présentons ici différentes méthodes pour procéder à cette tâche en utilisant : le langage Python sur les fichiers TXT, le langage XSLT et le langage XQuery pour les fichiers XML.
Les 4 patrons morpho-syntaxiques extraits sont les suivants :
 - NOM ADJ
 - ADJ NOM
 - VERBE DET NOM
 - NOM PREP NOM PREP


2. Le corpus

Tout fichier de sortie étiqueté de la BàO2 peut être traité. A savoir, les fichiers XML étiquetés avec TreeTagger, et les fichiers TXT étiquetés avec Talismane. Selon les langages utilisés, le format des fichiers utilisés en entrée de traitement seront différents :
 - Pour le langage python nous avons utilisé les fichiers XML et TXT.
 - Pour le langage XSLT, qui est un langage de transformation de XML, nous utiliserons des fichiers XML
 - Pour le langage XQuery, qui est un langage de requête XML, nous utiliserons donc XML.
Toutefois, jusqu'à présent nos fichiers étiquetés avec Talismane étaient au format TXT. Pour pouvoir les utilisés avec les langages XSLT et XQuery nous avons eu recours au script ci-dessous pour transformer les fichiers Talismane TXT en XML.
Script PERL pour talismane(TXT->XML)


3. Outils utilisés

Pour la réalisation des différents méthodes d'extraction de la BAO3, nous avons utilisé les langages de programmation Python, XSLT sur Oxygen et XQuery sur BaseX.


Traitement

Nous avons utilisés différentes méthodes pour extraires des patrons morphosyntaxiques à partir des fichiers générés lors de la BAO2. Dans la suite de ce travail nous vous présenterons les résultats d'extraction de 4 rubriques : A la Une, International, Cutlure et Cinéma.
Le traitement effectué dans BAO3 : extraction de patrons morpho-syntaxiques avec 3 méthodes différentes.
Données de départ : fichiers de sortie de BAO2
Sortie : fichiers TXT


SCRIPT

Version 1 : SCRIPT PYTHON AVEC LXML ET XPATH
Langage utilisé : Python
Méthode : Parcours d'arborescence avec lxml et xpath (les patrons à extraire doivent être spécifiés dans un fichier donné en argument à la commande)
Commande :$ python3 BAO3.py FICHIER FIC_PATRONS
Code :

Programme Pyhton


Version 2 : XSLT
Langage utilisé : XSLT
Méthode : Parcours de l'arborescence du fichier XML avec XPath et récupération des patrons. Les patrons sont spécifiés dans le script. Pour une visualisation des résultats plus nette nous faisons passer le traitement dans une commande bash qui compte et trie les résultats dans un ordre décroissant
Commande bash :$ xsltproc fichier.xml | sort | uniq -c | sort -fgr > sortie.txt
Remarque : Les scripts mis en place pour traiter les fichiers Talismane et TreeTagger suivent exactement la même structure. La seule différence repose dans le nom des balises de l'arborescence.
Code : patron NOM-ADJ pour un fichier étiqueté avec Talismane

Vous pouvez retrouver tous les scripts classés par patron et étiqueteur ci-dessous :

ETIQUETEUR
NOM-ADJ
ADJ-NOM
VERBE-DET-NOM
NOM-PRP-NOM-PRP
TOUT
TALISMANE
TREETAGGER


Version 3 : XQUERY
Langage utilisé : XQuery
Méthode : XQuery est un langage de requête qui nous permet d'interroger une base de donnée XML. Pour cette partie nous avons utilisé le logiciel BaseX.
Commande : pas de commande pour cette méthode.
Remarque : Les scripts mis en place pour traiter les fichiers Talismane et TreeTagger suivent exactement la même structure. La seule différence repose dans le nom des balises de l'arborescence.
Exemple : patron NOM-PRP-NOM-PRP pour un fichier étiqueté avec TreeTagger


for $article in collection("3208")//article
for $token1 in $article/element
let $token2 := $token1/following-sibling::element[1]
let $token3 := $token1/following-sibling::element[2]
let $token4 := $token1/following-sibling::element[3]
where $token1/data[1]="NOM" and $token2/data[1][contains(text(),"PRP")] and $token3/data[1]="NOM" and $token4/data[1][contains(text(),"PRP")]
return string-join(($token1/data[3], $token2/data[3], $token3/data[3], $token4/data[3]), " " )
							

Vous pouvez retrouver tous les scripts classés par patron et étiqueteur ci-dessous :

ETIQUETEUR
NOM-ADJ
ADJ-NOM
VERBE-DET-NOM
NOM-PRP-NOM-PRP
TOUT
TALISMANE
TREETAGGER


Résultats

1. Résultat avec Python :

ETIQUETEUR
SORTIE
TALISMANE
TREETAGGER
LES 2

2. Résultat avec XSLT :

RUBRIQUE
NOM-ADJ
ADJ-NOM
VERBE-DET-NOM
NOM-PRP-NOM-PRP-NOM
A la Une---N°3208
International---N°3210
Culture---N°3246
Cinéma---N°3476
Sorties XSLT Sorties XSLT Talismane Sorties XSLT TreeTagger

3. Résultat avec XQUERY :

RUBRIQUE
NOM-ADJ
ADJ-NOM
VERBE-DET-NOM
NOM-PRP-NOM-PRP-NOM
A la Une---N°3208
International---N°3210
Culture---N°3246
Cinéma---N°3476
Sorties XQuery Sorties XQuery Talismane Sorties XQuery TreeTagger

4. Remarque :

Après un rapide aperçu des résultats, on se rend compte que l'extraction d'un même patron donne lieu à des résultats différents selon l'étiqueteur employé. Bien qu'il existe différent logiciel pour une même tâche (ici, l'étiquettage morpho-syntaxique), il convindra pour une études du contenu textuel de selectionner celui qui se rapporche le plus des visé du projet.