Début de l'extraction des patrons pour la sortie Cordial
On va extraire les patrons à partir du fichier obtenu avec Cordial.
On va utiliser la ponctuation comme marque de séparation car on considère qu’on ne peut pas trouver un syntagme de part et d’autre d’une marque de ponctuation.
En entrée, le programme prendra deux fichiers :
- le fichier étiqueté avec Cordial
- Les patrons qu’on veut extraire
Extrait de fichier étiqueté avec Cordial :
mot lemme Typegram
.
Parmi parmi PREP
les le DETDPIG
nouvelles nouveau ADJFP
tendances tendance NCFP
, , PCTFAIB
le le DETDMS
bio bio ADJINV
et et COO
l' le DETDMS
art de vivre art de vivre NCMS
. . PCTFORTE
\r
Les le DETDPIG
syndicats syndicat NCMP
réclament réclamer VINDP3P
des un DETDPIG
psychologues psychologue NCPIG
. . PCTFORTE
Fichier qui contient les patrons :
NCMS ADJMS
NCFS ADJFS
NCMP ADJMP
NCFP ADJFP
-> ces patrons permettent d'extraire tous les couples NOM + ADJ quelques soient les nombres et les genres de ces derniers
Programme qui extrait les patrons :
#/usr/bin/perl #c'est le chibong!!
open (FICCORDIAL, "$ARGV[0]");
while (<FICCORDIAL>) { # variable par défaut correspondante : $_
next if ($_!~/\t/); # on saute les lignes dans lesquelles il n'y a rien
my $ligne = $_;
chomp $ligne; # pour enlever le caractère de retour à chaque fin de ligne
if ($ligne!~/PCT/) { # si la ligne ne contient pas de ponctuation
# MADE IN J-M DAUBE : $ligne=~/(\w+)\t(\w+)\t(\w+)\t/;
# ATTENTION cette ligne n'est pas satisfaisante pour les mots qui contiennent des espaces !! exemple : au moment de
# avec la bibliothèque locale (use locale) 'w' aurait aussi contenu les caractères accentués car on se place en France
@cutcut=split(/\t/, $ligne); #on utilise le fait que les mots sont séparés par des tabulations
push (@token, $cutcut[0]);
push (@lemme, $cutcut[1]);
push (@pos, $cutcut[2]);
}
else {
print "@token\n";
print "appuie sur return pour continuer\n";
my $reponse=<STDIN>;
open (PATRONS, "$ARGV[1]"); # c'est le fichier des patrons qu'on veut trouver
while (<PATRONS>) {
my $patron = $_; # on met dans la variable patron ce qui est contenu dans patrons.txt
chomp $patron; # pour enlever le caractère de retour à chaque fin de ligne
$compare=""; # on initialise $compare à vide
foreach my $element (@pos) { # pour chaque partie du discours
$compare=$compare."\t".$element; # on met à la suite toutes les parties du discours avec entre deux parties une tabulation
} # fin de foreach
# if ($compare =~/$patron/) { # si il y a une correspondance entre le patron et la suite des parties du discours
while ($compare =~/$patron/g) {
print "There is a match !\n\n"; # on écrit "There is a match ! "
} # fin de if
} # fin de while
@token=(); #on remet la liste token à zéro
@lemme=(); #on remet la liste lemme à zéro
@pos=(); #on remet la liste pos à zéro
} # fin de else
} # fin de while
Sortie obtenue :
