Extraction de patrons : Cordial + script Perl.

Publié le par Nassim & Marco.

Nous avons commencé à extraire le patron NCFS ADJFS à partir de la sortie .cnr étiquetée avec "Cordial".
Nous présentons dans un premier temps la sortie étiquetée. Notons que les trois colonnes de cette sortie sont séparées par un "\t" et que la ponctuation (PCT) a, comme nous allons le voir, un rôle fondamental dans la structure du script Perl. 


Sortie étiquetée :

L' le DETDMS
objectif objectif NCMS
de de PREP
la le DETDFS
commission commission NCFS
Copé Copé NPI
est être VINDP3S
une un DETIFS
suppression suppression NCFS
totale total ADJFS
en en PREP
2011 2011 NCMIN
. . PCTFORTE
\r
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
Script :

#/usr/bin/perl
open(FICCORDIAL, "$ARGV[0]");
while ($ligne= <FICCORDIAL>) {
next if ($ligne!~/\t/);
chomp $ligne;
if ($ligne!~/PCT/){ #traitement initial et passage au "else" dès qu'on rencontre un PCT dans $ARGV[0] (sortcordial.cnr).
@decoup=split(/\t/, $ligne);
push (@token, $decoup[0]);
push (@lemme, $decoup[1]);
push (@partof, $decoup[2]);
}
else { #deuxième traitement qui consiste à lire le fichier de patrons et à le comparer avec ce qui a été stocké dans la variable @partof dans le traitement initial. Cette dernière est d'abord affectée à une variable scalaire (transofrmation d'un tableau @ en une variable scalaire $) et ce grâce à la commande "join". Les éléments de chaque string seront délimités par un "\t" (tabulation). Il est également possible d'utiliser une boucle "foreach" avec comme instruction la concaténation systématique des éléments dans un string composé de catégories grammaticales avec un "\t". La concaténation peut se faire de deux manières (cf. infra ***). 
print "@token\n";
print "ENTREE\n";
my $reponse=<STDIN>;
open(FICPATRONS, "$ARGV[1]");
while ($patrons=<FICPATRONS>) {
chomp $patrons;
$compare=""; #initialiser à vide un variable scalaire qui va contenir les lignes de partof comparées avec le ou les patrons.
$compare=join("\t", @partof); #foreach my $element(@partof) {
                   #     ***$compare=$compare."\t".$element ##$compare.="\t".$element
                   #     }
while ($compare=~/$patrons/g) {  
print "$compare\n"; # imprime au fur et à mesure la ligne (string) de $compare où la correspondance est positive.
print "correspondance!\n"
}
}
@token=(); # vider les tableaux.
@lemme=();
@partof=();
}
}

Ligne de commande : perl etikcordial.pl (script) sortcordial.cnr (premier argument ou $ARGV[0]) patrons.txt (deuxième argument ou $ARGV[1]) > resultatpatrons2.txt

Résultats : 

L' objectif de la commission Copé est une suppression totale en 2011
ENTREE
DETDMS NCMS PREP DETDFS NCFS NPI VINDP3S DETIFS NCFS ADJFS PREP NCMIN
correspondance!
Parmi les nouvelles tendances
ENTREE
le bio et l' art de vivre
ENTREE
Les deux consoles trustent les jeux classés dans le top 100 des ventes
ENTREE
Cinq nouveaux titres sont en gestation
ENTREE
Le Britannique Tim Hetherington a remporté le grand prix du World Press de la photographie d' actualité
ENTREE
Sacré Photo de l' année 2007
ENTREE
son cliché d' un soldat américain épuisé dans un bunker en Afghanistan a été publié dans le magazine américain Vanity Fair
ENTREE
La direction de l' hebdomadaire souligne le caractère exceptionnel
ENTREE
voire inédit
ENTREE
de la procédure pénale pour faux
ENTREE
PREP DETDFS NCFS ADJFS PREP NCMIN
correspondance!

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article