#/usr/bin/perl
<<DOC; 
Votre Nom : 
JANVIER 2020
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
 Le programme prend en entrée le nom du répertoire-racine contenant les fichiers
 à traiter et le nom de la rubrique à traiter parmi ces fichiers
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/[\/]$//;
open(OUT,">:encoding(utf8)","sortie-slurp_$rubrique.txt");
open(OUTXML,">:encoding(utf8)","sortiexml-slurp_$rubrique.xml");
open(OUTTALISMANE,">:encoding(utf8)","sortietalismane-slurp_$rubrique.txt");
print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print OUTXML "<corpus2019>\n";
my %dico_des_titres=();
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print OUTXML "</corpus2019>\n";
close OUT;
close OUTXML;
close OUTTALISMANE;
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR); # on obtient un liste de repertoire; 
    closedir(DIR);
    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		if (-d $file) {
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if (-f $file) {
			if ($file =~/$rubrique.+xml$/) {  
				print $i++," Traitement de : ",$file,"\n"; # ca compte le nombre de fichiers dans l'arborescence; 
				open(FIC,"<:encoding(utf8)",$file);
				$/=undef;     #ou $\=""
				my $textelu=<FIC>;
				close FIC;
                # 1. initialisation du texte global
                my $titredescriptionglobal="";
				while ($textelu=~/<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) {
					my $titre=$1;
					my $description=$2;
					if (!(exists $dico_des_titres{$titre})) { 
					$dico_des_titres{$titre}=$description ;
					# Appel du sous-programme de nettoyage 
					($titre,$description)=&nettoyage($titre,$description);
                    $titredescriptionglobal=$titredescriptionglobal.$titre."\n";;
                    $titredescriptionglobal=$titredescriptionglobal.$description."§\n";
					my ($titre_etiket,$description_etiket)=&etiquetage($titre,$description);
					# Ecriture des résultats en sorties
					print OUT $titre,"\n";
					print OUT $description,"\n";
					print OUTXML "<item><titre>$titre_etiket</titre><description>$description_etiket</description></item>\n";
					}
				}
                # 2. lancement de talismane sur $titredescriptionglobal
                # actuellement les données à annoter sont dans une variable
                # il faut donc les mettre dans un fichier
                open(TALIS,">:encoding(utf8)", "bao1_test.txt");
                print TALIS $titredescriptionglobal;
                close TALIS;
                # lancer talismane :
                system("java -Xmx1G -Dconfig.file=talismane-fr-5.2.0.conf -jar talismane-core-5.2.0.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal");
                
                # intégrer le resultat de l'annotation précédente dans le fichier global talismane
                open(TEMP, "<:encoding(utf8)", "bao1_test.tal");
                $temp=<TEMP>;
                close TEMP;
                print OUTTALISMANE $temp;
                               
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
    #my $titre=shift(@_); autre solution en vidant la liste des arguments du programmes...
    #my $description=shift(@_);
    my $titre = $_[0];
    my $description = $_[1];
	$titre=~s/^<!\[CDATA\[//;
	$titre=~s/\]\]>$//;
	$description=~s/^<!\[CDATA\[//;
	$description=~s/\]\]>$//;
    $description=~s/&lt;.+?&gt;//g;
    $description=~s/&#38;#39;/'/g;
    $description=~s/&#38;#34;/"/g;
    $titre=~s/&lt;.+?&gt;//g;
    $titre=~s/&#38;#39;/'/g;
    $titre=~s/&#38;#34;/"/g;
    $titre=~s/$/\./g;
    return $titre,$description;
}
#----------------------------------------------
sub etiquetage {
    my $titre = $_[0];
    my $description = $_[1];
	#-----------------etiquetage titre-----------------------------
	open (ETI, ">:encoding(utf8)", "temporaire.txt");
    print ETI $titre;
    close ETI;
    system ("perl -f tokenise-utf8.pl temporaire.txt | ./tree-tagger-MacOSX-3.2.2/bin/tree-tagger french-oral-utf-8.par -token -lemma -no-unknown > test.txt.pos");
    system ("perl treetagger2xml-utf8.pl test.txt.pos utf8"); #résultats dans test.txt.pos.xml
    open (TEMP, "<:encoding(utf8)", "test.txt.pos.xml");
    $/=undef;
    my $titre_etik_xml=<TEMP>;
    close TEMP;
    $titre_etik_xml=~s/^<\?xml[^>]+>//;
	#-----------------etiquetage description-----------------------------
    open (ETI, ">:encoding(utf8)", "temporaire.txt");
    print ETI $description;
    close ETI;
    system ("perl -f tokenise-utf8.pl temporaire.txt | ./tree-tagger-MacOSX-3.2.2/bin/tree-tagger french-oral-utf-8.par -token -lemma -no-unknown > test.txt.pos");
    system ("perl treetagger2xml-utf8.pl test.txt.pos utf8"); #résultats dans test.txt.pos.xml
    open (TEMP, "<:encoding(utf8)", "test.txt.pos.xml");
    $/=undef;
    my $description_etik_xml=<TEMP>;
    close TEMP;
    $description_etik_xml=~s/^<\?xml[^>]+>//;
    return $titre_etik_xml,$description_etik_xml;
}