BàO #2 [ Étiquetage ]

Objectif

Le but de cette deuxième boîte à outils est d'utiliser des étiqueteurs morpho-syntaxiques pour obtenir une version étiquetée du contenu textuel des fils RSS, où chaque mot (token) est associé à une catégorie syntaxique et un lemme.

Pour cela, nous avons utilisé deux outils :

  • TreeTagger, piloté via un interprète de commandes ;
  • Cordial, un logiciel payant avec interface graphique qui intègre entre autres un étiqueteur.

La dernière étape consiste à convertir les fichiers étiquetés en XML, pour une meilleure représentation et visualisation des données.

Étiquetage avec TreeTagger

TreeTagger est un programme d'étiquetage morpho-syntaxique développé par l'Université de Stuttgart, qui est largement utilisé dans la recherche. Il possède en effet de nombreux points forts : il est gratuit, dispose de ressources linguistiques importantes permettant de l'utiliser sur de nombreuses langues, et il peut être lancé via un interprète de commandes (et peut donc être intégré à nos scripts). Il se base sur une approche probabiliste pour déterminer les catégories morpho-syntaxiques des tokens d'un texte (et non sur des règles), ce qui peut par contre dégrader sa précision (par rapport à Cordial, par exemple).

Le dossier "TreeTagger" fourni avec les scripts "Parcours-fils" (disponibles ici en version Grep et ici en version XMLRSS) contient un exécutable pour Windows, un fichier de paramètres pour le français et un tokéniseur. Pour l'installation, nous avons cependant suivi les étapes indiquées sur cette page : elles permettent d'exécuter TreeTagger sans faire référence explicitement aux fichiers. Pour plus de détails, vous pouvez vous rapporter à la section FAQ de ce site (deuxième onglet de la page d'accueil).

Attention ! Il semblerait que le programme ne puisse pas tourner sur les versions 64 bits des systèmes d'exploitation Windows (pas de problème sur Mac).

Pour exécuter le programme, nous avons seulement dû rajouter quelques lignes à la fin des scripts de parcours des fils RSS (cf. BàO #1) pour définir une procédure qui appelle TreeTagger (procédure lancée par le script à la toute fin, une fois les sorties crées) :

1sub lancetreetagger {
2system("perl TreeTagger/tokenise-fr.pl $outputtmp |
tree-tagger TreeTagger/french.par -lemma -token -no-unknown -sgml > treetagger.txt");
3}

Via la fonction system(), on lance d'abord le script perl "tokenise-fr.pl" (qui doit être placé dans le dossier "TreeTagger", dans le même répertoire que les scripts "Parcours-fils"). Il prend en entrée le fichier textuel contenant les titres et résumés des fils RSS, ainsi que des balises repérant les différents fichiers et des "blocs" (correspondant à un titre ou un résumé). En sortie, on obtient une version "tokénisée" du contenu textuel, avec un mot par ligne. On exécute ensuite TreeTagger avec un fichier de paramètres pour le français, en spécifiant les options -lemma et -token pour qu'il affiche le lemme et la forme à côté de la catégorie syntaxique, -no-unknown pour qu'il remplace les lemmes inconnus par leur token, et -sgml pour qu'il n'étiquette pas les balises rencontrées (repérant un début de fichier ou un bloc de phrases).

On obtient en sortie un fichier comportant un mot par ligne, où chaque ligne suit le modèle token [tabulation] catégorie [tabulation] lemme.

Exemple de sortie : rubrique "A La Une"

Étiquetage avec Cordial

Cordial est un programme développé par la société Synapse. Le logiciel est avant tout un correcteur orthographique et grammatical, qui intègre cependant des outils qu'il est possible d'utiliser indépendamment, et notamment un étiqueteur morpho-syntaxique. C'est un logiciel payant (et même très cher !) que nous n'avons pu utiliser que sur les machines de l'ILPGA... Malgré ce gros inconvénient, le programme propose un étiquetage basé à la fois sur des probabilités, mais également sur des règles grammaticales, ce qui permet un étiquetage généralement plus fin et plus précis que celui obtenu avec TreeTagger.

Le programme ne pouvant pas être piloté en ligne de commande, il faut utiliser l'interface graphique pour lancer l'étiquetage. Il suffit pour cela de charger le texte, de cliquer sur "Syntaxe" > "Etiquetage de texte" dans la barre de menu, et de tout décocher à l'exception de "Lemme" et "Type Grammatical" dans la fenêtre qui apparaît. Il ne reste plus qu'à admirer la barre de progression et laisser Cordial faire son travail...

Logiciel Cordial - Fonction d'étiquetage morpho-syntaxique Logiciel Cordial - Fonction d'étiquetage morpho-syntaxique

On obtient en sortie un fichier (au format .cnr) comportant un mot par ligne, où chaque ligne suit le patron token [tabulation] lemme [tabulation] catégorie (différent de celui de TreeTagger).

Exemple de sortie : rubrique "A La Une"

Formatage en XML

Pour cette dernière étape, nous avons adapté le script treetagger2xml.pl (fourni au début du cours) pour qu'il génère un fichier XML pour la sortie Cordial et la sortie TreeTagger, ainsi qu'un fichier général alignant les deux étiquetages.

Ce nouveau script, visible ici, prend en entrée les résultats de l'étiquetage de TreeTagger et Cordial. La syntaxe à employer est la suivante :

Marjorie&Axel@pluriTAL ~
$ perl tag2xml.pl treetagger.txt cordial.cnr

Le script détermine s'il a affaire à un fichier TreeTagger ou Cordial en fonction de l'extension : il faut donc bien veiller à ce que le fichier de Cordial soit au format .cnr, et non .txt. Les balises et mots-clés intégrées au moment de l'exécution du script principal de la BàO #1 permettent de se repérer à l'intérieur des fichiers, et de remplir les valeurs des attributs des balises XML des fichiers de sortie. Les fichiers XML produits ont la forme

1<PARCOURS methode="Cordial ou TreeTagger">
2<RUBRIQUE rub="Nom de la rubrique">
3<ETIQUETAGE fichier="Nom du fichier">
4<PHRASE>
5...
6</PHRASE>
7</ETIQUETAGE>
8</RUBRIQUE>
9</PARCOURS>

pour la version TreeTagger et Cordial, et

1<PARCOURS methode="Cordial + TreeTagger">
2<RUBRIQUE rub="Nom de la rubrique">
3<ETIQUETAGE fichier="Nom du fichier">
4<PHRASE>
5<VERSION prog="Treetagger">
6...
7</VERSION>
8<VERSION prog="Cordial">
9...
10</VERSION>
11</PHRASE>
12</ETIQUETAGE>
13</RUBRIQUE>
14</PARCOURS>

pour le fichier général regroupant les deux étiquetages.

Dans tous les cas, chaque mot étiqueté est présenté sous la forme

1<element> <data type="type">Catégorie</data> <data type="lemma">Lemme</data> <data type="string">Forme</data> </element>

(le tout sur une seule ligne, pour éviter des soucis de parcours par le module perl XML::XPath dans la BàO #3). Le script lit donc chaque ligne étiquetée et y identifie le lemme, la forme et la catégorie en fonction du programme utilisé (déterminé à partir de l'extension), et les replace dans l'ordre indiqué ci-dessus.

En pratique, le script parcourt d'abord le fichier TreeTagger. Lorsqu'il tombe sur une balise <BLOC> signalant le début d'un bloc (titre ou résumé), il passe à Cordial. Lorsqu'il rencontre le mot-clé "BLOCDEPHRASE" dans le fichier Cordial, il repasse à TreeTagger : ce va-et-vient permet de faire en sorte que les deux fichiers soient en permanence parcourus en parallèle. Chaque repérage de ces indices déclenche également l'ouverture et la fermeture des balises <PHRASE> et <VERSION> dans le document XML général. Les autres balises dispersées dans l'étiquetage TreeTagger repèrent les noms de fichiers, et permettent de passer à un nouveau bloc <FICHIER> dans les sorties XML. La toute première ligne contient également une balise d'où est extrait le nom de la rubrique. Comme Cordial décompose les balises afin d'étiqueter leur contenu, nous avons opté pour des mots-clés afin de repérer les différentes parties. Ils n'ont pas besoin de mentionner le nom des fichiers, puisque les balises de la version TreeTagger le font déjà : les documents étant alignés, on se sert donc des informations d'un seul des deux.

Enfin, pour permettre une visualisation plus agréable des sorties XML, nous avons ajouté des feuilles de styles XSLT. Du fait du jeu de balises des fichiers XML et de la rigueur de l'alignement, il est très facile d'obtenir des tableaux présentant côte-à-côte l'étiquetage d'un bloc par TreeTagger et par Cordial.

Le seul problème rencontré est dû à la taille des documents XML générés : pas moins de 30 Mo pour les versions "mono-étiquetage" et 60 Mo pour le fichier général, pour une seule rubrique sur toute l'année 2009. Le chargement des données dans un navigateur ou un éditeur de texte est de ce fait relativement long, surtout lorsqu'une feuille de style y est associée.

Télécharger les fichiers

Retrouvez ici l'intégralité des fichiers de la BàO #2

Script "Parcours-fils-Grep.pl"

Cliquez ici pour le visualiser
Cliquez ici pour le télécharger

Script "Parcours-fils-XMLRSS.pl"

Cliquez ici pour le visualiser
Cliquez ici pour le télécharger

Fichiers de résultat (rubrique "A La Une")

Étiquetage TreeTagger (version .txt)
Étiquetage Cordial (version .cnr)

Script "tag2xml.pl"

Cliquez ici pour le visualiser
Cliquez ici pour le télécharger

Versions XML des étiquetages

Étiquetage TreeTagger : extrait | complet
Étiquetage Cordial : extrait | complet
Alignement des deux : extrait | complet