#!/usr/bin/perl
# BAO3 : extraction de patrons morphosyntaxiques ; on fait ça pour trouver des indices terminologiques dans les textes   
#on veut chercher des patrons morphosyntaxiques
#dans le fichier tagé par cordial
#coment on va faire ?
# PROGRAMME PRINCIPAL

my @LISTETOKEN=();
my @LISTELEMME=();
my @LISTEETTIQUETTE=();

# lire le fichier Patron 
open(PATRON, "$ARGV[1]");

my @LISTEPATRON=<PATRON>;#lire les lignes du fichier et  range dans la liste 
# méthode de lecture globale en Perl, mettre  tout un fichier dans une ligne, efficace sur des petits fichiers

close(PATRON);
        	
#OUVRE LE FICHIER cordial en argument
open(CORDIAL, "$ARGV[0]"); # visiblement pas de pb d'encodage

while (my $ligne=<CORDIAL>) {#CHAQUE LIGNE VA ËTRE DIVISEE PAR RAPORT à LA TABULATION; lectutre par ligne
	$ligne=~s/\r//;
	chomp($ligne);

	#les parenthèses captures ce qui est entre parenthèses  
	if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/) {
		# Création des variables
		my ($token,$lemme,$etiquette)=($1,$2,$3); # on mets toutes les variables sur une ligne 
		#

		# 
		if($etiquette!~/PCTF/) { #pctf = ponctuation faible /forte ; 

			#push => rajoute des élements dans une liste et les enregistre

			# mettre le premier element, FORME dans la liste TOKEN
        	push(@LISTETOKEN, $token);

        	# mettre le deuxieme element, LEMME dans la liste LEMME
        	push(@LISTELEMME, $lemme);

        	# mettre le troisieme element, POS dans la liste POS
        	push(@LISTEETTIQUETTE, $etiquette);	

		} 
		else {
			#on a déclaré les listes comme des variables dans le programme 
			&compare(\@LISTETOKEN,\@LISTEETTIQUETTE); #création d'une réference vers une liste
			@LISTETOKEN=();
			@LISTEETTIQUETTE=();
			@LISTELEMME=();
		}



		} 

}
#
# SOUS-PROGRAMME
#
sub  compare {

	my ($first,$second)=@_;
	my @LISTETOKEN=@$first;
	my @LISTEETTIQUETTE=@$second;

	#print "Liste des tokens: @LISTETOKEN \n"; # il y'aura un blanc entre chaque élement de la liste
	
	#my $rep=<STDIN>;
	#print "Liste des  tags: @LISTEETTIQUETTE\n";
	foreach my $patron (@LISTEPATRON) {
		$patron =~s/\r?\n//;
		chomp $patron;
		#print "$patron";
		#print "Tapez sur une touche pour continuer...\n";
		#join colle les arguments 
		#my $rep=<STDIN>;# pour que le programme s'arrête
		my $texte_des_pos=join(" ",@LISTEETTIQUETTE);
		while ($texte_des_pos=~/$patron/g ) {
			# on veut savoir combien il y a de blancs dans le contexte gauche de la zone de correspondance

			#print "YOUPI !!!! \n";#Au lieu d'écrire youpi on va chercher l'indice 

			my $contextebefore=$` ;
			#print "CB : ",$contextebefore,"\n";
			my $compteurblanc=0;
			while ($contextebefore=~/ /g) { 
				$compteurblanc++;

			}
			my @MONPATRONENCOURS=split(/ /, $patron);
			my $longueurpatron=$#MONPATRONENCOURS;
		
			# valeur du plus grand indice dans la liste
			my $bornesup = $compteurblanc + $longueurpatron;
			print "@LISTETOKEN[$compteurblanc..$bornesup]\n";


		}# on mets en commentaires les print
	}

}
