#!user/bin/perl # Le programme d'extraction de patron de POS dans un fichier étiqueté par Cordial # Auteur : Jean-Michel Daube # perl extraction_patrons_JMD.pl ../../DONNEES/resultat_cordial/rubrique-3210.cnr patron_extract.txt use utf8; binmode STDOUT, ":utf8"; open (FIC, "<:encoding(utf-8)", $ARGV[0]); open (MOTIF, "<:encoding(utf-8)", $ARGV[1]); my @LISTE_PATRON = ; # On met le contenu du fichier MOTIF dans chaque élément my @TOKENS = (); my @ETIQUETTES = (); while (my $ligne = ) { $ligne =~ s/\\r+?//g; if ($ligne =~ /^[^\t]+\t[^\t]+\t[^\t]+/) { if ($ligne !~ /PCTFORTE/) { chomp ($ligne); my @LISTE = split(/\t/, $ligne); push (@TOKENS, $LISTE[0]); push (@ETIQUETTES, $LISTE[2]); } else { &traitement; # Sert à vider les tableaux pour avoir seulement chaque phrase, et non un empilement @TOKENS = (); @ETIQUETTES = (); } } } close FIC; close MOTIF; ######## Sous-routine Traitement # Dans le fichier "patron_extract.txt", il faut mettre les patrons que l'on souhaite extraire sub traitement { # @LISTE_PATRON : contient les patrons foreach my $patron (@LISTE_PATRON) { chomp ($patron); my $ligne_etiquette = join(' ', @ETIQUETTES); # Contient dans une chaine de caractères les éléments de étiquettes pour comparer avec $patron # On compte le nombre d'espace dans la chaine d'avant pour obtenir l'index my $espace_avant = 0; while ($ligne_etiquette =~ /($patron)/g) { my $avant = $`; while ($avant =~ / /g) { $espace_avant++; } # Nombre d'espaces dans le motif my $espace_motif = 0; while ($patron =~ / /g) { $espace_motif++; } # Contient le nombre d'espaces au total pour partir du nombre d'espaces avant au nombre d'espaces total my $total = $espace_avant + $espace_motif; print "$patron : @TOKENS[$espace_avant..$total]\n"; } } }