Dans la BAO2, on distingue deux parties différentes : une partie est gérée avec Treetagger et l'autre partie avec Cordial. Dans les deux cas, le but est d'obtenir en sortie des fichiers étiquetés.
Présentation de Treetagger
Treetagger est un outil qui annote des textes et fournit des informations qui concernent les lemmes. Pour l'annotation, Treetagger dispose de 33 étiquettes qui représentent les différentes parties du discours. Voici ces étiquettes :
ABR Abreviation
ADJ Adjectif
ADV Adverbe
DET:ART Article
DET:POS Pronom Possessif (ma, ta, ...)
INT Interjection
KON Conjunction
NAM Nom Propre
NOM Nom
NUM Numéral
PRO Pronom
PRO:DEM Pronom Démonstratif
PRO:IND Pronom Indefini
PRO:PER Pronom Personnel
PRO:POS Pronom Possessif (mien, tien, ...)
PRO:REL Pronom Relatif
PRP Préposition
PRP:det Préposition + Article (au,du,aux,des)
PUN Ponctuation
PUN:cit Ponctuation de citation
SENT Balise de phrase
SYM Symbole
VER:cond Verbe au conditionnel
VER:futu Verbe au futur
VER:impe Verbe à l’impératif
VER:impf Verbe à l’imparfait
VER:infi Verbe à infinitif
VER:pper Verbe au participe passé
VER:ppre Verbe au participe présent
VER:pres Verbe au présent
VER:simp Verbe au passé simple
VER:subi Verbe à l’imparfait du subjonctif
VER:subp Verbe au présent du subjonctif
On constate que Treetagger fournit une grande variété d'étiquettes pour les pronoms. On peut aussi distinguer les verbes en fonction de leur temps (même si tous les temps ne sont pas représentés). La catégorie SENT est utilisée pour représenter les points de fin de phrase. On constate, enfin, qu'aucune distinction n'est faite pour le genre, le nombre ou la personne (dans la conjugaison des verbes).
Treetagger fonctionne actuellement sur les langues suivantes : allemand, anglais, français, italien, grec et ancien français. Il est facilement adaptable à d'autres langues si on dispose d'un lexique et d'un corpus étiqueté manuellement pour l'entrainement.
Treetagger fournit une sortie au format XML. Il s'utilise uniquement en ligne de commande.
Treetagger se présente sous la forme d'un répertoire qui contient plusieurs autres répertoires :
- bin contient les programmes utilisés pendant l'exécution de treetagger
- lib contient tous les fichiers de paramètres qui permettent l'étiquetage dans une langue particulière
- cmd contient le programme de tokenisation et le programme de conversion de la sortie au format XML
Utilisation de Treetagger
L'entrée que l'on fourni à Treetagger doit contenir un mot par ligne. Pour ça, on utilisera le programme : tokenise-fr.pl. Ce programme est adapté à la langue française. Puis, on utilisera : tree-tagger.exe qui étiquette le texte et enfin, on se servira de : treetagger2xml.pl pour avoir en sortie une fichier XML.
Pour utiliser ces trois programmes, nous allons intégrer des lignes dans notre script. Ces lignes appelleront les programmes de Treetagger. Voici donc le nouveau script (nous n'avons mis que la partie du script modifiée mais le script est disponible en entier pour le téléchargement dans l'onglet Scripts) :
my $output1="SORTIEtreetagger.xml";#pour dire que la sortie sera au format XML
DEBUT DU PROGRAMME
if (exists($tableaudestextes{$propre})) { # on mémorise $propre
$tableaudestextes{$propre}++; # on incrémente la valeur de $propre FACULTATIF (pour faire plaisir à M. FLEURY)
} # mais on ne la réimprime pas afin de supprimer les doublons si il existe déjà
else { # on entre dans cette boucle si il n'existe pas encore
open (FILE, ">tmp.txt");#on ouvre un fichier temporaire
print FILE $propre;#on met le contenu de $propre dans tmp.txt
close FILE;# on ferme le fichier temporaire
print "ETIQUETAGE \n"; #on commence l'étiquetage
system ("perl \"./TreeTagger/cmd/tokenise-fr.pl\" tmp.txt > resultat-tokenize.txt");#on lance tokenise
system ("tree-tagger.exe french.par -lemma -token -no-unknown resultat-tokenize.txt >resultat-etiquetage.txt");#on lance treetagger sur le résultat de tokenise
system ("perl \"./TreeTagger/cmd/treetagger2xml.pl\" resultat-etiquetage.txt");# on convertit au format xml ce qui était au format txt
print "FIN ETIQUETAGE \n";# on a fini l'étiquetage
open(FILE, "resultat-etiquetage.txt.xml");# on ouvre le résultat de l'étiquetage qui est au format xml
my $tmp=<FILE>; #on met la première ligne car on ne veut pas avoir plusieurs fois l'en-tête
my $resultat="";# on initialise la variable résultat
while(my $lignetmp=<FILE>) {# on lit toutes les lignes de resultat-etiquetage.txt.xml
$resultat.=$lignetmp;#on concatène chaque ligne dans $resultat
}
close(FILE);#on ferme le fichier
# fichier treetagger2.xml sera ds un fichier -> $resultat a concatener dans DUMPFULL
$DUMPFULL1.=$resultat; # on concatène le contenu de $propre obtenu dans chaque boucle
$i++; # on incrémente le compteur
$tableaudestextes{$propre}++; # on incrémente pour dire qu'on a déjà rencontré ce texte pour qu'après si on le retrouve on ne réimprime pas la même séquence
FIN DU PROGRAMME
tmp.txt est un fichier qui va contenir au fur et à mesure du traitement le contenu de chaque flux.
On utilise à trois reprises system ( ) qui permet d'exécuter une commande. system ( ) s'assure que la commande s'est bien exécutée et retourne une valeur. Analysons ces trois lignes.
---system ("perl \"./TreeTagger/cmd/tokenise-fr.pl\" tmp.txt > resultat-tokenize.txt")
Cette ligne appelle le programme : tokenise-fr.pl qui travaille sur le fichier temporaire : tmp.txt et fournit resultat-tokenise.txt qui contient tous les mots du textes séparés par des sauts de ligne. Voici un court extrait de ce corpus :
enfant
remis
en
juin
2005
aux
services
sociaux
colombiens
est
bien
Emmanuel
En regardant de plus près cette sortie, on comprend que les commandes de Treetagger travaillent bien flux après flux car par exemple dans resultat-tokenise.txt, on ne voit que la tokenisation d'un flux à la fois.
---system ("tree-tagger.exe french.par -lemma -token -no-unknown resultat-tokenize.txt >resultat-etiquetage.txt");
Cette ligne utilise tree-tagger.exe qui gère l'étiquetage. On voit également qu'on fait appel à french.par qui permet de travailler sur le français. L'option -lemma permet d'écrire les lemmes. L'option -token permet d'écrire les tokens. L'option -no-unknown réécrit le token plutôt que d'écrire : <unknown> quand il ne connaît pas le lemme.
On prend ici en entrée la sortie de la ligne précédente et obtient en sortie : resultat-etiquetage.txt.
---system ("perl \"./TreeTagger/cmd/treetagger2xml.pl\" resultat-etiquetage.txt");
Cette ligne appelle treetagger2xml.pl pour convertir la sortie de la ligne précédente au format XML. On obtient finalement : resultat-etiquetage.txt dont voici le début :
<element><data type="type">PRP</data><data type="lemma">parmi</data><data type="string">Parmi</data></element>
<element><data type="type">DET:ART</data><data type="lemma">le</data><data type="string">les</data></element>
<element><data type="type">ADJ</data><data type="lemma">nouveau</data><data type="string">nouvelles</data></element>
<element><data type="type">NOM</data><data type="lemma">tendance</data><data type="string">tendances</data></element>
<element><data type="type">PUN</data><data type="lemma">,</data><data type="string">,</data></element>
<element><data type="type">DET:ART</data><data type="lemma">le</data><data type="string">le</data></element>
<element><data type="type">ADJ</data><data type="lemma">biologique</data><data type="string">bio</data></element>
<element><data type="type">KON</data><data type="lemma">et</data><data type="string">et</data></element>
<element><data type="type">DET:ART</data><data type="lemma">le</data><data type="string">l'</data></element>
IMPORTANT : pour utiliser Treetagger avec Windows, french.par et tree-tagger.exe doivent être au même niveau (dans l'arborescence) que le fichier qui doit être étiqueté.
Présentation et utilisation de Cordial
Cordial est un programme payant qui fait, entre autres, de l'étiquetage. Cordial a été développé pas Synapse. Il prend en entrée un fichier au format texte et donne en sortie un nouveau fichier au format cnr qui contient différentes informations comme : la forme, le lemme, la catégorie.
Une fois le texte ouvert dans Cordial, il est nécessaire de choisir les options pour l'étiquetage. Dans notre cas, nous avons coché :
Numérotation des mots de chaque phrase -> NON
Lemmes
Type grammatical -> Abrégé en majuscules
Codage spécialisé -> Aucun
Traitement des erreurs -> Ne pas corriger, signaler les erreurs
On peut le voir sur cette image :
Cliquez sur l'image pour l'agrandir
Voici un extrait du résultat obtenu :
qui qui PRI
vient venir VINDP3S
de de PREP
plonger plonger VINF
le le DETDMS
Kenya Kenya NPMS
dans dans PREP
une un DETIFS
vague vague NCFS
de de PREP
violences violence NCFP
. . PCTFORTE
La le DETDFS
guerre guerre NCFS
pour pour PREP
l' le DETDFS
investiture investiture NCFS
républicaine républicain ADJFS
dans dans PREP
l' le DETDMS
Iowa Iowa NPMS
, , PCTFAIB
dont dont PRI
le le DETDMS
caucus caucus NCMIN
du du DETDMS
3 3 NCMIN
janvier janvier NCMIN
est être VINDP3S
On constate que Cordial fournit un jeu d'étiquettes différent de celui de Treetagger. Notamment, Cordial donne des informations sur le nombre et le genre pour les noms, les déterminants et les ajectifs et donne des informations de personnes pour les verbes. De plus, Cordial distingue différents types de ponctuation : PCTFAIB et PCTFORTE. La ponctuation faible désigne, par exemple, les trois petits points ou la virgule alors que la ponctuation forte désigne le point ou les deux points.
Différences d'étiquetage entre Cordial et Treetagger
Treetagger et Cordial ne fonctionnent pas de la même façon, on vient de le voir. Il est donc normal de trouver des différences dans l'étiquetage des deux fichiers.
La première chose que l'on remarque en comparant les deux fichiers est que les mots n'apparaissent pas dans le même ordre. Par exemple, la phrase : un document confidentiel que s'est procuré le Monde commence à la première ligne du fichier fourni par Cordial mais commence à la ligne 6325 dans la sortie de Treetagger.
Cordial traite en un seul token : jusqu'alors (ligne 139) alors que Treetagger décompose en deux tokens (ligne 6460 et 6461). Par contre, Cordial sépare ex de -Yougoslavie (ligne 167 et 168) alors que Treetagger conserve ex-Yougoslavie (ligne 6487).
Cordial reconnait le nom Annan (ligne 322) alors que Treetagger l'étiquette comme une abréviation (ligne 6648). Cordial reconnaît également : Obama (ligne 356) quand Treetagger le considère comme un verbe conjugué au passé simple (ligne 6681). Pour Bercy Cordial ne fait toujours pas d'erreur (ligne 571) alors que Treetagger le considère comme un adjectif (ligne 6897)
Cordial reconnaît également cahier des charges (ligne 9710) alors que Treetagger décompose en cahier, des et charges (lignes 1716 à 1718). Cependant, aucun des deux étiqueuteurs n'analyse premier ministre comme un seul mot (lignes 9768 et 9769 pour Cordial et lignes 1772 et 1773 pour Treetagger).
A la ligne 9770, Cordial indique : kosovar kosovar NCI => Erreur orthographique: kosovar => komsomol alors que Treetagger ne trouve pas de faute d'orthographe et note que kosovar est un nom (ligne 1774).
Les exemples de ce genre sont nombreux et prouvent que Cordial et Treetagger ne focntionnent pas de la même manière.