#/usr/bin/perl
#use strict; #ça nous oblige de déclarer les variables
#----------------------------------------------------------
use utf8 ;
<<DOC;  
Nom : Meixin YAN & Yuchen SONG
mars 2019
 usage : perl BAO2_talismane.pl repertoire-a-parcourir flux-à-traiter
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter et le code de rubrique à traiter
 Le programme construit en sortie trois fichier:
	-un fichier txt contenant les titres et les descriptions
	-un fichier xml avec l'étiquetage de Treetagger
	-un fichier txt avec l'étiquetage de Talismane
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
$rep=~ s/[\/]$//; # on s'assure que le nom du répertoire ne se termine pas par un "/"
my $i=0;
my %doublons;
open(OUT, ">:encoding(utf-8)", "sortie-$rubrique-regexp.txt");
open(OUTXML, ">:encoding(utf-8)", "sortie-$rubrique-regexp-treetagger.xml");
print OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print OUTXML "<racine>\n";
open(TALISMANE, ">:encoding(utf-8)","sortie-$rubrique-regexp-talismane.txt");
#-----------------------------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
close OUT ;
print OUTXML "</racine>\n";
close OUTXML;
close TALISMANE ;
exit ;
#-----------------------------------------------------------
sub parcoursarborescencefichiers {
	my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";	#ouvrir le directoire 2018
    my @files = readdir(DIR);								#on a trouvé les répertoires:Jan/Fev/...
    closedir(DIR);
    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file; 	#reconstruire un chemin relatif qui permet d'accéder aux ressources
		if (-d $file) {
			print "on entre dans $file \n";
			&parcoursarborescencefichiers($file);	#recurse! #re-ouvrir
		}
		if (-f $file) {
			if ($file =~ /$rubrique.+\.xml$/){
				print $i++, "==>", $file, "\n";
				open(FIC, "<:encoding(utf-8)", $file) ;
				my $tout_le_texte = "" ;
				while (my $ligne = <FIC>) {
					chomp $ligne;
					$tout_le_texte = $tout_le_texte . $ligne . " " ;
				}
				close FIC ;
				my $pourtalismane="";
				while ($tout_le_texte =~ /<item>.*?<title>([^<]*)<\/title>.*?<description>([^<]*)<\/description>.*?<\/item>/g) {
					my $titre = $1 ;
					my $description = $2 ;
					my ($titrenettoye,$descriptionnettoye) = &nettoyage($titre, $description) ;
					if (exists $doublons{$titrenettoye}) {
						$doublon{$titrenettoye}++;
					}
					else {
						$doublon{$titrenettoye}=1; #"1" indiqueque la sortie actuelle est sortie immédiatement sans mise en cache
						my $titrenettoyetal = $titrenettoye;
						my $descriptionnettoyetal = $descriptionnettoye;
						#segmenter en phrases s'il y a plusieurs phrases dans le titre
						$titrenettoyetal =~ s/([…\.\?\!]+)/$1§\n/g; 
						#segmenter en phrases s'il y a plusieurs phrases dans la description
						$descriptionnettoyetal =~ s/([…\.\?\!]+)/$1§\n/g; 
						#on met les séparateurs entre les titres et les descriptions
						$pourtalismane = $pourtalismane . "££debuttitre££\n\n" . $titrenettoyetal . "\n" . "££fintitre££\n\n" . "££debutdescription££\n\n" . $descriptionnettoyetal . "\n" . "££findescription££\n\n" ;
						print OUT "TITRE : $titrenettoye\n" ;
						print OUT "DESCRIPTION : $descriptionnettoye\n" ;
						print OUTXML "<item>\n" ;
						#my ($titreTT,$descriptionTT) = &etiquetageTT($titrenettoye, $descriptionnettoye);
						print OUTXML "<titre>$titreTT</titre>\n" ;
						print OUTXML "<description>$descriptionTT</description>\n" ;
						print OUTXML "</item>\n" ;
					}
				}
				my $etiquetTa = &etiquetageTalismane($pourtalismane) ;
				print TALISMANE "$etiquetTa"; #étiquetage talismane
			}
		}
	}
}
sub nettoyage {
	my $var = $_[0] ;
	my $var1 = $_[1] ;
	$var = $var . "." ; # $var .= "." ;
	$var1 = $var1 . "." ;
	$var1 =~ s/&#38;#39;/'/g ;
	return $var, $var1 ;
}

#créer la fonction d'étiquetage avec Treetagger
sub etiquetageTT {
my $vartitre = $_[0];
my $vardesc = $_[1];
my $titretagge;
my $descriptiontagge;
open (TMP, ">:encoding(utf8)", "temp.txt");
#copier les titres dans un fichier temporaire
print TMP $vartitre ;
close TMP;
#lancement de treetagger
system("perl tokenise-utf8.pl -f temp.txt | ./tree-tagger.exe -token -lemma -no-unknown french-utf8.par > temp_tag.txt");
system("perl5.28.1 treetagger2xml-utf8.pl temp_tag.txt utf8");
{
local $/=undef;
open(FIC1, "<:encoding(utf8)", "temp_tag.txt.xml");
#mettre les titres étiquetaggé dans une nouvelle variable
$titretagge = <FIC1>;
close FIC1;
$titretagge =~ s/<\?xml.+?>//;
}

open (TMP, ">:encoding(utf8)", "temp.txt");
#copier les descriptions dans un fichier temporaire
print TMP $vardesc ;
close TMP;
#lancement de treetagger
system("perl tokenise-utf8.pl -f temp.txt | ./tree-tagger.exe -token -lemma -no-unknown french-utf8.par > temp_tag.txt");
system("perl5.28.1 treetagger2xml-utf8.pl temp_tag.txt utf8");
{
local $/=undef;
open(FIC1, "<:encoding(utf8)", "temp_tag.txt.xml");
#mettre les descriptions étiquetaggé dans une nouvelle variable
$descriptiontagge = <FIC1>;
$descriptiontagge =~ s/<\?xml.+?>//;
close FIC1;
}
print "$titretagge\n";
#my $rep = <STDIN>;
#retourner les résultats
return $titretagge, $descriptiontagge;
}

#créer la fontion d'étiquetage avec TALISMANE
sub etiquetageTalismane {
	my $var = shift @_ ;
	open (TMP, ">:encoding(utf-8)", "bao1_test.txt");
	#on copie les titres et les descriptions dans un fichier temporaire
	print TMP $var;
	close TMP;
	#lancement de TALISMANE
	system ("java -Xmx1G -Dconfig.file=talismane-fr-5.0.4.conf -jar talismane-core-5.1.2.jar --analyse --sessionId=fr --encoding=UTF8 --inFile=bao1_test.txt --outFile=bao1_test.tal") ;
my $lefil;
{
local $/=undef;
open(FIC1, "<:encoding(utf8)","bao1_test.tal");
#on met les résultats d'étiquetage dans une nouvelle variable
$lefil = <FIC1> ;
close FIC1;
}
#on retourne les résultats d'étiquetage
return $lefil
}
#----------------------------------------------