#!/usr/bin/perl
# parcours-arborescence-fichiers-BAO2.pl 2019 3208
<<DOC; 
Votre Nom : Danxin CUI, Young-Ju NA, Markarit VARTAMPETIAN
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(OUTXML,">:encoding(utf8)","treetagger_$rubrique.xml");
open(OUTTAL, ">:encoding(utf8)", "bao2_treetagger__$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 OUTXML;
close OUTTAL;
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) {
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
	    if ($file =~/$rubrique.+xml$/) {
		print $i++," Traitement de : ",$file,"\n";
		open(FIC,"<:encoding(utf8)",$file);
		$/=undef;     #ou $\=""
		my $textelu=<FIC>;
		close FIC;
		#1 (TAL) 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_et_etiq, $description_etiq)=&etiquetage($titre, $description);
			
			# Ecriture des résultats en sorties
			print OUTXML "<item>\n";
			print OUTXML "<titre>$titre_etiq</titre>\n";
			print OUTXML "<description>$description_etiq</description>\n";
			print OUTXML "</item>\n";
		    }
		}
		#2 (TAL) lancement de Talismane sur $titredescriptionglobal
		#Mettre les données à annoter dans un fichier
		open(TALIS, ">:encoding(utf8)","bao1_test.txt");
		print TALIS $titredescriptionglobal;
		close TALIS;
		#Lancer talismane
		system ("java -Xmx1G -Dconfig.file=TALISMANE-BAO2019-DISTRIB/talismane-fr-5.0.4.conf -jar TALISMANE-BAO2019-DISTRIB/talismane-core-5.1.2.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal
		#Intégrer le résultat de l'annotation précédente dans le fichier global talismane");
		#Résultats à mettre dans un fichier
		open(TEMP,"<:encoding(utf8)", "bao1_test.tal");
		$temp=<TEMP>;
		close TEMP;
		print OUTTAL $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];
    
    #Titre
    open (ETI, ">:encoding(utf8)", "temp.txt");
        print ETI $titre;
    close(ETI);
    system ("perl -f tokenise-utf8.pl temp.txt| ./tree-tagger french-utf8.par -token -lemma -no-unknown > temp.txt.pos");
    system ("perl treetagger2xml-utf8.pl temp.txt.pos  utf8"); #donne un résultat dans le fichier temp.txt.pos.xml créé automatiquement
    open (TEMP, "<:encoding(utf8)", "temp.txt.pos.xml");
        $/=undef;
        my $titre_etiq_xml=<TEMP>;
    close TEMP ;
        $titre_etiq_xml=~s/<\?xml[^>]+>//;
    
    #Description
    open (ETI, ">:encoding(utf8)", "temporaire.txt");
    print ETI $description;
    close ETI;
    system ("perl -f tokenise-utf8.pl temporaire.txt | ./tree-tagger french-utf8.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_etiq_xml=<TEMP>;
    close TEMP;
    $description_etiq_xml=~s/^<\?xml[^>]+>//;
    return $titre_etiq_xml,$description_etiq_xml;
}
