Projet "La vie multilingue des mots sur le web"

solution avec Perl


(retour page d'accueil du cours)


Le programme qui suit fournit une ossature partielle de la chaîne de traitements réalisés avec les scripts bash. On pourra compléter ce script pour aboutir au même type de résultat.
Pour le moment le script permet :


Il reste à extraire les contextes autour des mots choisis ;
il faut aussi créer les tableaux HTML en sortie ;
il faut enfin pouvoir lancer le traitement sur toutes les URLs.

Lectures :

Perl pour les linguites. Programmes en Perl pour l'exploitation des données langagières. Ludovic Tanguy, Nabil Hathout. Editions Hermès

On regardera en particulier les programmes suivants qui donnent des indications suffisantes pour construire le programme :
URL-HTML.pl Récupération du code HTML complet d'une page Web
URL-texte.pl Récupération d'une page Web et transformation en texte brut
recherche-Yahoo.pl Interrogation de Yahoo via Yahoo Web Search Services
recherche-Live.pl Interrogation de Live Search via Live Search API
frequences-Yahoo.pl Calcul du nombre de documents indexés par Yahoo pour une liste de mots
contextes-Yahoo.pl Extraction des contextes des résultats de Yahoo pour une requête donnée


use locale;
#---------------------------------------
use LWP::Simple;
#This module is meant for people who want a simplified view of the libwww-perl library. It should also be suitable for one-liners.
#If you need more control or access to the header fields in the requests sent and responses received,
#then you should use the full object-oriented interface provided by the LWP::UserAgent module.
#---------------------------------------
use Encode;
use HTML::Entities;

####################################################################
# Mode d'emploi : l'url traitee est passee en parametre au programme
####################################################################
if ($#ARGV != 0) {
die "Usage : ", $0, " URL\n";
}

#-- recuperation de la page-
my $URL = $ARGV[0];
my $page = get( $URL ); # cf doc LWP::Simple;
#---------------------------

if ( not defined($page) ){
die "Problème lors du téléchargement !\n";
}

#-- decodage et nettoyage --
my $codage_page = "latin1";
if ($page =~ /\bcharset\s*=\s*([\w-]+)/i) {
$codage_page = $1;
eval { decode ($codage_page, "test") };
if ( defined ($@) ) {
$codage_page = "latin1";
}
}

my $page_unicode = decode( $codage_page, $page );
my $texte_unicode = supprime_html( $page_unicode );
my $texte = normalise_latin1( $texte_unicode );

#-- fini... on imprime !!! --
print $texte,"\n";

exit;
##############################################################################
# Procedures
##############################################################################
sub supprime_html {

my @balises_a_ignorer =
("applet","code","embed","head","object","script","server");

my $html = shift @_;
$html =~ s/\n+/ /g;
$html =~ s/\r+/ /g;
decode_entities($html);
foreach my $balise (@balises_a_ignorer) {
$html=~s/<$balise.*?<\/$balise>//ig;
} $html =~ s///g; #commentaires
$html =~ s/<\/?p\/?>/\n/ig; #paragraphes
$html =~ s//\n/ig; #retours à la ligne
$html =~ s/<\/tr>/\n/ig; #lignes de tableau
$html =~ s/<\/?h[1-6]>/\n/ig; #titres
$html =~ s/<\/?div.*?>/\n/ig; #sections
$html =~ s/<.*?>//g; #autres balises
$html =~ s/\s*\n\s*/\n/g; #espaces en début/fin de ligne
$html =~ s/ +/ /g; #séquences de plusieurs espaces
return $html;
}

#----------------------------------------------------------------------------
sub normalise_latin1 {
my $chaine = shift @_;
$chaine =~ s/[\x{2019}\x{2018}]/\'/g;
$chaine =~ s/[\x{201C}\x{201D}]/\"/g;
$chaine =~ s/[\x{2013}\x{2014}]/-/g;
$chaine =~ s/\x{2026}/.../g;
$chaine =~ s/\x{0152}/OE/g;
$chaine =~ s/\x{0153}/oe/g;
$chaine =~ s/[^\x{0000}-\x{00FF}]//g;
return $chaine;
}
#----------------------------------------------------------------------------