Boîte à Outils 3

Modifications du code de Serge Fleury

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.