extrait-term-c.pl
#!/usr/bin/perl use locale; #fait en sorte que le \w prenne aussi les caractères accentués #mettre le résultat de cordial ##On lance comme cela: perl extrait-term3.pl fichier.cnr fichier_patrons_cordial > culture-c-patron.txt ##Ex: ##perl extrait-term3.pl culture-un.cnr fichier_patrons_cordial_NOM_ADJ > culture-c-NOM-ADJ.txt ##perl extrait-term3.pl culture-un.cnr fichier_patrons_cordial_NOM_NOM > culture-c-NOM-NOM.txt ##perl extrait-term3.pl culture-un.cnr fichier_patrons_cordial_NOM_PREP_NOM > culture-c-NOM-PREP-NOM.txt #Dans fichier_patond_cordial_NOM_ADJ il est écrit avec des tabulations: ADJFS NCFS (adjectif féminin singulier, nom commun féminin singulier) ou ADJ.. NC.. (adjectif nom commun), etc. open(FICCORDIAL, $ARGV[0]); #my: dit que la variable va être locale <va lire une ligne dans ce fichier-là> #le while permet d'avancer dans le fichier my $i=0; while (<FICCORDIAL>) { #print "<$_>"; next if ($_!~/\t/); my $ligne = $_; chomp($ligne); # si ma ligne ne contient pas pct if ($ligne !~/PCT/) { #$ligne = ~/(\w+)\t(\w+)\t(\wt)/; #\p{IsWord} marche aussi #au moment de my @decoupeligne = split (/\t/, $ligne); push (@token, $decoupeligne[0]); #le decoupeligne c'est le liste chez SF push(@lemme, $decoupeligne[1]); push(@pos, $decoupeligne[2]); $i++; } else { #print "\n Liste des POS: \n @pos \n"; #pos c'est patron chez SF #print "@token\n"; #print "appuie sur return pour continuer\n"; #my $reponse = <STDIN>;open (FICPATRON, $ARGV[1]); while (<FICPATRON>) { my $patron1 = $_; chomp($patron1); my $compare = ""; $compare=join("\t", @pos); #compare =join(@pos,"\t") ; #print "Chaine lue: $compare \n"; #print "Patron à chercher: $patron1 \n";
my $j = 0; my $k = 0; while ($compare=~/$patron1/g) { #print "Correspondance OK $i\n"; #$i++; my $avant = $`; my $apres = "$'"; while ($avant =~ /\t/g){$j++}; while ($apres =~ /\t/g){$k++}; print "@token[$j..$i-$k-1]\n"; #la longueur du morceau de phrase examinée $j=0; $k=0; #exit; } } close FICPATRON; @token = (); #D'après Sophie @lemme = (); @pos = (); $i=0; } } close FICCORDIAL;