BOITE A OUTILS 2 CORDIAL
Ojectif :Extraire le contenu des balises 'description' de la même arborescence de fichier (voir ci-dessus) Récupérer un fichier au format texte, contenant les contenus de toutes les balises 'nettoyés' (entités html). Ce fichier peut ensuite être traité par Cordial. Il est à noter que contrairement à TreeTagger, Cordial n'a pas besoin d'un fichier contenant un mot par ligne.
Premier programme :Les deux programmes réalisés sont issus du programme réalisé pour le TreeTagger (voir ici). Le premier programme extrait le contenu des balises 'description' de la même façon, les 'nettoie', mais ne place pas de saut de ligne entre chaque mot.
#/usr/bin/perl -w
#-----------------------------------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise la variable fichier pour pouvoir ecrire le contenu du premier repertoire au debut du sub
my $fichier=$path;
#----------------------------------------
my $output1="Cordial.txt";
#----------------------------------------
&parcoursarborescencefichiers($rep); #recurse!
#----------------------------------------
print 'Traitement terminé, le fichier '."$output1".' peut maintenant être étiqueté avec Cordial';
exit;
sub parcoursarborescencefichiers {
my $path = shift(@_);
opendir(DIR, $path) or die "can't open $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) {
open(FILEINPUT,"$file");
if (!open
(FILEOUT,">>$output1")) { die "Pb a l'ouverture du fichier
$output1"};
while ($ligne = <FILEINPUT>){
if
($ligne=~/<description>(.*)<\/description>/) {
my $desc=$1;
$desc=~ s/&#39;/'/g;
$desc=~ s/&#34;/"/g;
$desc=~ s/ê/ê/g;
$desc=~ s/é/é/g;
$desc=~ s/ç/ç/g;
$desc=~ s/Ú/è/g;
$desc=~ s/Ã/à/g;
$desc=~ s/àŽ/ô/g;
$desc=~ s/é/é/g;
print FILEOUT
"$desc"."\n";
}
}
close (FILEINPUT);
}
}
return();
}
#----------------------------------------------
Fichier obtenu : CordialIn.txt
Suite :
Un deuxième programme est utilisé, pour transformer le fichier créé par le traitement de Cordial (donc au 'format Cordial') en un fichier au format XML.
Second programme :Ce programme correspond à la deuxième partie du programme mis au point pour Treetagger :
#!/usr/bin/perl
<<DOC;
Format d\'entree : un texte étiqueté et lemmatisé par Cordial
Format : serra serrer VINDPS3S
Format de Sortie : le même texte au format xml
DOC
# Usage
$ChaineUsage="Usage : Cordial2xml.pl <Fichier>\n";
if (@ARGV!=1) {
die $ChaineUsage;
}
&ouvre;
&entete;
&traitement;
&fin;
&ferme;
################################################
# Récupération des arguments et ouverture des tampons
sub ouvre {
$FichierEntree="ARGV[0]";
open(Entree,$FichierEntree);
$FichierSortie=$FichierEntree . ".xml";
open(Sortie,">$FichierSortie");
}
# Entête de document XML
sub entete {
print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n";
print Sortie "<PARCOURS>"."\n"."<NOM>Claire Guiraud</NOM><document>"."\n";
}
# Traitement
sub traitement {
while ($Ligne = <Entree>) {
if ($Ligne!~/\ô\¯\:\ \ô\¯\:\ \ /) {
# Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
$Ligne=~s/\"/<![CDATA[\"]]>/g;
$Ligne=~s/([^\t]*)\t([^\t]*)\t(.*)/<element>\n <data
type=\"forme\">$2<\/data>\n <data
type=\"categorie\">$3<\/data>\n <data
type=\"lemme\">$1<\/data>\n<\/element>/;
print Sortie $Ligne;
}
}
}
# Fin de fichier
sub fin {
print Sortie "</document>"."\n"."</PARCOURS>"."\n";
system ("rm","Cordial.txt","Cordial.cnr");
}
# Fermeture des tampons
sub ferme {
close(Entree);
close(Sortie);
}
AFFICHAGE DES RESULTATS
On peut utiliser un feuille XSL pour afficher les informations contenues dans les fichiers XML créés par les programmes de différentes façon.
Grâce à cette feuille de style XSL (adaptée de la feuille XSL qui nous a
été fournie), on peut générer cette page (Attention gros fichier -voir un extrait-) .