Secteur TAL Informatique,
Université Sorbonne nouvelle, Paris 3

19 rue des Bernardins, 75005 Paris
Travail du 15 février 2006 :
Extraction terminologique

Liens

Lien direct : http://www.tal.univ-paris3.fr/cours/projet_15_02_06.html

Retour page du cours.

Travail à faire

Ce travail est explicité sur le blog du master

Script de travail

[Lien vers script et ressources de test]

#!/usr/bin/perl

 

<<DOC;

PROGRAMME D’Extraction terminologique

Ce programme prend en entrée :

·        un fichier issu de treetagger (argument en position 0)

·        un fichier de patrons morphosyntaxiques (argument en position 1) ;

 

 

exemples d utilisation avec les fichiers d exemple fournis :

 

 

PROGRAMME

Sortie Treetagger

Fichier des patrons

perl

trouve_terme.pl

SORTIE-TREETAGGER.txt

patrons-1.txt

perl

trouve_terme.pl

une-description-etiquetee-avec-treetagger.txt

patrons-2.txt

 

 

Le programme extrait des suites de tokens correspondant aux patrons morpho-syntaxiques contenus dans le fichier de patrons. Le programme construit en sortie le fichier des tokens correspondants aux patrons cherchés.  Il construit aussi un fichier de TRACE nommé trace.txt (attention, il peut être gros…) : ces écritures dans le fichier de trace sont en vert ci-dessous, vous pourrez les supprimer après vérification du bon fonctionnement du programme.

 

DOC

 

#---------------------------------------------------

# debut du programme, ouverture en lecture du fichier passe en argument

#---------------------------------------------------

print "bonjour\n";

open(FIC, $ARGV[0]);

 

# ouverture d un fichier de trace, destine a recevoir les

# informations de traitements

open(TRACE,">trace.txt");

#---------------------------------------------------

# 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 sortie treetagger :", @liste,"\n";

    push(@token, $liste[$i++]." ");

    push(@patron, "$liste[$i++]" ." ");

    push(@lemme, "$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))) {

    if ($element_patron !~ PUN && $element_patron !~ SENT) {

      push(@sous_patron, $element_patron);

      print TRACE "SOUS-PATRON en construction : ",@sous_patron,"\n";

      $j++;

      next;

    }

    print TRACE "SOUS-PATRON construit : ",@sous_patron,"\n";

    my @sous_token=@token[$k+1..$j-1];

    print TRACE "SOUS-TOKEN construit : ",@sous_token,"\n";

#   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);

close(TRACE);

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

# procedure de recherche des patrons

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

 

sub cherche_patron {

    print TRACE "RECHERCHE dans le fichier des patrons...\n";

    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=$_;

      print TRACE "PATRON LU : $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 TRACE "PATRON OK : @token[$k+$z+1..$k+$z+$nb]\n";

          print FIC1 "@token[$k+$z+1..$k+$z+$nb]\n";

          $z=0;

      }

    }

    close(FIC)

}