#==========================================
# Module: Programmation et projets encadrés
#Auteur:   Zahir Maafa
#Date:     Avril 2006

#==========================================

#!/usr/bin/perl -w
use warnings;
use diagnostics;
use strict;
use locale;
<<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_mod.pl SORTIE-TREETAGGER.txt patrons-1.txt> fichier des termes

DOC


my @liste;
my @termes;
my @patrons;
my $chpatrons;
my $sptrc;
my $i=0;
#===================================
# Lecture des termes et des patrons
#===================================

open(FIC,$ARGV[0]);
while (<FIC>)
{
@liste=split('\t',$_);
$termes[$i]=$liste[0];   # tableau des termes
$patrons[$i]=$liste[1]; # tableau des patrons
$i++;
}
$chpatrons=join(" ",@patrons);
 

$i=0;

close(FIC);
#===================================
# Lecture du fichier  des patrons
#===================================
open(FIC,$ARGV[1]);
open(FIC1,">res.txt");
while (defined($sptrc=<FIC>))
{
 $sptrc=~ s/\r//g;

 $sptrc=~ s/\n//g;

 cherche_patrons();

}

close(FIC);
close(FIC1);

#====================================
#La procedure de recherche
#====================================

sub cherche_patrons

{
my $base=0;
my $ch=$chpatrons;

my $t;
my $ii=0;
my @chu;
my $d=nb_terme($sptrc);

my $s=0;

# Localiser la suite des patrons
$chpatrons=~ s/$sptrc/1 $sptrc/g;
 



my @nptron=split(' ',$chpatrons);

while ($ii< $#nptron)
{
if ($nptron[$ii] eq "1")
{

 $ch= join(" ", @termes[$ii-$s..$ii-$s+$d-1]);
 if ($ch !~/[^a-zA-Z0-9çàáèéùîïæœëêôÿŸÈÉÊÇÎÏâÂÙŒÛûúÚ_\-\s]/)    # Minimiser les erreurs
 {
    print $ch ."\n";
 }
$s++;
}
$ii++;
}


}



#===================================
# compte le nombre de mots d'une chaîne
#===================================
sub nb_terme
{ my $chen=$_[0];

  my $nb=1;
  while ($chen=~ m/ /g)
{
$nb++;
}
  return $nb;
}