#/usr/bin/perl
#-----------------------------------------------------------
use utf8;
<<DOC; 
Votre Nom : SOY Ugur
 Février 2019
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter et le nom de la rubrique à traiter (via une suite de chiffres)
 Le programme construit en sortie 2 fichiers :
 - un fichier TXT
 - un fichier structuré en XML 
 Les 2 fichiers contiennent les zones textuelles extraites des fils RSS
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/[\/]$//;
my $i=0;
my %doublons;
open(OUT, ">:encoding(utf-8)", "sortie-$rubrique-regexp.txt");
open(OUTXML, ">:encoding(utf-8)", "sortie-$rubrique-regexp.xml");
print OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print OUTXML "<racine>\n";
open(TALISMANE, ">:encoding(utf8)", "sortie-$rubrique-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";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		if (-d $file) {
		print "on entre dans $file \n";
			&parcoursarborescencefichiers($file);	#recurse!
		}
		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}) {
						$doublons{$titrenettoye}++;
					}
					else {
						$doublons{$titrenettoye}=1;
						my $titrenettoyetal = $titrenettoye ;
						my $descriptionnettoyetal = $descriptionnettoye ;
						$titrenettoyetal =~ s/([…\.\?\!]+)/$1\n\n/g; 
						$descriptionnettoyetal =~ s/([…\.\?\!]+)/$1\n\n/g;
						$titrenettoyetal =~ s/(\n)+ +/$1/g; 
						$descriptionnettoyetal =~ s/(\n)+ +/$1/g;
						$pourtalismane = $pourtalismane . $titrenettoyetal . "\n\n" . $descriptionnettoyetal . "\n\n" ;
						print OUT "$titrenettoye\n";
						print OUT "$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";
			}
		}
}
}

sub nettoyage {

my $var = $_[0]; #my ($tit, $des) = @_;
my $var1 = $_[1];

$var = $var . "." ; # $var .= ".";
#$var1 = $var1 . ".";
$var1 =~ s/&#38;#39;/'/g;
return $var, $var1;
}

sub etiquetageTT {


my $vartitre = $_[0];
my $vardesc = $_[1];
my $titretagge;
my $descriptiontagge;
open (TMP, ">:encoding(utf8)", "temp.txt");
print TMP $vartitre ;
close TMP;
system("perl5.28.0 tokenise-utf8.pl -f temp.txt | ./tree-tagger.exe -token -lemma -no-unknown french-utf8.par > temp_tag.txt");
system("perl5.28.0 treetagger2xml-utf8.pl temp_tag.txt utf8");
{
local $/=undef;
open(FIC1, "<:encoding(utf8)", "temp_tag.txt.xml");
$titretagge = <FIC1>;
close FIC1;
$titretagge =~ s/<\?xml.+?>//;
}

open (TMP, ">:encoding(utf8)", "temp.txt");
print TMP $vardesc ;
close TMP;
system("perl5.28.0 tokenise-utf8.pl -f temp.txt | ./tree-tagger.exe -token -lemma -no-unknown french-utf8.par > temp_tag.txt");
system("perl5.28.0 treetagger2xml-utf8.pl temp_tag.txt utf8");
{
local $/=undef;
open(FIC1, "<:encoding(utf8)", "temp_tag.txt.xml");
$descriptiontagge = <FIC1>;
$descriptiontagge =~ s/<\?xml.+?>//;
close FIC1;
}
#print "$titretagge\n";
#my $rep = <STDIN>;
return $titretagge, $descriptiontagge;
}
sub etiquetageTalismane {

my $var = shift @_;
open (TMP, ">:encoding(utf8)", "bao1_test.txt" );
print TMP $var;
close TMP;
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");
$lefil = <FIC1>;
close FIC1;
}
return $lefil;

}

#----------------------------------------------
