#!/usr/bin/perl

<<DOC;
Cordial
prend en entrŽe un fichier issu de treetagger
et un fichier de patrons morphosyntaxiques et
extrait suites de tokens correspondant aux patrons morpho-syntaxiques
DOC

print "bonjour\n";
open(FIC, $ARGV[0]) or die "impossible ouvrir $ARGV[0] : $!";
print "choisis nom de fichier pour contenir termes extraits\n";
my $fic=<STDIN>;
open(FIC1, ">$fic");	#ouverture fichier rŽsultat TXT liste des motifs reconnus
#initialisation des compteurs pour le dŽplacement parallle
my $i=0;  #pour identifier paralllement les token, lemme, patron dans le fichier ŽtiquetŽ
my $j=0;  #gre les patrons du fichier Cordial
my $k=0;  #gre les tokens du fichier Cordial

my @token=();
my @lemme=();
my @patron=();


while (<FIC>){		#fichier ŽtiquetŽ tabulations forme token, lemme, patron
	my $ligne=$_;
	chomp $ligne;	#supprime les retour-chariots !!!! pas du tout \r
	my @liste=split(/\t/,$ligne);	#crŽe liste selon les tabulations en trois parties token, lemme, patron
	$liste[2]=~s/\r//g; #enfin suppresion !!!!
	#print @liste."\n"; 
	push(@token, $liste[0]." "); 	#??commence ˆ 1
	push(@lemme, $liste[1]." ");
 	#print "coucou2";
	push(@patron, $liste[2]." "); #!!!!!!
	
	#print $liste[2];
	#print $liste[2];
	#$i=0;	#recommence ˆ chaque fois remplissage des listes @token, @lemme, @patron
	
}
#print $patron[0];

#print @patron;

#on a 3 listes @token, @lemme, @patron avec contenu
@sous_patron=();
while (defined($element_patron=shift(@patron))){
	$element_patron=~s/\n//; #vire Žventuels sauts de ligne fin de patron
	#print $element_patron;
	if ($element_patron !~ "PCTFORTE"){  #prend phrase par phrase
		push(@sous_patron, $element_patron); 
		$j++;  #compteur de patrons pris
		next;  #retour ˆ boucle
	}

	#rŽcupŽrer le nbre de tokens identique au nbre de patrons $j rŽcupŽrŽ.
	my @sous_token=@token[$k..$j-1]; #indexation parallle ˆ la place du patron 
	#print @sous_patron;
	&cherche_patron(@sous_patron);	#appel cherche_patron
	@sous_patron=();
	$k=$j+1;
	#print "tape return pour continuer";
	#my $reponse=<STDIN>;

	$j++;
}

#close(FIC1);
#close(FIC);
#=============================================


sub cherche_patron
{
my @liste=@_;
my $suite_de_patrons=join("",@liste); #liste des patrons dans cha”ne
#$suite_de_patrons=~s/\n//gi;
#print $suite_de_patrons."coucou";
$z=0;
$nb=0;
open(FIC, "$ARGV[1]"); #ouvre le fichier patron pour la recherche de l'utilisateur.
while(<FIC>)
{
$nb=0;
$ligne=$_; #lit ligne par ligne le fichier de l'utilisateur

chomp $ligne; #enlve les retour-chariots sur la ligne
#print $ligne."\n";
#$ligne=~s/\r//gi;
#print "coucou";
#print $ligne;
#my @lireq=split(/ /,$ligne); #problme encodage reconnaissance caractre sŽparateur !

#print $lireq[1]."\n";
#print @lireq."\n";    	

print "voici le patron traitŽ : $ligne\n";
while ($ligne=~m/ /g) {$nb++};  #sous_patron ESPACE sous_patron dans le fichier de l'utilisateur
$nb++; #nbre de patrons sur une mme ligne
#print $nb;
#print $suite_de_patrons;
while ($suite_de_patrons=~m/$ligne/g){   #quand a matche entre suites de patrons
	#print "matche";
	my $avant=substr($suite_de_patrons, 0, pos($suite_de_patrons)-length($&));  #dŽbut du matching - longueur de ce qui matche
	while ($avant=~m/ /g) {$z++}; #compte les blancs dans la suite de patrons pour tokens
	print FIC1 "@token[$k+$z..$k+$z+$nb-1]\n"; #Žcrit les tokens correspondants dans le fichier rŽsultat
	#print "tape sur return pour continuer\n";
	#my $reponse=<STDIN>;
	$z=0;
}
}
}