# On veut chercher des patrons morphosyntaxiques dans le fichier taggé par Cordial 
# Cordial 3 colonnes: mot, lemme, etiquettes de catégories
# Fichier patron.txt contenant le motif recherché (il est possible d'y mettre des regexp)
# Chercher correspondance entre le patron et la 3eme colonne du fichier Cordial 
# Puis faire sortir les items de la premiere colonne (les mots)
# On va transformer les colonnes en listes. On aura trois listes alignees.

# On ne s'interesse qu'aux lignes qui ont trois colonnes
# On ne s'interesse pas aux ponctuations
# Probleme des ligne vides

# Lecture du fichier patron
open(PATRON, "$ARGV[1]");
my @LISTEPATRON=<PATRON>; #lecture globale du fichier dans une liste 
close(PATRON);

my @LISTETOKEN=();
my @LISTELEMME=();
my @LISTEETIQUETTE=();
# Le fichier Cordial est le premier argument
open (CORDIAL, "$ARGV[0]"); # pour l'instant on met pas l'encodage
while (my $ligne = <CORDIAL>) {
    #print $ligne;
	$ligne=~s/\r//; # Comme le fichier Cordial vient de Windows, c'est mieux de  supprimer les \r
	chomp($ligne); 
	if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/) { # On s'interesse aux lignes qui ont trois elements separes par deux tabulations 
	# les () capturent le resultat de la regexp (1)=le mot (2)=le lemme (3)=la categorie
		my $token=$1;
		my $lemme=$2;
		my $etiquette=$3;
		#print $ligne;
		if ($etiquette!~/^PCTF/) {
			push(@LISTETOKEN, $token);
			push(@LISTELEMME, $lemme);
			push(@LISTEETIQUETTE, $etiquette);
		}
		else {
			# &compare(@LISTETOKEN, @LISTEETIQUETTE); > attention, si on fait ça, les deux listes sont prises comme une seule (sans frontiere entre les listes)
			&compare(\@LISTETOKEN, \@LISTEETIQUETTE); # comme ça les listes sont transformées en scalaires
			# Creation d'une reference vers une liste
			@LISTETOKEN=();
			@LISTELEMME=();
			@LISTEETIQUETTE=();
		}
	}
}

# ----------------------------------------------
# SOUS-PROGRAMMES
#################################SOUSPROGRAMME##################################################
sub compare {
	my($first,$second)=@_;
	my @LISTTOKEN=@$first;
	my @LISTETIQUETTE=@$second;
	#print "Liste de token : @LISTTOKEN \n";
	#print "Liste de tag : @LISTETIQUETTE \n";
	foreach my $patron (@LISTEPATRON){
		chomp $patron;
		#print "$patron";
		#print "Tapez sur une touche pour continuer...\n";
		#my $rep=<STDIN>;
		my $texte_des_pos=join(" ",@LISTETIQUETTE);
		while ($texte_des_pos=~/$patron/g) {
				my $contextbefore=$`;#ce qui est avant le variable 
# 				print "kkkkkk\n";
				my $compteurblanc=0;
				while ($contextbefore=~/ /g) {
					$compteurblanc++;
					}
				my @MONPATRONENCOURS=split(/ /,$patron);
				my $longeurpatron=$#MONPATRONENCOURS;
				my $bornesup=$compteurblanc+$longeurpatron;
				print "Token cherché est: @LISTTOKEN[$compteurblanc..$bornesup] \n";
				#print "Tapez sur une touche pour continuer... \n";
				#my $rep=<STDIN>;
		}
	}	
}