#!/usr/bien/perl

#perl projet2.pl 2019(repertoire-a-parcourir) 3208(le numéro de rubrique)

use utf8;
use strict;

#-------- texte ---------#
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
$rep =~ s/[\/]$//;

my %dictionnairedesitems=();

#--- chaque result à chaque répertoire ---#
open(OUT,">:encoding(utf8)", "result_txt/sortie-slurp_$rubrique.txt");
open(OUTTALISMANE, ">:encoding(utf8)", "result_tali/sortietalismane-slurp_$rubrique.txt");
open(OUTXML, ">encoding(utf8)", "result_xml/sortiexml-slurp_$rubrique.xml");
print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print OUTXML "<corpus2019>\n";

#-------- Result -------#

&traitement($rep);

print OUTXML "</corpus2019>";
close OUT;
close OUTXML;
close OUTTALISMANE;

exit;
#-------- FIN   ---------#


#-------- Traitement    ---------#
sub traitement {
	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) {
			&traitement($file);
		}
		if (-f $file) {
			if ($file =~ /.+$rubrique.+xml$/) {
				$/=undef;
				open (FIC, $file);
				my $texte="";
				while (my $ligne = <FIC>) {
					$ligne =~ s/\n//g;
					$texte .= $ligne;
				}
				close FIC;
				
				$texte=~/encoding="(.+?)"\?/i;
				my $encodage = $1;

				$texte =~/<atom:link href="https:\/\/www\.lemonde\.fr\/(.+?)\.xml"/i;
				my $rub = $1;
				$rub =~s/\/rss_full//g;
				$rub =~s/rss\///g;
				$rub =~s/\.xml//g;

				my $tmptexteBrut = "";
				my $tmptexteTali = "";
				my $tmptexteXML = "";
				$tmptexteXML .= "<file rub=\"$rub\">\n<name>$file</name>\n";

				$texte =~/<pubDate>([^<]+)<\/pubDate>/;
				$tmptexteXML .="<date>$1</date>\n<items>\n";

				open(FILE, "<:encoding($encodage)", $file);
				$texte="";
				while (my $ligne = <FILE>) {
					$ligne =~ s/\n//g;
					$texte .= $ligne;
				}
				close FILE;

				while ($texte =~/<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description/sg) {
					my $titre = $1;
					my $description = $2;

					($titre, $description)=&nettoyage($titre, $description);

					if (!(exists($dictionnairedesitems{$description}))) {
						$tmptexteBrut .= "§§ $titre\n";
						$tmptexteBrut .= "§ $description\n";
						$tmptexteTali .= "$titre\n";
						$tmptexteTali .= "$description\n";

						my ($titre_tag, $description_tag)=&tag($titre, $description);

						$tmptexteXML .= "<item><titre>$titre_tag</titre><description>$description_tag</description></item>\n";
						
						$dictionnairedesitems{$description}++;
					}

				}

				print OUT $tmptexteBrut;
				print OUTXML $tmptexteXML;
				print OUTXML "</items></file>";

                #----- lancer Talismane une fois par fichier -----#
                
				open(OUTTALI, ">:encoding(utf8)", "bao1_test.txt");					
				print OUTTALI $tmptexteTali;
				close OUTTALI;
				system("java -Xmx1G -Dconfig.file=TALISMANE/talismane-fr-5.0.4.conf -jar TALISMANE/talismane-core-5.1.2.jar --analyse --sessionId=fr --encoding=utf-8 --inFile=bao1_test.txt --outFile=bao1_test.tal");
				open(TEMP, "<:encoding(utf8)", "bao1_test.tal");
				my $temp=<TEMP>;
				close TEMP;
				print OUTTALISMANE $temp;
                #--- Donner le nom de fichier et le nom de rubrique quand il est fini ---#
				print "---------------------\n";
				print "FILE = $file\n";
				print "RUBRIQUE = $rub\n";
				print "-----COMPLET---------\n";

			}
		}
	}
}



#-------- Nettoyage    ---------#

sub nettoyage {
    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;
    $description=~s/&amp;/&/g;
    $titre=~s/&lt;.+?&gt;//g;
    $titre=~s/&#38;#39;/'/g;
    $titre=~s/&#38;#34;/"/g;
    $titre=~s/$/\./g;
    return $titre,$description;
}

#-------- Tree Tagger   ---------#
sub tag {
    my $titre = $_[0];
    my $description = $_[1];
	open (ETI, ">:encoding(utf8)", "temporaire.txt");
    print ETI $titre;
    close ETI;
    #changement de Tree-tagger
    #la commande originale cause le problème est ne rend pas le texte taggé.
    #Je pouvais pas vérifier le problème, mais en divisant la commande en deux, le problème est résolu.
    system ("perl -f tree-tagger/tokenise-utf8.pl temporaire.txt");
    system ("perl -f tree-tagger/cmd/tree-tagger-french temporaire.txt tree-tagger/french-utf8.par -token -lemma -sgml -no-unknown > test.txt.pos");
    system ("perl tree-tagger/cmd/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_tag=<TEMP>;
    close TEMP;
    $titre_tag=~s/^<\?xml[^>]+>//;
    open (ETI, ">:encoding(utf8)", "temporaire.txt");
    print ETI $description;
    $description =~s/\!\.\.\.\;\n//;
    close ETI;
    system ("perl -f tree-tagger/tokenise-utf8.pl temporaire.txt");
    system ("perl -f tree-tagger/cmd/tree-tagger-french temporaire.txt tree-tagger/french-utf8.par -token -lemma -sgml -no-unknown > test.txt.pos");
    system ("perl tree-tagger/cmd/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_tag=<TEMP>;
    close TEMP;
    $description_tag=~s/^<\?xml[^>]+>//;
    
    return $titre_tag,$description_tag;
}

