#!/usr/bin/perl # prend un fichier tagé # etape 1 : ouvrir le fichier et extraire la liste des etiquettes open(FIC, "<:encoding(iso-8859-1)", $ARGV[0]); open(MOTIF, "<:encoding(iso-8859-1)", $ARGV[1]); my @LISTEMOTIF=; close (MOTIF) ; # --- # on met toutes les lignes de motifs ds une liste ... my @TOKENS=(); my @ETIKS=() ; # --- while (my $ligne=) { next if ($ligne!~/^[^\t]+\t[^\t]+\t[^\t]+/); $ligne=~s/\r//g ; chomp($ligne) ; # pr enlever \n if ($ligne!~/^[^\t]+\t[^\t]+\tPCTFORTE/) { #sous treetager -> SENT . si la ligne ne contient pas de pontcuation forte # print "tttt",$ligne,"\n"; @LISTE=split(/\t/,$ligne) ; push(@TOKENS,$LISTE[0]) ; push(@ETIKS,$LISTE[2]) ; } else { # fin de "phrase" &extract ; @TOKENS=() ; @ETIKS=() ; } } sub extract { # on doit travailler sur @ETIKS, @TOKENS, @LISTEMOTIF # il faut faire "coulisser" chaque motif de @LISTEMOTIF sur @TOKENS my $tokens_as_string=join(" ", @TOKENS) ; # on transforme la liste en scalaire my $etiks_as_string=join(" ", @ETIKS) ; # idem my $cpt = 0; foreach my $motif (@LISTEMOTIF) { chomp ($motif) ; #eventuellement retirer un \r cf ligne 17 while ($etiks_as_string=~/$motif/g) { $cpt++; my $avant=$`; my $nbblancdansavant=0; while ($avant=~/ /g) { # on compte le nombre de blancs dans $avant... $nbblancdansavant++; } my $nbblancdansmotif=0; while ($motif=~/ /g) { # on compte le nombre de blancs dans $motif... $nbblancdansmotif++; } my $fin=$nbblancdansavant+$nbblancdansmotif; # print "MATCH $cpt !!! : \n$motif\n est dans \n $etiks_as_string\n"; print "@TOKENS[$nbblancdansavant..$fin]\n" ; # my $rep= ; } } } # si $motif match $etiks as string -> $etiks as tokens