Boite à Outils 3 : La Methode JMD
Pour lancer ce programme on a besoin d'un fichier texte contenant les patrons comme suit :
NC.. PREP NC..
NC.. ADJ..
ADJ.. NC..
Le code commenté
#!/usr/bin/perl use utf8; binmode STDOUT, "utf-8"; #programme d'extraction de patrons sur sortie cordial # perl JMD_prgm.pl 3208_iso.cnr PATRONS.txt |sort |uniq -c | sort -r > grr.txt open(FILE, "<:encoding(utf8)", $ARGV[0]); #on ouvre le fichier cordial my $chaine=""; while (my $ligne =<FILE>) { #on le lit ligne à ligne # on passe le fichier de vertical "mot lemme POS" # à horizontal "POS_token POS_token POS_token" #dans chaque ligne du fichier, on récupère ce qu'il y a entre les tabulations (=^I=\t) #phrase par phrase chomp $ligne; if (($ligne=~/^([^\t]+)\t[^\t]+\t([^\t]+)$/) and ($ligne!~/PCTFORTE/)){ my $f=$1; #token/syntagme my $c=$2; #POS $f=~s/ /#/g; #vire les espaces à l'interieur des syntagmes $chaine=$chaine.$c."_".$f." "; #produit la chaine horizontale } else { #print $chaine; #affiche la phrase #$continu=<STDIN>; # EXTRACTION DE PATRONS open(TERM, "<:encoding(utf8)", $ARGV[1]); # ouvre le fichier de patrons while (my $terme=<TERM>){ #pour chaque Patron chomp($terme); #on vire le retour à la ligne du patron #on génère une expression régulière à partir de notre patron #attention à ce que le programme utilise pas d'emblée la RegEx $terme=~s/([^ ]+)/$1_[^ ]+/g; while ($chaine=~/$terme/g){ # $& = resultat du match # $` = contexte gauche # $' = contexte droit my $correspondance=$&; $correspondance=~s/[A-Z]+_//g; $correspondance=~s/#/ /g; print $correspondance, "\n"; } close(TERM) } $chaine=""; #nettoie la chaine qui stockait la phrase } } close (FILE)