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 :
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;
}
#----------------------------------------------------------------------------