#/usr/bin/perl
<<DOC; 
Berenice Schacherer - 2019-2020

Lancer le programme : perl Ba02.pl 2019 rubrique

DOC

#-----------------------------------------------------------
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 ouvre tous les fichiers de sortie
open(OUT," >:encoding(utf8)","sortie-txt_$rubrique.txt");
open(OUTXML,">:encoding(utf8)","sortie-TT_$rubrique.xml");
open(OUTTALISMANE,">:encoding(utf8)","sortie-tal_$rubrique.txt");

#on met la première ligne dans le fichier xml
print OUTXML "<!--?xml version=\"1.0\" encoding=\"utf-8\" ?-->\n";
print OUTXML "<corpus2019>\n";

#on créer un dictionnaire vide destiné à contenir les titres
my %dico_des_titres=();

#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!

#----------------------------------------
#on met la dernière balise fermante xml et on ferme tous les fichiers
print OUTXML "</corpus2019>\n";
close OUT;
close OUTXML;
close OUTTALISMANE;
exit;

#---------------FONCTIONS-----------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR); #on ouvre les fichiers pour les stocker dans la variable puis on les ferme
    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/; #on verifie que $file n'est pas un répertoire caché
		$file = $path."/".$file;
		if (-d $file) { #si $file est un répertoire on rappelle la fonction
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if (-f $file) {  #si $file est un fichier on lance le traitement 
			if ($file =~/$rubrique.+xml$/) {
				print $i++," Traitement de : ",$file,"\n";
				open(FIC,"<:encoding(utf8)",$file);
				$/=undef; 
				my $textelu=<FIC>;
				close FIC; #on recupère le contenu des fichiers
				my $compteur=1; #compteur qui permet de numéroter les items
				
                #on initialise les variables titre et description pour talismane
                my $titreTalis="" ;
                my $descriptionTalis="";
				while ($textelu=~/<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) {
					my $titre=$1;
					my $description=$2;
					if (!(exists $dico_des_titres{$titre})) {  #on vérifie que le titre n'a pas encore été lu pour éviter les doublons
					$dico_des_titres{$titre}=$description ;
					
					#on appelle le sous-programme de nettoyage 
					($titre,$description)=&nettoyage($titre,$description);
					
					#on ajoute les titres et descriptions pour le traitement de talismane
                    $titreTalis=$titreTalis."Â£Â£debuttitreÂ£Â£"."\n\n".$titre."\n"."Â£Â£fintitreÂ£Â£"."\n\n";
                    $descriptionTalis=$descriptionTalis."Â£Â£debutdescriptionÂ£Â£"."\n\n".$description."\n"."Â£Â£findescriptionÂ£Â£"."\n\n";
                    
                    #on appelle le sous-programme d'étiquetage avec tree-tagger 
					my ($titre_etiket,$description_etiket)=&etiquetage($titre,$description);
					
					#on écrit les résultats en sorties
					print OUT $titre,"\n";
					print OUT $description,"\n";
					print OUT "--------------------\n";
					print OUTXML "<item numero='$compteur'>\n<titre >$titre_etiket</titre>\n<description>$description_etiket</description>\n</item>\n";
					$compteur++; #on incrémente le compteur d'item
					}
				}
				
                #on lance talismane sur les titres Talis
                open(TALIS,">:encoding(utf8)","bao1_test.txt");
                print TALIS $titreTalis;
                close TALIS;
                # on lance talismane :
                system("java -Xmx1G -Dconfig.file=./talismane/talismane-fr-5.2.0.conf -jar ./talismane/talismane-core-5.2.0.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal");
                #on écrit les résultats en sorties
                open(TEMP, "<:encoding(utf8)", "bao1_test.tal");
                $temp=<TEMP>;
                close TEMP;
                print OUTTALISMANE "## titre : $file \n";
                print OUTTALISMANE $temp;
                
                #on lance talismane sur les descriptions Talis            
                open(TALIS,">:encoding(utf8)","bao1_test.txt");
                print TALIS $descriptionTalis;
                close TALIS;
                # lancer talismane :
                system("java -Xmx1G -Dconfig.file=./talismane/talismane-fr-5.2.0.conf -jar ./talismane/talismane-core-5.2.0.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal");                
               #on Ã©crit les résultats en sorties
                open(TEMP, "<:encoding(utf8)", "bao1_test.tal");
                $temp=<TEMP>;
                close TEMP;
                print OUTTALISMANE "## description : $file \n";
                print OUTTALISMANE $temp;
                               
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
    my $titre = $_[0];
    my $description = $_[1];
	$titre=~s/^<!\[CDATA\[//;
	$titre=~s/\]\]>$//; 
	$description=~s/^<!\[CDATA\[//;
	$description=~s/\]\]>$//;
    $description=~s/ <.+? >//g;
    $description=~s/&amp;#39;/'/g;
    $description=~s/&amp;#34;/"/g;
    $description=~s/&amp;/;/g;
    $titre=~s/ <.+? >//g;
    $titre=~s/&amp;#39;/'/g;
    $titre=~s/&amp;#34;/"/g;
    $titre=~s/&amp;/;/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;
    #on lance tree-tagger
    system ("perl -f tokenise-utf8.pl temporaire.txt | ./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;
    #on lance tree-tagger
    system ("perl -f tokenise-utf8.pl temporaire.txt | ./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;
}