#!/usr/bin/perl
#--------------------------------------------------------------------
<<DOC;
Format d\'entree : un texte étiqueté et lemmatisé par treetagger + une liste de POS décrivant le patron (ex: DET NC ADJ)

perl programme.pl fichierTT DET NC ADJ

Format de sortie : la liste des occurrences du patron s\'affiche dans le fichier de sortie
DOC
#--------------------------------------------------------------------
use utf8;
binmode STDOUT,":utf8";
#--------------------------------------------------------------------
#récuperer le fichier à traiter de la liste des arguments donnée au programme
my $fichereatraiter=shift @ARGV;
#ce qui reste dans la liste des aguments est le patron
my @PATRON=@ARGV;
#ouverture du fichier à traiter
open my $input, "<:encoding(utf-8)",$fichereatraiter;
#lecture du fichier à traiter
my @LISTE=<$input>;
close($input);
#boucle sur les lignes du fichier à traiter jusqu'à quand $LISTE sera vidé complétement (avec shift)
while (my $ligne=shift @LISTE) {
	#variable vide qui contiendra le terme
	my $terme="";
	#si la ligne contenue dans $ligne correspond au premier du patron $PATRON[0]
	if ($ligne=~/<element><data type="type">$PATRON[0]<\/data><data type="lemma">[^<]+?<\/data><data type="string">([^<]+?)<\/data><\/element>/) {
		#j'ajoute le mot (contenu dans le premier groupe delimité par les parenthèses)
		#dans la variable terme (le . correspond au + en python)
		$terme=$terme.$1;
		#checkfin pour controler la longueur du patron
		my $longueur=1;
		#indice pour controler l'incrémentation et la lecture des lignes
		#cet indice me permet d'avancer en manière synchrone
		my $indice=1;
		# alors il faut que je lise autant de ligne qu'il y a dans le patron et tester chaque terme du patron...
		while (($LISTE[$indice-1]=~/<element><data type="type">($PATRON[$indice])<\/data><data type="lemma">[^<]+?<\/data><data type="string">([^<]+?)<\/data><\/element>/) and ($indice <= $#PATRON)) {
			#j'increment l'indice et je continue à lire
			$indice++;
			#j'ajoute le nouveau terme à la variable
			$terme.=" ".$2;
			$longueur++;
		}
		#quand l'indice longuer est = à la longueur du patron
		if ($longueur == $#PATRON + 1) {
			#ajout du terme désormais complet au dictionnaire des patrons
			$dicoPatron{$terme}++;
			#incrementation du nb de termes trouvés
			$nbTerme++;
		}
	}	
}
#préparation du fichier sortie
open my $output,">:encoding(UTF-8)","NVV_TT.txt";
#printer le nb d'élèments trouvés
print $output "$nbTerme éléments trouvés\n";
#printer chaque patron contenu dans le dico sorté
foreach my $patron (sort {$dicoPatron{$b} <=> $dicoPatron{$a} } keys %dicoPatron) {
	print $output "$dicoPatron{$patron}\t$patron\n";
}
close($output);