Secteur TAL Informatique,
Université Sorbonne nouvelle, Paris 3
19 rue des Bernardins, 75005 Paris
Extraction terminologique
Liens
Lien direct : http://www.tal.univ-paris3.fr/cours/projet_15_02_06.html
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)
}