use strict; use locale; my $etat = 0; my @sequence = (); my @final = (); while ( my $ligne = ){ chomp $ligne; my ( $forme, $categorie, $lemme ) = split ( /\t/, $ligne ); if ( ($etat == 0) and ($categorie eq "NOM") ){ push (@sequence, $forme); $etat = 1; @final = @sequence; } elsif ( ($etat == 1) and ( ($lemme eq "du") or ($lemme eq "de") ) ){ push (@sequence, $forme); $etat = 2; } elsif ( ($etat == 2) and ($categorie eq "NOM") ){ push (@sequence, $forme); $etat = 1; @final = @sequence; } elsif ( ($etat == 2) and ($categorie =~ /^(DET|PRO:DEM)/) ){ push (@sequence, $forme); $etat = 3; } elsif ( ($etat == 3) and ($categorie eq "NOM") ){ push (@sequence, $forme); $etat = 1; @final = @sequence; } else { if ( $etat > 0 ){ print join (" ", @final), "\n"; } @sequence = (); $etat = 0; } }