Etiquetage morpho-syntaxique

Les textes collectés sont maintenant prêts pour être étiquetés. Dans cette partie nous testons deux programmes d'étiquetage automatique (Cordial et TreeTagger) intégrant un lexique de formes fléchies, ainsi qu'un module de désambiguïsation lexicale. Les différences remarquées concernent en premier lieu la méthode de lancement du programme. En effet l'étiquetage par TreeTagger peut être automatisé, alors que Cordial nous oblige à passer par une interface graphique. Ceci est compensé par une plus grande précision de Cordial au niveau de l'analyse syntaxique.


TreeTagger

TreeTagger est un étiqueteur de parties du discours probabiliste utilisant des arbres de décision, conçu par H. Schmid (Université de Stuttgart). Le programme comprend également des modules de tokenisation et lemmatisation.

Pendant l'analyse d’un mot, le lexique est examiné en premier lieu. Si le mot s’y trouve, le vecteur des probabilités d’étiquettes est renvoyé. Sinon, TreeTagger essaie de deviner l’étiquette correcte d’après les dernières lettres du mot (probabilités de suffixe). Des modules librement disponibles de TreeTagger existent aussi pour l’anglais, l’allemand et l’italien.

Appel du programme

L'étiquetage par TreeTagger va se faire en même temps que le parcours d'arborescence. La version de TreeTagger pour Windows dont nous disposons est limitée en nombre de mots et démande en entrée un texte déjà verticalisé (un mot par ligne). Nous allons donc l'appeler après l'extraction de chaque phrase, ce qui va se reveler extrêmment coûteux en termes de temps...

La tokenisation est assurée par la fonction split de Perl qui nous permet de ranger les mots de la phrase dans un hachage (ou tableau de scalaires). La phrase ainsi découpée est imprimée dans un fichier temporaire que nous appelons toto.tmp.

# segmentation du texte par la fonction split. Chaque mot est rangé dans un 
tableau, ce qui donne un hachage: @texteTab
@textTab = split (/[ ,;!?\"\'\.:]/,$zoneTexte); # ouverture d'un fichier temporaire open(FileTemp, ">toto.tmp"); # dans lequel on écrit un mot par ligne foreach $elmt (@textTab) { print FileTemp $elmt,"\n"; } close(FileTemp);

L'appel de TreeTagger sur le fichier toto.tmp se fait par le biais de la fonction system qui renvoie temporairement au système d'exploitation.

system("$chemin/bin/tree-tagger.exe -token -lemma -no-unknown 
$chemin/lib/french.par toto.tmp toto.out");

Le nom de l'étiqueteur est suivi par plusieurs paramètres:

Voici une phrase étiquetée par TreeTagger. Sur chaque ligne on a un mot suivi par sa catégorie grammaticale et son lemme, séparés par des tabulations:

Démonstration	NOM	démonstration
de	PRP	de
force	NOM	force
des	PRP:det	du
prosyriens	NOM	prosyriens
à	PRP	à
Beyrouth	NOM	Beyrouth

Structuration des résultats

Afin de rendre l'étiquetage morpho-syntaxique plus facilement exploitable par la suite, nous voulons maintenant transformer la sortie de texte brut en un document structuré XML. Chaque type de donnée (mots, lemmes et étiquettes) sera inclus dans une balise <data> et distinguée par l'attribut type.

Le script (ttagger2xml.pl) ressemble aux scriptes de génération de XML précédemment commentés, en ce qui concerne la lecture des paramètre, l'ouverture des flots d'E/S et l'écriture de l'entête XML.

Pour récuperer les trois données de chaque ligne, nous utilisons une expression régulière avec trois parenthésages: le contenu de chaque parenthésage est affecté automatiquement par Perl à des variables numérotées ($1, $2, $3...). Nous pouvons ensuite écrire nos balises XML en y incluant les données extraites:

 while ($Ligne = <Entree>) {
	if ($Ligne!~/\ô\¯\:\\ô\¯\:\\/) {
	# Remplacement des guillemets par <![CDATA["]]> 
	# (évite erreur d'interprétation XML)
	$Ligne=~s/\"/<![CDATA[\"]]>/g;
	$Ligne=~/([^\t]*)\t([^\t]*)\t(.*)$/;	
	# le contenu de chaque parenthésage est affecté automatiquement par Perl
	# à une variable scalaire nommée $1, $2... etc.
	$mot=$1;
	$lemme=$3;
	$cat=$2;

	$Ligne="<element>\n <data type=\"type\">$cat<\/data>\n <data type=\"lemma\">$lemme<\/data>\n <data type=\"string\">$mot<\/data>\n<\/element>\n";
	print Sortie $Ligne;
}

Le programme ttagger2xml.pl est appelé après chaque exécution de TreeTagger. La fichier XML contenant une phrase étiquetée est ensuite concaténé à la variable $DUMPFULL.

Pour visualiser le code du programme global de parcours de fils RSS, étiquetage et production d'un document XML cliquez ici: AB_parcours-ttagger.pl. La sortie du programme exécuté sur une partie du corpus est disponible ici: sortieTtagger.xml. En voici un extrait:

<element>
 <data type="type">NOM</data>
 <data type="lemma">démonstration
</data>
 <data type="string">Démonstration</data>
</element>
<element>
 <data type="type">PRP</data>
 <data type="lemma">de
</data>
 <data type="string">de</data>
</element>
<element>
 <data type="type">NOM</data>
 <data type="lemma">force
</data>
 <data type="string">force</data>
</element>

Cordial

Le logiciel de correction ortographique et grammaticale développé par la société Synapse dispose désormais d'une option d'étiquetage morpho-syntaxique de textes français. La qualité de l'analyse est plus élévée que celle de TreeTagger. Le revers de la médaille est que le programme, payant, n'est utilisable qu'à partir d'une interface graphique, ce qui nous empêche d'automatiser le traitement.

La meilleure solution semble être la concaténation des zones textuelles du corpus de fils RSS en un format de texte simple. Le fichier sera ensuite chargé dans Cordial, et le module d'étiquetage sera exécuté une seule fois pour tout le corpus. Pour ce faire, nous n'avons qu'à modifier légèrement le script de filtrage et de parcours d'arborescence.

Après avoir configuré "au minimum" l'étiquetage de Cordial (notamment en désactivant les options de calcul fréquentiel), nous obtenons quelque chose qui ressemble à la sortie de TreeTagger. Sur chaque ligne nous trouvons en effet la forme, le lemme et la catégorie du mot, les trois éléménts étant séparés par des tabulations. Nous verrons par la suite comment ce format peut être exploité pour continuer notre chaîne de traitements textuels.

Aller à l'étape suivante