#!/usr/bin/perl
#on dit bien d'utiliser l'encodage utf-8
use utf8;
use Time::HiRes qw(gettimeofday tv_interval);
#on souhaite avoir un affichage utf-8 dans le terminal => si jamais le terminal n'est pas en utf-8 par défaut
binmode STDOUT,":utf8";
#extraction de la terminologie sur le fichier Talismane: extraction par phrase, ne pas dépasser !
#le fichier talismane
my $timepg = [gettimeofday];
my $filetalismane=$ARGV[0];
#le fichier avec les patrons morphosyntaxiques
my $filetermino=$ARGV[1];
open my $fileT,"<:encoding(UTF-8)",$filetalismane;
open my $fileTer,"<:encoding(UTF-8)",$filetermino;
my @TERMINO=<$fileTer>;
close $fileTer;
my %dicotmp=();
my %dicoPatron=();
my $nbTerme=0;
my $nbMotInPhrase=0;
while (my $ligne=<$fileT>) {
	#si la ligne commence par ##, contient ££ ou est vide, on la passe
	next if (($ligne=~/££/) or ($ligne=~/^##/) or ($ligne=~/^$/));
	#on affiche la ligne
	#print $ligne;
	#on veut isoler chaque phrase: le prof, son séparateur c'est § et nous c'est un saut à la ligne: if ($ligne!~/^[^\t]+\t§/)
	#si la ligne ne contient pas le caractère séparateur, on va faire un dictionnaire
	#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!changer le délimiteur dans la bao2!!!!!!!!!!!!!!!!!!!!!!!!!!!!! => changé!
	if ($ligne!~/^\d+\t§/) {
		# pour remplir le dicotmp on va examiner la ligne lue
		# l'index sera la clé, le reste la valeur
		#on remplit le dictionnaire
		#l'index sera la clé, le reste sera la valeur
		#le premier item est la clé et le deuxième est le reste
		$ligne=~/^\d+\t(.+)$/;
		my $reste=$1;
		$nbMotInPhrase++;
		my $cle=$nbMotInPhrase;
		my @listereste=split(/\t/,$reste);
		$dicotmp{$cle}=\@listereste;
		#un scalaire pointeur vers la liste
		#$phtmp.=$reste;
		#les clés sont ordonnées seulement parce qu'elles sont numérotées
	}
	else {
		#------------------------
		# extraction termino....
		#on dit qu'on veut récupérer un scalaire donc la longueur de la liste
		my $phrase=" ";
		my $longueur = scalar (keys %dicotmp);
		for (my $i=1;$i<=$longueur;$i++) {
			my $LISTE=$dicotmp{$i};
			my @listedeferencee = @$LISTE;
			my $mot=$listedeferencee[0];
			my $pos=$listedeferencee[2];
			$phrase=$phrase.$mot."/".$pos." ";
		}
		foreach my $patron (@TERMINO) {
			my $patron2=$patron;
			chomp($patron2);
			$patron2=~s/([^ ]+)/\[\^ \]\+\/\\b$1/g;
			while ($phrase=~/(?=\s($patron2))/g) { 
				my $terme=$1;
				$terme=~s/\/[^ ]+//g;
				$dicoPatron{$patron}->{$terme}++;
				$nbTerme++;
			}
		}
		%dicotmp=();
		$nbMotInPhrase=0;
		#------------------------
	}

}
close($fileT);
open my $fileResu,">:encoding(UTF-8)","sortie_terminologie.txt";
print $fileResu "$nbTerme éléments trouvés\n";
foreach my $patron (keys %dicoPatron) {
	print $fileResu "\nType de pattern: ".$patron." \n\n";
	foreach my $terme (sort {$dicoPatron{$patron}->{$b} <=> $dicoPatron{$patron}->{$a} } keys %{$dicoPatron{$patron}}) {
		print $fileResu $dicoPatron{$patron}->{$terme}."\t".$terme."\n";
	}
}
print $fileResu "\nScript execution time: " . tv_interval($timepg) . " seconds.";
close($fileResu);
