Boîte à outils 3
A présent, on cherche à extraire des structures morpho-syntaxiques de nos données taggées.
On va voir par exemple ce qu'on peut faire à partir d'un fichier taggé par Cordial et d'un fichier patron. Plus bas, vous verrez un fichier patron au format suivant :
NC.+ PREP NC.+ PREP NC.+
#!/usr/bin/perl
open (FIC, ">", "bao3_output.txt");
# Listes pour chaque type de contenu
my @LISTETOKEN=();
my @LISTELEMME=();
my @LISTEETIQUETTE=();
# lecture du fichier PATRON, premier argument de la commande
open(PATRON,"$ARGV[1]");
my @LISTEPATRON=;
close(PATRON);
# Ouverture du fichier étiqueté par Cordial
open(CORDIAL,"$ARGV[0]");
while (my $ligne=)
{
$ligne=~s/\r//;
chomp($ligne);
if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/)
{
my ($token,$lemme,$etiquette)=($1,$2,$3);
# Si le token n'est pas une ponctuation forte, l'ajouter aux tableaux
if ($etiquette!~/^PCTF/) {
push(@LISTETOKEN,$token);
push(@LISTELEMME,$lemme);
push(@LISTEETIQUETTE,$etiquette);
}
else
{
&compare(\@LISTETOKEN,\@LISTEETIQUETTE);
@LISTETOKEN=();
@LISTEETIQUETTE=();
@LISTELEMME=();
}
}
}
sub compare {
my ($first,$second)=@_;
my @LISTETOKEN=@$first;
my @LISTEETIQUETTE=@$second;
foreach my $patron (@LISTEPATRON) {
$patron=~s/\r//;
chomp $patron;
my $texte_des_pos=join(" ",@LISTEETIQUETTE);
while ($texte_des_pos=~/$patron/g)
{
# On compte les blancs à gauche
my $contextebefore=$`;
my $compteurblanc=0;
while ($contextebefore=~/\t/g)
{
$compteurblanc++;
}
my @MONPATRONENCOURS=split(/ /, $patron);
my $longueurpatron=$#MONPATRONENCOURS;
my $bornesup = $compteurblanc + $longueurpatron;
print "@LISTETOKEN[$compteurblanc..$bornesup] \n";
}
}
}
On obtient ainsi un fichier texte contenant le patron que l'on a cherché.
Une salle de prière musulmane
le pays applique encore des
Star Wars franchit la barre
Une trentaine d' études ont
La question hautement sensible de
Le scrutin doit mettre un terme au