Pour cette troisième boîte à outils, je me suis inspirée du code de Serge. Les modifications que j'ai apportées sont en somme toute bien simples :
Le script présenté ci-dessous demande toujours un fichier en entrée.
use strict;
use warnings;
# Liste de patrons à rechercher
my @patrons=("ADJ NOM", "NOM ADJ", "NOM PREP NOM");
# Définition du nombre d'éléments par patron
foreach my $patron (@patrons) {
my @elements = split(/ /, $patron);
my $element1 = $elements[0];
my $element2 = $elements[1];
my $element3;
my $element4;
if (scalar @elements >= 3) {
$element3 = $elements[2];
}
if (scalar @elements >= 4) {
$element4 = $elements[3];
}
# On ouvre le fichier à traiter pour en stocker le contenu
open(FILE,"$ARGV[0]");
my @lignes=<FILE>;
close(FILE);
# À la recherche des patrons dans le contenu stocké
while (@lignes) {
my $ligne=shift(@lignes);
chomp $ligne;
my $sequence="";
my $longueur=0;
if ($ligne =~ /<element><data type=\"type\">$element1<\/data><data type=\"lemma\">[^<]+<\/data><data type=\"string\">([^<]+)<\/data><\/element>/) {
my $forme=$1;
$sequence.=$forme;
$longueur=1;
my $nextligne=$lignes[0];
if ($nextligne =~ /<element><data type=\"type\">$element2<\/data><data type=\"lemma\">[^<]+<\/data><data type=\"string\">([^<]+)<\/data><\/element>/) {
my $forme=$1;
$sequence.=" ".$forme;
$longueur=2;
if (scalar @elements >= 3) {
my $nextnextligne=$lignes[1];
if ($nextnextligne =~ /<element><data type=\"type\">$element3<\/data><data type=\"lemma\">[^<]+<\/data><data type=\"string\">([^<]+)<\/data><\/element>//) {
my $forme=$1;
$sequence.=" ".$forme;
$longueur=3;
if (scalar @elements >= 4) {
my $nextnextnextligne=$lignes[2];
if ($nextnextnextligne =~ /<element><data type=\"type\">$element4<\/data><data type=\"lemma\">[^<]+<\/data><data type=\"string\">([^<]+)<\/data><\/element>/) {
my $forme=$1;
$sequence.=" ".$forme;
$longueur=4;
}
}
}
}
}
}
if (scalar @elements == 2) {
if ($longueur == 2) {
print $sequence,"\n";
}
}
if (scalar @elements == 3) {
if ($longueur == 3) {
print $sequence,"\n";
}
}
if (scalar @elements == 4) {
if ($longueur == 4) {
print $sequence,"\n";
}
}
}
}
Il ne nous reste plus qu'à intégrer tout cela dans notre code existant.