#!/usr/bin/perl
#----------------------------------
# Ouverture des fichiers en lecture
#----------------------------------
open (FICTAG, $ARGV[0]) or die ("probleme sur ouverture du fichier xml...");
open (FICPOS, $ARGV[1]) or die ("probleme sur ouverture du fichier des patrons...");
#-----------------------------------------
# on stocke les patrons dans une liste....
#-----------------------------------------
my @listedespatrons=();
while (my $lignepos = <FICPOS>) {
    chomp($lignepos);
    push(@listedespatrons,$lignepos);
}
close(FICPOS);
#---------------------------
# Initialisation des listes
#--------------------------
my @tokens = ();
my @lemmes = ();
my @pos = ();
#-------------------------------------------
# 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 =~ /^<element><data type="type">(.+)<\/data><data type="lemma">(.+)<\/data><data type="string">(.+)<\/data><\/element>$/) {
	#-------------------------------------------
	# Suppression du caractère de saut de ligne
	chomp($ligne);
	#-------------------------------------------
	# Remplissage des listes
	push(@tokens, $3);
	push(@lemmes, $2);
	push(@pos, $1);
	#-------------------------------------------
    }
}
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
#----------------------------------------------------------------------------------------
my @tmplistedespos=@pos;
my $indice=0;
while (my $pos =shift(@tmplistedespos)) {

    foreach my $patron (@listedespatrons) {
	#-----------------------------------
	# on segmente 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 ($pos=~/$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++) {
		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";
		for (my $i=0;$i<=$#listedeterme;$i++) {
		    print $tokens[$indice+$i]," ";
		}
		print "\n";
	    }
	}
    }
    $indice++;
    # on avance dans la liste des POS et des TOKEN en //
}
