#/usr/bin/perl
my %dico;
my $rep = "$ARGV[0]";
my $rubrique = "$ARGV[1]";
# on s'assure que le nom du repertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie 
#my $DUMPFULL1="";
#----------------------------------------
# si le repertoire ne peut pas être ouvert, le programme arrête et renvoie le message d'erreur 
#my $output1="SORTIE.xml";
#if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#print FILEOUT "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
#print FILEOUT "<PARCOURS>\n";
#print FILEOUT "<NOM>Votre nom</NOM>\n";
#close (FILEOUT);
#----------------------------------------
&parcoursarborescencefichiers($rep);	# le lancement d'une procedure du sous-programme en perl. on lance la recursion.... et elle se terminera apres examen de toute l'arborescence
# la définition du sous-programme : sud nomduprogramme {le code}
#des nom des arguments passés dans la procédure est sauvegarde @_
# la procédure est comme la fonction du python 
#----------------------------------------
#open (FILEOUT, ">>:encoding(utf-8)", $output1);
#print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
#print FILEOUT "</PARCOURS>\n";
#close(FILEOUT);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n"; # opendir : lire un répertoire
    my @files = readdir(DIR); #renvoie la liste du contenu dans le répertoire
    closedir(DIR);
    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/; #on ne traite pas les fichiers commencent par .,..
		next if $file =~ /^fil/;
		$file = $path."/".$file; # reconstruir le chemin relatif ex. 2016/01 
		if (-d $file) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) {
			#       TRAITEMENT � r�aliser sur chaque fichier
			#       Ins�rer ici votre code (le filtreur)
			if ($file =~/$rubrique.+\.xml/){
			print "<",$i++,"> ==> ",$file,"\n";
			#my %dico; deplacer au début du programme
			$codage = "utf-8";
			open (FIC, "<:encoding($codage)", $file);  #moderne open my $in,"<",$ARGV[0]
			open (OUT, ">>:encoding($codage)", "$rubrique.txt");
			open (OUT2, ">>:encoding($codage)", "$rubrique.xml");
			#ramener tout le flux textuel de FIC sur une seule ligne
			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><link>(?:[^<]+?)<\/link><description>([^<]+?)<\/description>/g) {
        		my $titre = $1;
        		my $description = $2;
				$titre=~s/&lt;.+?&gt;//g;
				$titre.=".";  #ajouter à la fin du titre ".". If faut une fin pour chaque titre
				$titre=~s/\?\.$/\?/; #si il y a un "?" à la fin du titre, on enleve "."
				$description=~s/&lt;.+?&gt;//g; #nettoyer le fichier
        		if (!(exists $dico{$titre})) {
					$dico{$titre} = 1;
					print OUT "$titre\n";
					print OUT "$description\n\n";  
					my ($titretag,$descriptiontag) = &etiquetage($titre,$description);
					print OUT2 "<item><title>$titretag</title><description>$descriptiontag</description></item>\n";      
        		}
			}
			close OUT;
			close OUT2;
			}
		}
	}
}

###################BAO2 etiquetage#######################################
sub etiquetage {
	#my $t = shift(@_);
	#my $d = shift(@_);
	my ($titre,$description) = @_;
	my $tmptag="texteaetiqueter.txt"; #créer un nouveau fichier
	open (TMP, ">:encoding(utf-8)", $tmptag); #ouvrir le fichier
	print TMP $titre,"\n"; 
	close TMP;
	system ("perl tokenise-utf8.pl $tmptag | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par > tree_tag.txt");
	system ("perl treetagger2xml-utf8.pl tree_tag.txt utf-8");#resultat est contenu dans titre_tag.txt.xml
	open (TMP2, "<:encoding(utf-8)", "tree_tag.txt.xml");
	my $titreetiquetage="";
	my $ligne = <TMP2>; # on lit la premiere ligne pourque while ne la traitement pas 
	while (my $ligne=<TMP2>) {
		$titreetiquetage.=$ligne;
	}
	close TMP2;
	open(TMP,">:encoding(utf-8)", "$tmptag");
	print TMP $description, "\n";
	close TMP;
	system("perl tokenise-utf8.pl $tmptag | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par > tree_tag.txt");
	system("perl treetagger2xml-utf8.pl tree_tag.txt utf-8");#resultat est contenu dans titre_tag.txt.xml
	open(TMP2, "<:encoding(utf-8)", "tree_tag.txt.xml");
	my $desetiquetage="";
	my $ligne = <TMP2>; # on lit la premiere ligne pourque while ne la traitement pas 
	while (my $ligne=<TMP2>) {
		$desetiquetage.=$ligne;
	}
	close(TMP2);
	unlink $tmptag;
	return($titreetiquetage,$desetiquetage);
	}
#perl koko.pl titre.txt | ....>titre.tag
#perl 
#system est une fonction perl pour lancer le script exterieur au programme 
#----------------------------------------------
# perl nomdescript nomderepertoire nomderubrique(ex. 3208)
#pour tester un programme perl : perl -c nomdefichierperl
#ls -la (bash) pour afficher les répertoires cachés. s'il y a des répertoires cachés(par ex le courant), quand on parcour le répertoire courant, ce sera un boucle. 
#-d : si l'argument est un repetoire ou pas; -f : l'argument est un fichier ou pas