#!/usr/bin/perl <<DOC; Ce programme extrait les suites de mots correspondant aux patrons morphosyntaxiques données Usage: programme.pl -p fichier_patrons -i fichier_cordial -o fichier_sortie DOC use warnings; #utilisation du module Getopt::Std pour définir les options pour le programme use Getopt::Std; %opts=(); getopt("p:i:o:", \%opts); #récupération du nom du fichier contenant des patrons morphosyntaxiques $patrons = $opts{p}; $input = $opts{i}; $output = $opts{o}; open(FIC, "$input") or die "impossible ouvrir $input : $!"; open(FIC1, ">$output"); my $i=0; my $j=0; my $k=0; my @token=(); while (<FIC>){ my $ligne=$_; chomp $ligne; my @liste=split(/\t/,$ligne); push(@token, "$liste[$i++]"." "); push(@lemme, "$liste[$i++]" ." "); push(@patron, "$liste[$i++]" ." "); $i=0; } #on a 3 listes @token, @lemme, @patron @sous_patron=(); while (defined($element_patron=shift(@patron))){ $element_patron=~s/\n//; if ($element_patron !~ "PCTFORTE"){ push(@sous_patron, $element_patron); $j++; next; } my @sous_token=@token[$k..$j-1]; &cherche_patron(@sous_patron); @sous_patron=(); $k=$j+1; $j++; } #============================================= sub cherche_patron { my @liste=@_; my $suite_de_patrons=join("",@liste); $z=0; $nb=0; open(FIC, "$patrons") or die "impossible ouvrir $patrons : $!"; while(<FIC>) { $nb=0; $ligne=$_; chomp $ligne; while ($ligne=~m/ /g) {$nb++}; $nb++; while ($suite_de_patrons=~m/$ligne/g){ my $avant=substr ($suite_de_patrons, 0, pos($suite_de_patrons)-length($&)); while ($avant=~m/ /g) {$z++}; print FIC1 "@token[$k+$z..$k+$z+$nb-1]\n"; $z=0; } } }