#!/usr/bin/perl

<<DOC;

prend en entree un fichier issu de treetagger (argument en position 0)
et un fichier de patrons morphosyntaxiques (argument en position 1); 
le programme extrait des suites de tokens correspondant 
aux patrons morpho-syntaxiques contenus dans le fichier de patrons

exemples d utilisation avec les fichiers d exemple fournis :

perl trouve_terme.pl SORTIE-TREETAGGER.txt patrons-1.txt
perl trouve_terme.pl une-description-etiquetee-avec-treetagger.txt patrons-2.txt

et CA MARCHE !!!!!!!!!

DOC

#---------------------------------------------------
# debut du programme, ouverture en lecture du fichier passe en argument
#---------------------------------------------------
print "Bonjour !\n";
open(FIC, $ARGV[0]);

#---------------------------------------------------
# debut du programme, choix du nom du fichier en sortie
#---------------------------------------------------
print "choisis un nom de fichier pour contenir les termes extraits\n";
my $fic=<STDIN>;
#---------------------------------------------------
# initialisation des variables
#---------------------------------------------------
open(FIC1, ">$fic");
my $i=0;
my $j=0;
my $k=0;
my @token=();
#---------------------------------------------------
# lecture du fichier de sortie TREETAGGER
# creation de 3 tableaux contenant les mots, les lemmes et les categories
#---------------------------------------------------
while (<FIC>) {
    my $ligne=$_;
    my @liste=split(/\t/,$ligne);
 #   print TRACE "Lecture dans Cordial :", @liste,"\n";
    push(@token, $liste[$i++]." ");
    push(@lemme, "$liste[$i++]" ." ");
    push(@patron, "$liste[$i++]" ." ");
    $i=0;
}
close(FIC);

#---------------------------------------------------
# on cree une liste vide destinee a recevoir les patrons
# presents dans le fichier lu a l etape precedente
# cette liste sera initialisee apres chaque construction
# de patron
#---------------------------------------------------
@sous_patron=();
#---------------------------------------------------
# creation de la liste des patrons lus dans le fichier
#  issu de treetagger
#---------------------------------------------------
while (defined($element_patron=shift(@patron))) {
    $element_patron=~s/[^A-Z0-3]{3}/ /g;
      if ($element_patron !~ PCTFAIB && $element_patron !~ PCTFORTE) {
	push(@sous_patron, $element_patron);

	$j++;
	next;
    }
 
    my @sous_token=@token[$k+1..$j-1];
 
#   on va maintenant voir si le sous-patron construit est dans le
#   liste des patrons cherches (dans le fichier des patrons scrutes)
    &cherche_patron(@sous_patron);
    @sous_patron=();
    $k=$j;
    $j++;
}

close (FIC1);
#=============================================
# procedure de recherche des patrons
#=============================================

sub cherche_patron {
 
    my @liste=@_;
    my $suite_de_patrons=join("",@liste);
    $z=0;
    $nb=0;
#   ouverture du fichier des patrons cherches
    open(FIC, "$ARGV[1]");
    while(<FIC>) {
	$ligne=$_;
	chomp $ligne;
	$nb=0;
	while ($ligne=~m/ /g) {$nb++};
	$nb++;
	while ($suite_de_patrons=~m/$ligne/g) {
	    my $avant=substr ($suite_de_patrons, 0, pos($suite_de_patrons)-length($ligne));
	    while ($avant=~m/ /g) {$z++}; 
	 
	    print FIC1 "@token[$k+$z+1..$k+$z+$nb]\n";
	    $z=0;
	}
    }
    close(FIC)
}
