Ci-dessous le script du Perl utilisé pour l’étape 2:
Pour la rubrique ($type dans le code), nous avons choisi "À la une" des journaux 2016
Vous voulez peut-être voir/télécharger le résultat formaté en XML
#!/usr/bin/perl
<<DOC;
Guanhua WANG; Audrey CORNU
usage: perl parcours-arborescence-fichiers.pl repertoire-a-parcourir
Entrée: le nom du répertoire contenant les fichiers à traiter
Sortie: un fichier construit structuré contenant sur chaque lignee nom du fichier et le résultat du filtrage: <FICHIER><NOM>du fichier</NOM><CONTENU>du filtrage</CONTENU></FICHIER>
DOC
# le nom du répertoire et le motif sont passés en argument au programme
my $rep="$ARGV[0]";
my $type="$ARGV[1]";
my %dico;
# on s'assure que le nom du rep ne se termine pas par un slash, si non, le supprimer
$rep=~ s/[\/]$//;
# initialiser une variable contenant le flux de sortie
my $DUMPFULL1="";
# ouvrir le fichier de sortie
my $output1="$type.xml";
if (!open (FILEOUT,">:encoding(utf8)", $output1))
{
die "Pb a l'ouverture du fichier $output1";
}
open my $out, ">:encoding(utf8)", "$type.txt";
# lancer le parcours recursif de l'arbre de fils...
my $i=1;
&parcoursarborescencefichiers($rep);#recurse!
# formater la sortie: fichier XML avec en-tete et integrer le contenu de la variable contenant le filtrage
print FILEOUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Guanhua WANG</NOM><NOM>Audrey CORNU<\/NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;
# declaration de la procedure du parcours
sub parcoursarborescencefichiers
{
my $path = shift(@_);
# ouvrir le repertoire
opendir(DIR, $path) or die "can't open $path: $!\n";
# recuperer le contenu du rep
my @files = readdir(DIR);
closedir(DIR);
# verifier le statut de chaque element (rep ou fichier)
foreach my $file (@files)
{
next if $file =~ /^\.\.?$/;
# commencer par ecrire le chemin complet de cet element
$file = $path."/".$file;
if (-d $file)
{
print "<NOUVEAU REPERTOIRE> ==> ", $file, "\n";
# relancer le parcours si l'element est un rep
&parcoursarborescencefichiers($file); #recurse!
print "<FIN REPERTOIRE> ==> ", $file, "\n";
}
if (-f $file)
{
# Si fichier: TRAITEMENT a realiser sur chaque fichier (filtrear)
if ($file =~ /$type.+\.xml/)
{
open my $input, "<:encoding(utf8)", $file;
my $texte = "";
while (my $ligne=<$input>) #filtrage
{
chomp $ligne;
$ligne =~ s/\r//g;
$texte = $texte.$ligne;
}
$texte =~ s/> +</></g;
$texte =~ s/&#39;/'/g;
while ($texte =~ /<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>/g)
{
my $title=$1;
my $description=$2;
$description =~ s/<.+?>//g;
$title =~ s/&//g;
$description =~ s/xE([0-9])//g;
if (!(exists $dico{$title}))
{
my ($xmltitle, $xmldescription) = &etiquette ($title, $description);
print $out "$title\n";
print $out "$description\n\n";
$DUMPFULL1 = $DUMPFULL1."<file><name>$file</name><title>$xmltitle</title><description>$xmldescription</description></file>\n";
$dico{$title} = 1;
}
$DUMPFULL2 = $DUMPFULL2.$title."\n".$description."\n";
$i+=1;
}
close $input;
}
}
}
}
sub etiquette
{
my $var1 = shift(@_);
my $var2 = shift(@_);
open my $f1, ">:encoding(utf8)", "titre.txt";
open my $f2, ">:encoding(utf8)", "description.txt";
print $f1 $var1;
print $f2 $var2;
close $f1;
close $f2;
system("perl tokenize.pl titre.txt | ./tree-tagger -token -lemma -no-unknown french-utf8.par > titre_etiquete.txt");
system("./treetagger2xml-utf8 titre_etiquete.txt utf8");
open my $f1, "<:encoding(utf8)", "titre_etiquete.txt.xml";
my $concat="";
while (my $ligne = <$f1>)
{
$concat = $concat.$ligne;
}
close $f1;
system("perl tokenize.pl description.txt | ./tree-tagger -token -lemma -no-unknown french-utf8.par > description_etiquete.txt");
system("./treetagger2xml-utf8 description_etiquete.txt utf8");
open my $f2, "<:encoding(utf8)", "description_etiquete.txt.xml";
my $concat2="";
while (my $ligne = <$f2>)
{
$concat2 = $concat2.$ligne;
}
close $f2;
return $concat, $concat2;
}