Secteur TAL Informatique,
Université Sorbonne nouvelle, Paris 3
19 rue des Bernardins, 75005 Paris
MINIGREP MULTILINGUE en perl
Objectif
Filtrage dans des fichiers multilingues.
En entrée : un fichier à filtrer (dit FILEINPUT) dont on connaît l'encodage ; un motif à rechercher et extraire dans FILEINPUT.
En sortie : un fichier au format UTF-8 contenant les lignes du fichier FILEINPUT contenant le motif visé.
Mode d'emploi
Téléchargement
Programme (version 2.2), un jeu de fichiers de test : minigrepmultilingue-v2.2-regexp.zip
Le motif peut être écrit sous la forme d'une regexp (cf fichier motif donné en exemple dans l'archive).
Programme (version 2.1), un jeu de fichiers de test : minigrepmultilingue-v2.1.zip
Mise à jour par Pierre Marchal (M1/INALCO).
L'option -c permet de ne pas tenir compte du contexte (cf v.2)
Programme (version 2), un jeu de fichiers de test : minigrepmultilingue-v2.zip
Mise à jour par SF et Pierre Marchal (M1/INALCO).
Intégration du contexte (cf résultat présenté infra) autour des lignes contenant le motif (un ligne avant, une ligne après)
Programme (version 1), un jeu de fichiers de test : minigrepmultilingue.zip
Le code (version 1)
#!/usr/bin/perl
use locale;
use English;
use Getopt::Std;
use Encode::Encoding;
use Encode::CN;
use Encode::KR;
use Encode::TW;
use Encode::JP;
use Unicode::String qw(utf8);
my $VERSION="1.0";
my $CMD="minigrepmultilingue";
my $MODIFIED="19/10/2007";
###########################################################################
my $HELP="
___________________________________________________________________________
$CMD $VERSION Projet "La vie des mots sur le web" PLURITAL $MODIFIED
___________________________________________________________________________
OBJECTIF : un mini-grep-multilingue
SYNTAXE : $CMD [options] <fichier-codage> <fichier-a-filtrer> <fichier-avec-motif>
OPTIONS :
-h imprime le mode d'emploi de ce programme
EXEMPLES:
perl mini-grep-multilingue.pl \"UTF-8\" RU_Convention_UTF8.txt motif.txt
___________________________________________________________________________
";
###########################################################################
# parse command line
###########################################################################
getopts('hdt');
if (defined($opt_h)) {
print STDERR "$HELP";
exit(1);
}
#----------------------------------------------------------------------------
if ((!($ARGV[0])) || (!($ARGV[1])) || (!($ARGV[2]))) {
print "___________________________________________________________________________\n\n
ERREUR : Le programme necessite 3 arguments : \n
1. un encodage,\n
2. un fichier a filtrer,\n
3. un fichier contenant le motif à filtrer \n\n";
print "Exemple de lancement : \n";
print "___________________________________________________________________________\n\n";
print "perl mini-grep-multilingue.pl \"UTF-8\" RU_Convention_UTF8.txt motif.txt \n\n";
exit;
}
###########################################################################
# A. Lecture des arguments du programme
###########################################################################
my $tmpcodage=$ARGV[0];
chomp($tmpcodge);
my $filein=$ARGV[1];
print "Fichier en entree : $filein \n";
my $filewithforme=$ARGV[2];
my $fileout="resultat-extraction.html";
###########################################################################
# B. le fichier contenant la forme à extraire
###########################################################################
print "extraction du motif...\n";
open(FILE0,"<:encoding($tmpcodage)",$filewithforme) or die "Pb sur l'ouverture du fichier $filewithforme !!! ";
my $formein=<FILE0>;
chomp($formein);
$formein=~/MOTIF=(\w+)$/;
my $forme=$1;
utf8($forme);
close(FILE0);
###########################################################################
# C. Parcours du fichier, extraction du motif, ecriture du fichier en sortie...
###########################################################################
print "extraction de la forme et ecriture du resultat dans $fileout \n";
open(FILEIN,"<:encoding($tmpcodage)",$filein) or die "Pb sur l'ouverture du fichier $filein !!! ";
open(FILEOUT,">:encoding(UTF-8)",$fileout) or die "Pb sur l'ouverture du fichier $fileout !!! ";
print FILEOUT "<html>\n<head>\n<title>mini-egrep multi-encodage pour le projet : la vie des mots sur le web</title>\n";
print FILEOUT "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8\" />\n";
print FILEOUT "<body bgcolor=\"white\">\n";
print FILEOUT "<p align=\"justify\"><font color=\"blue\"><b>Encodage utilisé (INPUT) :</b></font> $tmpcodage </p>\n";
print FILEOUT "<p align=\"justify\"><font color=\"blue\"><b>Forme recherchée :</b></font> <font color=\"red\">$forme</font> </p>\n";
print FILEOUT "<font color=\"blue\">____________________________ </font>\n";
my $i=1;
print FILEOUT "<blockquote>\n";
print FILEOUT "<ul>\n";
while(my $ligne=<FILEIN>) {
utf8($ligne);
if ($ligne=~/($forme)/) {
$ligne=~s/($forme)/<font color=\"red\"><b>$1<\/b><\/font>/g;
print FILEOUT "<li><font color=\"blue\"><b>Ligne n°$i</b></font> : $ligne </li>";
}
$i++;
}
print FILEOUT "</ul>\n";
print FILEOUT "</blockquote>\n";
print FILEOUT "</html></body>";
###########################################################################
close(FILEIN);
close(FILEOUT);
###########################################################################
Résultats
Le fichier de travail et le fichier motif sont disponibles dans l'archive : minigrepmultilingue-v2.2-regexp.zip (Version 2.2), minigrepmultilingue-v2.1.zip (Version 2.1), minigrepmultilingue-v2.zip (Version 2) ou minigrepmultilingue.zip (Version 1)
Mode d'emploi pour installer le minigrep.
Le fichier résultat (version 2.2) : minigrepmultilingue-resultat-extraction-v2-2.html
Le fichier résultat (version 2.1) : minigrepmultilingue-resultat-extraction-v2.html
Le fichier résultat (version 1) : minigrepmultilingue-resultat-extraction.html