Boite à outils 3: extraction de patrons (avec perl)
Présentation
Le programme se lance de la façon suivante :
perl bao3.pl nomfichier.cnr patrons.txt| sort | uniq -c | sort -r > nom-sortie.txt
Notre fichier patrons.txt est composé de trois lignes:
NC.. PREP NC..
ADJ.. NC..
NC.. ADJ.. qui nous permettent d'extraire les nom/prep/nom, nom/adj et adj/nom.
Grâce aux arguments présents dans la ligne de commande, nous obtenons un fichier de sortie avec les patrons précedents extraits classés dans l'ordre du plus fréquent au moins fréquent, avec également leur nombre d'occurences.
Le programme
BAO3.pl
Le fichier des patrons
Le script
#!/usr/bin/perl
use utf8;
binmode STDOUT,":utf8";
# Programme d'extraction de patron
# sur sortie Cordial
# Usage : perl bao3.pl nomfichier.cnr patrons.txt| sort | uniq -c | sort -r > nom-sortie.txt
#--------------------------------------------------------------------
open(FIC,"<:encoding(ISO-8859-1)",$ARGV[0]);
my $chaine="";
while (my $ligne=<FIC>) {
chomp $ligne;
if (($ligne=~/^([^\t]+)\t[^\t]+\t([^\t]+)$/) and ($ligne!~/PCTFORTE/)) {
my $f=$1;
my $c=$2;
$f=~s/ /#/g;
$chaine = $chaine . $c."_".$f." ";
}
else {
open(TERM,"<:encoding(utf8)",$ARGV[1]);
while (my $terme=<TERM>) {
chomp($terme);
#$terme=~s/([A-Z]+)/$1_\[\^ \]+/g; # avec cette RegEx, on est obligé d'écrire totalement les patrons
$terme=~s/([^ ]+)/$1_\[\^ \]+/g; #les patrons sont plus simple et sur deux lignes seulement
while($chaine=~/($terme)/g) {
my $correspondance=$&;
$correspondance=~s/[A-Z]+_//g;
$correspondance=~s/#/ /g;
print $correspondance, "\n";
}
}
close(TERM);
$chaine="";
}
}
close(FIC);