#!/usr/bin/perl
#----------------------------------
# Ouverture des fichiers en lecture
#----------------------------------
open (FICTAG, $ARGV[0]) or die ("probleme sur ouverture de la sortie CORDIAL...");
open (FICPOS, $ARGV[1]) or die ("probleme sur ouverture du fichier des patrons...");
#-----------------------------------------
# on stocke les patrons dans une liste....
#-----------------------------------------
my @listedespatrons=(); # je parcours mon fichier cordiale, je vois si la première ligne = premier élément de mon patron; si oui, je le garde et continue le même procédé (deuxième ligne est elle égale au deuxième élément du patron).
#on commence le travail de parcours du fichier cordial ligne par ligne
#création de la liste de toutes les formes, de tous le lemmes; listes alignées. le modèle est forme tabulation ligne cat
while (my $lignepos = <FICPOS>) {
    chomp($lignepos);
    push(@listedespatrons,$lignepos);
}
close(FICPOS);
#---------------------------
# Initialisation des listes
#--------------------------
my @malignesegmentee = ();
my @listedetokens = ();
my @listedelemmes = ();
my @listedepos = ();
#-------------------------------------------
# Lecture du fichier de tags ligne par ligne
#-------------------------------------------
while (my $ligne = <FICTAG>) {
    #----------------------------------------------------------------------------------
    # On ne s'occupe pas des lignes qui ne respectent pas la modèle mot tab mot tab mot
    #----------------------------------------------------------------------------------
    if ($ligne =~ /^[^\t]+\t[^\t]+\t[^\t]+$/) {
	#-------------------------------------------
	# Suppression du caractère de saut de ligne
	chomp($ligne);
	#-------------------------------------------
	# Remplissage des listes
	@malignesegmentee = split(/\t/, $ligne);
	push(@listedetokens, $malignesegmentee[0]);
	push(@listedelemmes, $malignesegmentee[1]);
	push(@listedepos, $malignesegmentee[2]);
	#-------------------------------------------
    }
}
close(FICTAG);
#-----------------------------------
# on va maintenant parcourir les POS
# et les TOKENS en //
#----------------------------------------------------------------------------------------
# 1. on cree une liste tmp des POS que l'on va parcourir en supprimant le premier element 
#    a chaque fois
#----------------------------------------------------------------------------------------
#on avance par liste de cat; on avance d'une position à une autre position
my @tmplistedespos=@listedepos;#création d'une liste temporaire que l'on vide au fur et à mesure, on passe d'une cat à une cat
my $indice=0;
#la boucle permet de parcourir la liste en la vidant au fur et à mesure, juqu'à épuisement de la liste. on parcourst toutes les cat jusqu'à épuisement
while (my $a =shift(@tmplistedespos)) #je suis sur la première cat; est que le premier élément du patron coincide avec la cat. 
{
    foreach my $patron (@listedespatrons) {
	#-----------------------------------
	# on segmente en dièse le patron pour connaitre
	# son premier element
	my @listedeterme=split(/\#/,$patron);
	#-----------------------------------
	# on teste si l'element courant POS correspond au premier element du patron... 
	if ($a=~/$listedeterme[0]/) {
	    # si c'est OK...
	    # on regarde maintenant s'il y a correspondance pour la suite...
	    my $verif=0;
	    for (my $i=0;$i<=$#listedeterme-1;$i++) #est ce que la cat à l'indice zero coincide avec le deuxième élément de la liste...
		{
		if ($tmplistedespos[$i]=~/$listedeterme[$i+1]/) { 
		    #Le suivant est bon aussi...
		    $verif++ ;
		}
		else {
		    # ici : $tmplistedespos[$i] differe de $listedeterme[$i+1]...
		}
	    }
	    #------------------------------------------------------------------------
	    # si verif est egal au nb d'element du patron c'est qu'on a tt reconnu... 
	    # on imprime les tokens en // aux POS : astuce $indice permet de garder le 
	    # le // entre POS et TOKEN....
	    #------------------------------------------------------------------------
	    if ($verif == $#listedeterme) 
		{ 
		#print "Correspondance sur $patron \n"; on cherche dans la liste des termes, la coincidence entre le parton et la cat du terme associé
		for (my $i=0;$i<=$#listedeterme;$i++)
		{
		    print $listedetokens[$indice+$i]," ";#indice signifie mémorise la cat où l'on est; l'indice correspond au nb d'élément de la cat
		}
		print "\n";
	    }
	}
    }
    $indice++;
    # on avance dans la liste des POS et des TOKEN en //
}
