#/usr/bin/perl
#-----------------------------------------------------------
use warnings;
use utf8;
use strict;
# fonction pour créer un répertoire
use File::Path qw(make_path);

binmode(STDOUT, ":encoding(UTF-8)");
#-----------------------------------------------------------
# Ce programme s'utilise ainsi :
# perl parcours-arborescence-fichiers-BAO1-2022.pl rubrique

if ($#ARGV != 0) {print "Il manque un argument à votre programme....\n";exit;} 
# my $rep="$ARGV[0]";
my $rep="data/2021";

# my $RUBRIQUE="$ARGV[1]";
my $RUBRIQUE="$ARGV[0]";

#on crée un répertoire avec le nom de la rubrique
make_path("data/bao2/$RUBRIQUE");

# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
open my $output, ">:encoding(UTF-8)","data/bao2/$RUBRIQUE/corpus-titre-description_$RUBRIQUE.txt";
open my $output2, ">:encoding(UTF-8)","data/bao2/$RUBRIQUE/pre-corpus-titre-description_$RUBRIQUE.xml";
print $output2 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n";
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print $output2 "</corpus>\n";
close $output;
close $output2;
#----------------------------------------------
# 1. annoter avec udpipe (corpus-titre-description.txt)
&etiquetageUP;
# 2. annoter avec treetagger (corpus-titre-description.xml)
&etiquetageTT;
#----------------------------------------
exit;
#----------------------------------------------
sub etiquetageUP{
	# distrib-udpipe-1.2.0-bin/udpipe-1.2.0-bin/bin-osx/udpipe --tokenize --tag --parse distrib-udpipe-1.2.0-bin/modeles/french-sequoia-ud-2.5-191206.udpipe test.txt > resultat2.txt
	system("data/bao2/distrib-udpipe-1.2.0-bin/udpipe-1.2.0-bin/bin-osx/udpipe --tokenize --tag --parse --tokenizer=presegmented data/bao2/distrib-udpipe-1.2.0-bin/modeles/french-sequoia-ud-2.5-191206.udpipe data/bao1/$RUBRIQUE/corpus-titre-description_$RUBRIQUE.txt > data/bao2/$RUBRIQUE/corpus_titre_description_$RUBRIQUE.udpipe");
}

sub etiquetageTT{
	#-sgml pour ne pas toucher aux balises 
	#perl -f tokenise-utf8.pl test.txt | ./TreeTagger/cmd/tree-tagger-french -token -lemma -sgml > resultat.txt
	system("data/bao2/TreeTagger/cmd/tree-tagger-french data/bao2/$RUBRIQUE/pre-corpus-titre-description_$RUBRIQUE.xml > data/bao2/$RUBRIQUE/corpus-titre-description_$RUBRIQUE");
	# perl treetagger2xml-utf8.pl resultat.txt "UTF-8"
	system("perl data/bao2/treetagger2xml-utf8.pl data/bao2/$RUBRIQUE/corpus-titre-description_$RUBRIQUE UTF-8");
}


sub parcoursarborescencefichiers {
    my $path = shift(@_);
	my %item = ();

    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 le REPERTOIRE : $file \n";
			&parcoursarborescencefichiers($file);	#recurse!
			# print "On sort du REPERTOIRE :  $file \n";
		}
		if (-f $file) {
			if ($file =~ /$RUBRIQUE.+\.xml$/) {
				# print "Traitement du fichier $file \n";
				open my $input, "<:encoding(UTF-8)",$file;
				$/=undef; # par défaut cette variable contient \n
				my $ligne=<$input> ;
				close($input);
				while ($ligne=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {
					# $1 = 1er parenthese 
					my $titre=&nettoyage($1);
					my $description=&nettoyage($2);
					
					if (!(exists $item{$titre})) {
						$item{$titre}=$description;
						print $output "$titre \n";
						print $output "$description \n";

					# segmentation de titre et description avec le programme tokenize offert par treetagger
					# procédure va renvoyer 2 valeurs : une avec le titre segmenté et l'autre avec la description segmentée 
					my ($titreSEG, $descriptionSEG) = &segmentationTD($titre,$description);
					print $output2 "<item><titre>\n$titreSEG\n</titre><description>\n$descriptionSEG\n</description></item>\n";
					}
				}
			}
		}
    }
}

sub segmentationTD {
	#titre, description
	#perl -f tokenise-utf8.pl test.txt | ./TreeTagger/cmd/tree-tagger-french -token -lemma -sgml > resultat.txt

	my ($arg1, $arg2) = @_;
	# ecriture des données textuelles dans un fichier TOTO
	# puis tokenizer TOTO 
	# puis récup les données 
	open my $tmp, ">:encoding(UTF-8)","data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE.txt";
	print $tmp $arg1;
	close $tmp;
	system("perl -f data/bao2/tokenise-utf8.pl data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE.txt > data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE-2.txt");
	undef $/;
	open my $tmp2, "<:encoding(UTF-8)","data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE-2.txt";
	my $titresegmente=<$tmp2>;
	close $tmp2;

	open $tmp, ">:encoding(UTF-8)","data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE.txt";
	print $tmp $arg2;
	close $tmp;
	system("perl -f data/bao2/tokenise-utf8.pl data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE.txt > data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE-2.txt");
	open $tmp2, "<:encoding(UTF-8)","data/bao2/$RUBRIQUE/pl_BAO2_$RUBRIQUE-2.txt";
	my $descriptionsegmente=<$tmp2>;
	close $tmp2;
	$/="\n";
	return $titresegmente, $descriptionsegmente;
}

#----------------------------------------------
sub nettoyage {
	my $texte=shift @_;
	$texte=~s/(^<!\[CDATA\[)|(\]\]>$)//g;
	$texte.=".";
	$texte=~s/\.+$/\./;
	$texte=~s/&amp;//g;
	return $texte;
}
#----------------------------------------------
