Série 2 : Etiquetage
TreeTagger
A partir de la même arborescence que pour la série 1, il s'agit
d'étiqueter le contenu des balises
<description> avec
TreeTagger.
Appliqué sur le dossier 2005 on obtient en sortie le fichier
2005.xml
Puis en lui appliquant une feuille de style on obtient cette visualisation
où les noms apparaissent en rouge.
Le contenu du programme :
#!/usr/bin/perl
<<DOC;
Format d\'entree : un texte étiqueté et
lemmatisé par tree tagger
Format de Sortie : le même texte au format xml
DOC
# Usage
$ChaineUsage="Usage : tt2xml.pl <Fichier>\n";
if (@ARGV!=1) {
die $ChaineUsage;
}
$t=0;
&ouvre;
&entete;
my $rep="$arg";
# on s'assure que le nom du répertoire ne se termine pas par
un "/"
$rep=~ s/[\/]$//;
print "Quelle est la balise à extraire ?\n";
$exp=<STDIN>;
chomp $exp;
&parcoursarborescencefichiers($rep);
&fin;
&ferme;
# Récupération des arguments et ouverture des
tampons
sub ouvre {
$arg = $ARGV[0];
$FichierSortie= $arg . ".xml";
open(Sortie,">$FichierSortie");
}
# Entête de document XML
sub entete {
print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\"
standalone=\"no\"?>\n<?xml-stylesheet type=\"text/xsl\"
href=\"StyleT.xsl\"?>\n";
print Sortie
"<document>\n<Nom>Aurélia
Trinquier</Nom>\n";
}
sub parcoursarborescencefichiers {
my $path = shift(@_);
opendir(DIR, $path) or die "ne peut ouvrir $path: $!\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
next if $file =~ /^\.\.?$/;
$file = $path."/".$file;
if (-d $file) {
&parcoursarborescencefichiers($file); #recurse!
}
if (-f $file) {
# TRAITEMENT à réaliser sur chaque fichier
open(FILEINPUT,$file);
print Sortie
"<fichier>\n<nom>$file</nom>\n";
while ($ligne = <FILEINPUT>)
{
if ($ligne=~/<$exp>(.*)<\/$exp>/)
{ open(OUTPUT,">resultats.txt");
print Sortie "<description>\n";
$ligne=$1;
# Rectification des problèmes de codage
$ligne=~s/(')/\'/g;
$ligne=~s/(")/\"/g;
$ligne=~s/à©/é/g;
$ligne=~s/é/é/g;
$ligne=~s/ê/ê/g;
$ligne=~s/è/è/g;
$ligne=~s/Ã/à/g;
$ligne=~s/ç/ç/g;
$ligne=~s/à§/ç/g;
$ligne=~s/à´/ô/g;
$ligne=~s/(é)/é/g;
$ligne=~s/(ê)/ê/g;
# Séparation du texte en 1 mot par ligne
$ligne=~s/( )/\n/g;
$ligne=~s/([,\;:!?\.'\"\(\)])/\n$1\n/g;
print OUTPUT $ligne;
#Fermeture du fichier resultats.txt
close(OUTPUT);
#Lancement du TreeTagger
system ("bin/tree-tagger.exe -token -lemma lib/french.par resultats.txt
treetagger.txt");
open(TREE,"treetagger.txt");
while ($tree = <TREE>) {
if ($tree!~/\ô\¯\:\.\ô\¯\:\.\./ )
{
# Remplacement des guillemets par <![CDATA["]]>
(évite erreur d'interprétation XML)
$tree=~s/\"/<![CDATA[\"]]>/g;
$tree=~s/(<unknown>)/unknown/g;
# Suppression des caractères
générés par TreeTagger
empêchant la bonne formation du fichier xml
$tree=~s/(.*°I..)//g;
$tree=~s/([^\t]*)\t([^\t]*)\t([^\n]*)\n/<element>\n
<data type=\"cat\">$2<\/data>\n
<data type=\"lemme\">$3<\/data>\n
<data
type=\"mot\">$1<\/data>\n<\/element>/;
print Sortie $tree;
}
}
close(TREE);
print Sortie "\n</description>\n";
}
}
print Sortie "</fichier>\n";
}
# Fin de fichier
sub fin {
print Sortie "</document>\n";
}
}
}
# Fermeture des tampons
sub ferme {
close(Sortie);
}