#/usr/bin/perl
<<DOC;
Nom : Olga Semenova
JANVIER 2005
Le programme prend en entrée le nom du répertoire contenant les fichiers
à traiter, intègre le traitement par le programme Tree-tagger et produit en sortie un fichier contenant sur chaque
ligne le nom du fichier et le résultat d'étiquetage :
mot étiqueté par TreeTagger
DOC
#-----------------------------------------------------------
#le nom du répertoire passe en argument au programme
my $rep="$ARGV[0]";
#on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
#on initialise une variable contenant le flux de sortie
my $DUMPFULL1="";
#----------------------------------------
# on ouvre le fichier de sortie
my $output1="SORTIE-TreeTagger.txt";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#----------------------------------------
#on lance le parcours récursif de l’arbre des fils
&parcoursarborescencefichiers($rep); #recurse!
#----------------------------------------
# on intègre le contenu de la variable contenant le filtrage
print FILEOUT "$DUMPFULL1\n";
close(FILEOUT);
exit;
#----------------------------------------------
##Procedure de parcours
sub parcoursarborescencefichiers {
my $path = shift(@_);
#On ouvre le répertoire
opendir(DIR, $path) or die "can't open $path: $!\n";
#On « récupère » le contenu du répertoire
my @files = readdir(DIR);
closedir(DIR);
#Pour chacun des « éléments » contenus dans le répertoire,
#on va vérifier son statut (répertoire -d ou fichier -f)
foreach my $file (@files) {
next if $file =~ /^\.\.?$/;
#On commence par écrire le chemin complet de l’ « élément »
$file = $path."/".$file;
#Si l’ « élément » est un répertoire (-d = directory) : on relance le parcours
if (-d $file) {
&parcoursarborescencefichiers($file); #recurse!
}
#Si l’ « élément » est un fichier (-f = file) : on lance le traitement de filtrage
#dont le résultat on imprime dans la variable $DUMPFULL1;
#on verifie si "élément" est un fichier
if (-f $file) {
#si oui, on l'ouvre
#et on l"associe à un pointeur FIC et à une variable $file;
open(FIC, $file);
#Parcours du fichier associé au pointeur FIC;
#Chaque ligne est stockée dans la variable $ligne;
while ($ligne=<FIC>)
{ #On vérifie si la ligne contient le motif ci-dessous;
#l'opérateur conditionnel =~ signifie "ressemble à";
#g = general, c'est à dire on cherche tout le texte;
#.* = on cherche n'importe quel caractère qui apparait
if ($ligne=~/<description>(.*)<\/description>/g) {
#vu que $1 est une variable par défault (elle désigne le contenu entre parentheses)
#on préfère la remplacer par une variable locale;
my $var=$1;
$var=~s/\&[^ ]*;/'/g; # remplacer des entités nommées représentant des apostrophes ou guillemets
$var=~s/Toute.*connexion//g;
$var=~s/Lisez.*information.//g;
$var=~s/Retrouvez.*fr//g; # supprimer des chaînes description "de service"
$var=~s/L'actu.*ches//g;
$var=~s/\(AFP\)//g;
#si la ligne contient le motif indiquée ci-dessus, on fait des remplacement des caractères "mal affichés";
$var=~ s/&#39;/'/g;
$var=~ s/&#34;/"/g;
$var=~ s/ê/ê/g;
$var=~ s/é/é/g;
$var=~ s/ç/ç/g;
$var=~ s/è/è/g;
$var=~ s/Ã/à/g;
$var=~ s/à´/ô/g;
$var=~ s/é/é/g;
if (!open (FILEOUTTEMP,">temp.txt")) { die "Pb a l'ouverture du fichier temp.txt"};
#on format le texte mot par ligne
$var=~ s/([^A-Za-zéèàëêâùïçôîÉÈÀÊÔÂÎÏËÙÇ'])/\n$1\n/g;
$var=~ s/\'/\'\n/g;
print FILEOUTTEMP $var;
close(FILEOUTTEMP);
#-----------------------------------------------------------
##Traitement par Tree-tagger:
#fichier d'entree ($input2): le fichier contenant le résultat des remplacements éffectués ci-dessus;
#fichier de sortie ($output2): le fichier contenant le résultat du traitement par Tree-tagger;
$input2 = "temp.txt";
$output2 = "sortie_tt.txt";
#on lance le Tree-tagger en indiquant les options, fichier paramètre, fichier d'entrée et fichier de sortie
system("tree-tagger.exe -token -lemma -no-unknown french.par $input2 $output2");
#-----------------------------------------------------------
#on ouvre le fichier temporaire étiqueté et lemmatisé par Tree tagger
open (FILEINTEMP, $output2);
while ($ligne1= <FILEINTEMP>)
{
#l'opérateur !~ (ne ressemble pas à)
if ($ligne1!~/\ô\¯\:\.\ô\¯\:\.\./) {
# Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
$ligne1=~s/\"/<![CDATA[\"]]>/g;
$ligne1=~s/(<unknown>)/unknown/g;
# Suppression des caractères générés par TreeTagger
$ligne1=~s/(.*°I..)//g;
$DUMPFULL1 .= $ligne1;
}
}
}
}
close(FILEINTEMP, $output2);
print $i++,"\n";
}
}
}
#----------------------------------------------