#/usr/bin/perl
<<DOC;
JANVIER 2018
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
 Par exemple : perl parcours-arborescence-fichiers-2018.pl 2017 3208
 Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter et le "nom" de la rubrique à traiter
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
my%dico;
open(FILEOUT, ">:encoding(utf8)", "sortie_$rubrique.txt");
open(FILEOUT2, ">:encoding(utf8)", "sortie_$rubrique.xml");

# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;

my $codage="utf-8";

print FILEOUT2 "<?xml version=\"1.0\" encoding=\"$codage\" ?>\n";
print FILEOUT2 "<PARCOURS>\n";
print FILEOUT2 "<NOM> Audrey GOMBAULT, 2017-2018</NOM>\n";
print FILEOUT2 "<FILTRAGE>\n";

#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence

print FILEOUT2 "</FILTRAGE>\n";
print FILEOUT2 "</PARCOURS>\n";
close(FILEOUT2);

#----------------------------------------
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 =~ m/$rubrique.+\.xml$/) {
                print "<",$i++,"> ==> ",$file,"\n";
                my $texte="";
                open(FILEIN, "<:encoding($codage)", $file);

                while (my $ligne=<FILEIN>) {
                    chomp $ligne;
                    $ligne =~ s/\r//g;
                    $texte = $texte . $ligne ;
                    #print $ligne;
                }
                $texte =~ s/> +</></g;
    						$texte =~ s/&#38;#39;/'/g;
                while ($texte =~ m/<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>.*?<\/item>/g){
                    my $titre = $1;
                    my $description=$2;
                    #print $titre;
                    #$description =~ s/&lt;.+?&gt;$//g;
                    if (!(exists $dico{$titre})){

                        my ($titre_propre,$description_propre) = &nettoyage($titre,$description);
                        print FILEOUT "§$titre_propre\n$description_propre\n\n";
                        $compteurItem++; #va nous permettre de savoir combien d'item nous avons


                        my ($xmltitre, $xmldescription) = &etiquette($titre_propre,$description_propre);
                        #on attribue au valeurs xml_titre et xml_description le résultat du passage de titre_propre et description_propre
                        print FILEOUT2 "<item id=\"$compteurItem\"><titre>$xmltitre</titre>\n<description>$xmldescription</description></item>";

                        $dico{$titre}=1;

                        }
                }
                close FILEIN;
            }
        }
		}

}
#----------------------------------------------

sub nettoyage {
    my $var1 = shift(@_);
    my $var2 = shift(@_);
    $var1=~s/&lt;.+?&gt;//g;
    $var1.=".";# nettoyage à compléter...
    $var2=~s/&lt;.+?&gt;//g; # nettoyage à compléter...
    return $var1,$var2 ;
}

sub etiquette {

my $var3 = shift(@_); #$_[0] # on indique que la fonction va prendre deux variables qu'on appelera entre paranthèses dans le script plus haut
my $var4 = shift(@_); #$_[1]

open my $f1, ">:encoding(utf8)", "titre.txt" ;
open my $f2, ">:encoding(utf8)", "description.txt" ;
print $f1 $var3;
print $f2 $var4;
close $f1;
close $f2;


# On appelle les programmes que l'on souhaite appliqué sur les fichiers qui seront créés par la fonction "arborescence fichier"

# Préparation
system("perl  tokenise-utf8.pl titre.txt | ./tree-tagger-MacOSX-3.2/bin/tree-tagger -token -lemma -no-unknown french-utf8.par > titre_etiquete.txt");
  #on découpe en token le fichier de titre et on ajoute le résultat à titre_etiquete.txt qui est vide actuellement
system ("perl treetagger2xml-utf8.pl titre_etiquete.txt utf8"); #FICHIER CREE, le fichier de titre etiquete est maintenant etiquete
open my $f1, "<:encoding(utf8)", "titre_etiquete.txt.xml"; # $f1 est le fichier d'entree
	my $concat=""; # concat est le fichier de sortie
	my $ligne = <$f1>;
	while (my $ligne = <$f1>) {
	   $concat = $concat . $ligne ; # on ajoute à chaque fois le contenu de du nouveau passage dans le programme
	}
close $f1;

# Préparation
system("perl  tokenise-utf8.pl description.txt | ./tree-tagger-MacOSX-3.2/bin/tree-tagger -token -lemma -no-unknown french-utf8.par > description_etiquete.txt");
  # on fait pareil pour la description
system ("perl treetagger2xml-utf8.pl description_etiquete.txt utf8"); #FICHIER CREE
open my $f2, "<:encoding($codage)", "description_etiquete.txt.xml";
	my $concat2="";
	my $ligne = <$f2>;
	while (my $ligne = <$f2>) {
	   $concat2 = $concat2 . $ligne ;
	}
close $f2;

return $concat, $concat2;
}
# segmenter le fichier avant de l'envoyer à cordial, d'où l'utilité de tokenizer
#perl tokenise-utf8.pl texteaetiqueter.txt | ./tree-tagger.exe(mac) french-utf8.par -lemma -token -no-unknown > resultat-token.txt
# attention aux quotes dans le programme de tokenisation

# perl treetagger2xml-utf8.pl resultat-token.txt "utf8"
# nécessité de unicode string library
