#!/usr/bin/perl -w

#------------------------------------------------
#usage:
# perl BaO3.pl nom_fichier_talismane patron
#example:
# perl BaO3.pl sortieTalismane_3208.txt V DET NC
#fichier obtenu:
# sortie_patron_chainePatron.txt
#------------------------------------------------

use utf8;

#----------------------------------
#obternir les arguments du terminal
#----------------------------------
my $fichier = shift(@ARGV);   #nom du fichier Talismane
my @patron = @ARGV;    #suite du patron
my $chaine_patron = join("",@patron); #créer la chaine de patron pour la comparaison plus tard

#------------------------------------------------------------------------------------
#lecture du fichier Talismane,obtenir la liste des tokens et la liste de leur POS tag
#------------------------------------------------------------------------------------
open(TALISMANE, "<:encoding(utf8)", $fichier);
my @liste_formes = ();  #liste de token
my @liste_pos = ();     #leur tag
while (my $ligne=<TALISMANE>){
	if ($ligne =~ /^[0-9]+\t[^\t]+\t[^\t]+\t[^\t]+\t/){
		chomp ($ligne);
		my @token_info = split(/\t/,$ligne);
		push(@liste_formes, $token_info[1]);
		push(@liste_pos, $token_info[3]);
	}
}
close TALISMANE;

#---------------------------------------------------------
#chercher les patrons dans la liste, stocker les résultats
#---------------------------------------------------------
#liste globale pour stocker les patrons trouvés
my @liste_patrons = ();
#on prend chaque fois le tag et sa forme correspondante, au début de la liste, en même temps, on les supprime de leur liste
while (my $tag = shift(@liste_pos)){
	my $forme = shift(@liste_formes);
	if  ($tag eq $patron[0]){        #si trouver le début, on compare les suivants
		$terme = "$forme ";          #initialiser la chaine comforme au patron requis
		$suite_tag = "$tag";         #chaine de tags trouvé
		for (my $compteur = 0; $compteur <= $#patron-1; $compteur++) {
			
			#puisqu'on a supprimé le tag quand on le prenais, donc, l'élément premier dans @liste_pos doit maintenant correspondre le 2e dans @patron
			if ($liste_pos[$compteur] eq $patron[$compteur+1]){
				$terme = $terme.$liste_formes[$compteur]." ";
				$suite_tag = $suite_tag.$liste_pos[$compteur];
			}	
		}
		#vérifier la suite trouvée comforme au patron jusqu'à la fin
		if ($suite_tag eq $chaine_patron){
			push(@liste_patrons, $terme);  #ajouter dans liste globale
		}
		
	}
}

#----------------------------------------
#écriture du résultat dans un fichier txt
#----------------------------------------
my $chainePatron = join("-",@patron);
open(SORTIE, ">:encoding(utf8)", "sortie_patron_$chainePatron.txt");
$count = 1;
foreach $p (@liste_patrons){
	print SORTIE "$count\t$p\n";
	$count++;
}
close SORTIE;






