#!usr/bin/perl

use strict;


#récupération du nom de l'arborescence
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
my %dico=();
my $compteur=0;


#deux sorties en txt et en xml
open my $output1,">>:encoding(UTF-8)","3208_rubrique.txt";
open my $output2,">>:encoding(UTF-8)","3208_rubrique.xml";
#écriture de l'entête xml 
print $output2 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print $output2 "<rubrique>\n";

#parcours de l'arborescence des fichiers
&parcours($rep);
sub parcours{
#on récupère l'argument passé à la procédure $rep (Perl range les arguments de la procédure dans une liste spéciale: @_)	
my $path=shift(@_);
#voir le contenu : ouverture du répertoire 
opendir(DIR,$path);
#récupère la liste des fichiers du répertoire et la lit
my @liste=readdir(DIR);
#on examine un à un les fichiers du répertoire 
foreach my $file (@liste) {
#on ne conserve pas les répertoires courant et parent	
next if $file=~ /^\.|\.$/;
#réécriture des localisations des ressources
$file=$path."/".$file;
#teste le statut de la chaine de caractère : est-ce que c'est un dossier?
#si c'est un répertoire, on lance le parcours
if (-d $file) {
&parcours($file);
}
#teste le statut de la chaine de caractère : est-ce que c'est un fichier?
if (-f $file) {
#on veut traiter les fichiers de la rubrique avec l'extension xml	
if ($file=~ /.*$rubrique.+\.xml/) {
open my $input,"<:encoding(UTF-8)","$file";
my $content="";
while (<$input>) {
$content=$content.$_;
}
#on veut récupérer le contenu de la balise titre et de la balise description
while ($content=~ m/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {
my $titre = &nettoyage($1);
my $description = &nettoyage($2);
#remplissage du dictionnaire sans doublon
if (!(exists $dico{$titre})){
$dico{$titre}=$description;
$compteur=$compteur+1;


#impression des données 
#print $output2 "$dico{$titre}\n";
print $output1 "$titre\n";
print $output1 "$description\n\n";
#écriture des balises titre et description dans le fichier de sortie xml 
print $output2 "<item number=$compteur><title>$titre</title>\n";
print $output2 "<description>$description</description></item>\n";
}


#sous programme de nettoyage des données
sub nettoyage{
#variable qui récupère le premier élément de la liste (premier argument)
my $text=shift(@_);
# s = substitute / g=substitution globale
$text=~ s/<!\[CDATA\[//g;
$text=~ s/\]\]//g;
$text=~ s/&/&amp\;/g;
#on remplace les fins de ligne par des points
$text=~s/$/\./g;
$text=~ s/>.//g;
#si plusieurs points on remplace par un seul point
$text=~s/\.+$/\./g;
$text=~ s/<a href[^>]+>//g;
$text=~ s/&#38;#34;//g;
$text=~ s/&#38;#39;//g;
#retourner la chaîne de caractères nettoyée
return $text;
}
}
}
}
}
}
print $output2 "<\/rubrique>\n";

#Tokenization et Étiquettage avec TreeTagger
#Sortie TreeTagger txt
system("perl tokenise-utf8.pl 3208_rubrique.txt | Treetagger/bin/tree-tagger Treetagger/lib/french.par -lemma -token -sgml > 3208_sortieTT.txt");
#Sortie TreeTagger xml
system ("perl treetagger2xml-utf8.pl 3208_sortieTT.txt utf-8");

#Étiquettage avec UDPIPE
#Sortie UDPIPE CONLL
system("distrib-udpipe-1/udpipe-1.2.0-bin/bin-osx/udpipe --tokenize --tag --parse distrib-udpipe-1/modeles/french-gsd-ud-2.5-191206.udpipe 3208_rubrique.txt > 3208_sortie_UDPipe.txt");
#Sortie UDPIPE xml 
system ("perl ./distrib-udpipe-1.2.0-bin/udpipe2xml-version-sans-titrevsdescription-v2.pl 3208_sortie_UDPipe.txt utf-8");

