#===================================================================
#
Etiquetage avec
Treetagger
#===================================================================
<<DOC;
MAAFA ZAHIR DESS IM INALCO
FEVRIER 2006
Usage:
perl
<etiquette-avec-tree-tagger.pl>
<nom-du-fichier-xml>
Le programme prend en entrée le nom du fichier
xml contenant les textes à traiter
le programme construit en sortie un fichier xml contenant le
résultat de l'étiquetage.
DOC
#=============== LE PROGRAMME PRINCIPAL
==================
#!/usr/bin/perl
use warnings;
use diagnostics;
use strict;
#==================== déclaration des variables
====================
#=========================== caracteres spéciaux ================================
my
$cs="ƒŒœµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿŸ";
#=========================================================================
my $i=0;
my $ch;
# contient le
texte a étiqueter à chaque itération
my $nom; # nom du fichier xml source du texte
my $ligne;
my $texte=$ARGV[0]; # le fichier xml en entrée
#============================================================
open(Sortie,">Sortie-etiquetage.xml"); # le fichier en sortie
entete();
# l'entête du fichier xml résultat
$ENV{'PATH'} = "./bin;";
system("set $ENV{'PATH'}");
open (FICH ,"<$texte"); # le fichier en
entrée
while ($ligne=<FICH>)
{
if (
$ligne=~/<NOM>([^<]*)<\/NOM><CONTENU>([^<]*)<\/CONTENU>/)
{
$nom=$1;
# récupérer le nom du fichier source
$ch=$2;
# récupérer le contenu
$ch=~s/([^a-zA-Z0-9$cs])/\n$1\n/g;
# un mot par ligne
open (FT,">".$i.".tmp.txt"); # mettre le résultat
dans un fichier temporaire
print FT $ch;
close(FT);
# lancer treetagger
system("./bin/tree-tagger.exe
-token -lemma -no-unknown ./lib/french.par $i.tmp.txt $i.tagger.txt");
# le fichier
résultat en xml
system("./treetagger2xml_mod.pl $i.tagger.txt");
# ajouter le
résultat de l'etiquetage au fichier xml final
traiter();
$i++;
}
}
fin(); # fin du fichier xml
close(FICH);
close(Sortie);
nettoyer();# supprimer les fichiers temporaires
#=====================================================================
#
ajouter le résultat de l'etiquetage au fichier xml final
#====================================================================
sub traiter
{
my $f="";
my $lig;
open(FH,"<".$i.".tagger.txt.xml");
# lecture du fichier xml
temporaire
while
(defined($lig=<FH>))
{
$f=$f.$lig;
}
# ajouter le résultat au fichier xml final en
spécifiant le nom du fichier source
$f=~s/<file>/<file>\n<name>$nom<\/name>\n/;
print Sortie $f;
close(FH);
}
#========================================
# Entête du fichier XML final
#=======================================
sub entete {
print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\"
standalone=\"no\"?>\n";
print Sortie "<PARCOURS>\n";
print Sortie "<NOM>MAAFA ZAHIR</NOM>\n";
print Sortie "<ETIQUETAGE>\n";
}
#========================================
# fin du fichier xml final
#=======================================
sub fin {
print Sortie "</ETIQUETAGE>\n";
print Sortie "</PARCOURS>\n";
}
#===========================================
# supprimer tous les fichiers temporaires
#===========================================
sub nettoyer
{
system '/bin/rm.exe *.tmp.txt';
system '/bin/rm.exe *.tagger.*';
}