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.