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/&#38;#39;/'/g;
				while ($texte =~ /<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>/g)
				{
					my $title=$1;
					my $description=$2;
					$description =~ s/<.+?>//g;
          			$title =~ s/&amp//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;
}