#/usr/bin/perl
<<DOC;

Votre Nom : Mekki Jade
JANVIER 2016
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 input : en entrée le nom du répertoire contenant les fichiers à traiter
 output : un fichier structuré contenant sur chaque ligne le nom du fichier et le résultat du filtrage :
        <FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>

DOC

#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $type="$ARGV[1]";
my %dico;
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie


#----------------------------------------
mkdir "output";
my $output1=".\/output\/$type.xml";
my $output2=".\/output\/$type.txt";
#----------------------------------------
open FILEOUT,">>:encoding(utf8)",$output1;
if (!open (FILEOUT,">:encoding(utf8)",$output1)) { die "Pb a l'ouverture du fichier $output1"};
open my $out, ">>:encoding(utf8)", $output2;

print FILEOUT "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Mekki Jade</NOM>\n";
print FILEOUT "<FILTRAGE>";

#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera aprés examen de toute l'arborescence
#----------------------------------------

print FILEOUT "</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
close $out;
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 =~ /^\.\.?$/; # if fichier_nom[0]==".": continue (python)
		$file = $path."/".$file; # os.path.join(repertoire/nom_fichier)
		if (-d $file) { # interrogation de la nature du fichier
			print "<NOUVEAU REPERTOIRE> --> \t$file\n";
			&parcoursarborescencefichiers($file);
      #recursivité, on rappelle la fonction dans la foncion si ce n'est pas un fichier
      # descente dans l'arborescence
			print "<FIN REPERTOIRE> --> \t$file\n";
		}
		if (-f $file) {
					#si c'est un fichier contenant $type : 3208.xml
					if ($file =~ /$type.+\.xml/) {
						open my $input, "<:encoding(utf8)" ,$file;
						my $texte = "";
						while (my $ligne = <$input>) {
							chomp $ligne;
							$ligne =~ s/\r//g;
							$texte = $texte . $ligne ; # $text.=$ligne
              # print $texte;
						}
            # Nettoyage du texte
						$texte =~ s/> +</></g;
            # print $texte;
						$texte =~ s/&#38;#39;/'/g;
            $texte =~ s/xE([0-9])//g;
            # print $texte;
						while ($texte =~ /<item>(<link>(.+?)<\/link>)?<title>(.+?)<\/title>(<link>(.+?)<\/link>)?<description>(.+?)<\/description>/g){
              my $titre=$3.".";
							my $description=$6;
              $description =~ s/&lt;.+?&gt;//g;
              # print "\n",$titre;
              # print "\n",$description,"\n";
							if (!(exists $dico{$titre})) {
              #---------------------------------
              # on étiquète la sortie XML (fichiers .txt qui deviennent .xml)
              # 1. segmentation
              # 2. étiquète
              # 3. convertion XML
							my ($xmltitre, $xmldescription) = &etiquette ($titre,$description);
                # print $out "\nFichier:\t$file\n\n";
								print $out "$titre\n"; # on imprime le titre
								print $out "$description\n\n"; # on imprime la description
                # print $out "-------------------------------------------------------------------------------------\n";
								print FILEOUT "<item><titre>$xmltitre</titre><description>$xmldescription</description></item>\n";
                $dico{$titre} = 1;
								#print $DUMPFULL1;

							}
						}
					close $input1;
          close $input2;
				}
			}
		}
}
#----------------------------------------------

sub etiquette {

my $var1 = shift(@_); #$_[0]
my $var2 = shift(@_); #$_[1]

my $output3=".\/output\/titre.txt";
my $output4=".\/output\/description.txt";

open my $f1, ">:encoding(utf8)", $output3;
open my $f2, ">:encoding(utf8)", $output4;

print $f1 $var1;
print $f2 $var2;
close $f1;
close $f2;

system("perl  tokenise-utf8.pl ./output/titre.txt | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par > ./output/titre_etiquete.txt");
system ("perl treetagger2xml-utf8.pl ./output/titre_etiquete.txt utf8"); #FICHIER CREE
open my $f1, "<:encoding(utf8)", "./output/titre_etiquete.txt.xml";
	my $concat="";
	my $ligne = <$f1>;
	while (my $ligne = <$f1>) {
	$concat = $concat . $ligne ;
	}
close $f1;
system("perl  tokenise-utf8.pl ./output/description.txt | ./tree-tagger -token -lemma -no-unknown french-oral-utf-8.par > ./output/description_etiquete.txt");
system ("perl treetagger2xml-utf8.pl ./output/description_etiquete.txt utf8"); #FICHIER CREE
open my $f2, "<:encoding(utf8)", "./output/description_etiquete.txt.xml";
	my $concat2="";
	my $ligne = <$f2>;
	while (my $ligne = <$f2>) {
	$concat2 = $concat2 . $ligne ;
	}
close $f2;


return $concat, $concat2;

# exit;
}
