#/usr/bin/perl
<<DOC; 
JANVIER 2018
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
my %dico;
my $codage = "utf-8";
my $compteurfile=1;
my $compteurItem=0;
#----------------------------------------
my $output1=$rubrique.".xml";
my $output2=$rubrique.".txt";
if (!open (FILEOUT,">:encoding($codage)",$output1)) { die "Pb a l'ouverture du fichier $output1"};
if (!open (FILEOUT2,">:encoding($codage)",$output2)) { die "Pb a l'ouverture du fichier $output2"};
print FILEOUT "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Elena, 2017-2018</NOM>\n";
print FILEOUT "<FILTRAGE>\n";
#close(FILEOUT);
#close(FILEOUT2);
#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
#----------------------------------------
if (!open (FILEOUT,">>:encoding($codage)",$output1)) { die "Pb a l'ouverture du fichier $output1"};
print FILEOUT "\n</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
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) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) {
			if ($file=~/$rubrique.+\.xml$/) {
				print "<",$compteurfile++,"> ==> ",$file,"\n";
				open (FIC, "<:encoding($codage)", $file);  #moderne open my $in,"<",$ARGV[0]
				my $texte="";
				while (my $ligne = <FIC>) {
					chomp $ligne;
					$ligne =~ s/\r//g;
					$texte = $texte . $ligne;
				}
				close FIC;
				$texte =~ s/>\s+</></g;
				while ($texte =~m/<item>.*?<title>([^<]*?)<\/title>.*?<description>([^<]*?)<\/description>/g) {
					my $titre = $1;
					my $description = $2;
					($titre,$description) = &nettoyage ($titre,$description);
					if (!(exists $dico{$titre})) {
						$dico{$titre} = 1;
						#if (!open (FILEOUT,">>:encoding($codage)",$output1)) { die "Pb a l'ouverture du fichier $output1"};
						#if (!open (FILEOUT2,">>:encoding($codage)",$output2)) { die "Pb a l'ouverture du fichier $output2"};
						print FILEOUT2 "§ $titre\n$description\n\n";       
						#------------------------------------------------------------------------------------------------------
						# Il faut étiqueter le texte des titres et des descriptions avant de les réintégrer dans la sortie XML
						#------------------------------------------------------------------------------------------------------
						$compteurItem++;
                        my ($titre_etiq, $description_etiq) = &etiquetage($titre,$description);
						print FILEOUT "<item number=\"$compteurItem\">\n<titre>$titre_etiq</titre>\n<description>$description_etiq</description>\n</item>\n";                        
						#close(FILEOUT);
						#close(FILEOUT2);
					}
				}
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
    my $var1 = shift(@_);
    my $var2 = shift(@_);
    $var1=~s/&lt;.+?&gt;//g; # nettoyage à compléter...
    $var2=~s/&lt;.+?&gt;//g; # nettoyage à compléter...
	$var1.=".";
	$var1=~s/\?\.$/\?/;
    return $var1,$var2 ;
}
#----------------------------------------------
sub etiquetage {
my $var1 = shift(@_);
my $var2 = shift(@_);
#--- traitement de titre------------------------
open(OUT, ">:encoding(utf8)", "titre_tmp.txt");
print OUT $var1;
close OUT;
system("perl tokenise-utf8.pl titre_tmp.txt | ./tree-tagger.exe -lemma -token -no-unknown french-utf8.par > titre_tmp_etiq.txt");
system("perl5.16.3 treetagger2xml-utf8.pl titre_tmp_etiq.txt utf8");
$/=undef;
open (FIC, "<:encoding(utf8)","titre_tmp_etiq.txt.xml");
my $titre_retour=<FIC>;
$titre_retour =~s/<\?xml version="1\.0" encoding="utf-8" standalone="no"\?>\r\n//;
#--- traitement de description------------------------
open(OUT, ">:encoding(utf8)", "description_tmp.txt");
print OUT $var2;
close OUT;
system("perl tokenise-utf8.pl description_tmp.txt | ./tree-tagger.exe -lemma -token -no-unknown french-utf8.par > description_tmp_etiq.txt");
system("perl5.26.1 treetagger2xml-utf8.pl description_tmp_etiq.txt utf8");
#$/=undef;
open (FIC, "<:encoding(utf8)","description_tmp_etiq.txt.xml");
my $description_retour=<FIC>;
$description_retour =~s/<\?xml version="1\.0" encoding="utf-8" standalone="no"\?>\r\n//;

#--- c'est fini------------------------
return $titre_retour, $description_retour;



}


