Secteur TAL Informatique,
Université Sorbonne nouvelle, Paris 3

19 rue des Bernardins, 75005 Paris
Secteur TAL Informatique, Université Sorbonne nouvelle, Paris 3

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