Télécharger le script ici.
Voilà le script avec des explications:
####################### Ière partie: Initializations #######################
Prépare l'environnement de travail. Suit: nettoyage des répertoires s'ils existent, créations des répertoires s'ils n'existent pas, copie des répertoires constants à partir de l'archive des données ARCHIVES.
####################### DEBUT - Prépare l'environnement #######################
#(opération 2>/dev/null) veut dire toutes les erreurs vont dans un trou noir
rm ./../CONTEXTES/* 2>/dev/null;
rm ./../DUMP-TEXT/* 2>/dev/null;
rm ./../RESULTAT/* 2>/dev/null;
rm -f ./../PAGES-ASPIREES/* ;#2>/dev/null; efface le contenu de ./../PAGES-ASPIREES/
mkdir ./../CONTEXTES 2>/dev/null;
mkdir ./../DUMP-TEXT 2>/dev/null;
mkdir ./../RESULTAT 2>/dev/null;
#cp -r ./../ARCHIVES/MOTIF/* ./../MOTIF;
#cp -r ./../ARCHIVES/SENS/* ./../SENS;
#cp -r ./../ARCHIVES/URLS/* ./../URLS;
mot='BOITE';
tablo=./../RESULTAT/Resultat.html;
####################### FIN - Prépare l'environnement #######################
#compte le nombre (quantité "qte_fichier") des langues
qte_fichier=0;
for fichier in `ls ./../SENS`
{
let "qte_fichier+=1"
};
####################### Commence la construction de la page avec les tableaux des liens vers les pages référentes au mot #######################
echo "<html>
<head>
<title>Vie des mots sur le web</title>
<meta http-equiv='"'Content-Type'"' content='"'text/html; charset=utf-8'"' /></meta>
</head>
<body bgcolor=\"tan\" TEXT=\"blue\"><font COLOR=\"#FFFFFF\">" > $tablo;
#######################Crée un tableau des sens du mot #######################
echo " <table border=\"1\" bgcolor=\"tan\"> " >> $tablo;
j=0; #flag nécessaire pour imprimer l'en-tête du tableau
for fichier in `ls ./../SENS`
{
i=1;
langue=${fichier//.*/}; #contient la partit du fichier qui contient le nom de la langue
vector[1]=$langue; # un tableau avec les sens du mot étudié
#extrait les sens des fichiers dans le répértoire /SENS
while read line
do
vector[$i+1]="$i.$line";
let "i+=1";
done < ./../SENS/$fichier;
qte_sens=$i; #qte_sens = (nombre des sens du mot)+1
#imprime l'en-tête du tableau des sens s'il n'est pas déjà imprimé
let "j+=1";
if [ "$j" -le "1" ];
then
echo " <tr><th colspan=\"$qte_sens\"> TABLEAU DES SENS ETUDIES du mot $mot</th></tr> " >> $tablo
fi
i=1;
echo "<tr>" >> $tablo;
for i in `seq 1 $qte_sens`;
do
echo "<td>${vector[$i]}</td>" >> $tablo;
echo ${vector[$i]};
done;
echo "</tr>" >> $tablo;
};
echo "<tr><th colspan=\"$qte_sens\">
NOTEZ BIEN QUE LE MOTIF DOIT CONTENIR LE MOT ETUDIEE. CERTAINS SENS NE CONTIENNENT PAS CE MOT,
DONC POUR EUX LE MOTIF DOIT ETRE CHANGE MANUELLEMENT!</th></tr> " >> $tablo;
echo "</table>" >>$tablo;
unset vector; #libère l'espace des tableaux matrix et vector
####################### IIème partie: Aspirer les pages choisies #######################
# laisse un peu d'espace entre le tableau des sens et les tableaux des liens
#####début de la boucle pour la lécture des fichiers dans ./../URLS
#####en même temps remplit les dossiers:./../PAGES-ASPIREES
##### ./../DUMP-TEXT
##### ./../CONTEXTE
i=1;
echo "Est-ce que vous voulez RE -télécharger les pages web? (o/n)";
read reponse;
echo "**************** PATIENTEZ S'IL VOUS PLAIT! LE RESULTAT VIENT... ****************";
#####Début de la boucle de la lecture des fichier dans ./../URLS
for fichier in `ls ./../URLS`
{
#commence la création d'un tableau des liens par sens et par langue (travail sur chaque fichier de ./../URLS)
echo "<p><hr bgcolor=\"blue\"></p> " >> $tablo;
#détermine la langue et le sens du mot dans le fichier courrant
langue=${fichier//_*.*/}; #structure du fichier dans /URLS : "langue_numéro du sens.txt"
temp=${fichier//*_/};#enlève la partie "langue" du fichier "langue_numéro du sens.txt"
sens_num=${temp//.*/};#contient seulement le "numéro du sens" dans le fichier "langue_numéro du sens.txt"
########Ecrit l'en-tête du tableau pour un sens pour chaque langue
echo "<table width=\"100%\" border=\"1\" bgcolor=\"tan\">
<tr>
<th>sens $sens_num</th>
<th colspan=\"3\"><MARQUEE DIRECTION=\"left\" SCROLLAMOUNT=\"5\" BGCOLOR=\"tan\">Mot $mot en $langue ___Mot $mot en $langue ___Mot $mot en $langue ___Mot $mot en $langue ___</th>
<th> Source de la page WEB en ligne</th>
</tr>" >>$tablo;
#####début de la boucle pour la lecture d'un fichier,
#####une ligne contient une adresse url, une page est aspirée et stockée dans ./../PAGES-ASPIREES/
for nom in `cat ./../URLS/$fichier`
{
#l'url de la page est associé à la variable &nom, c'est une ligne du fichier
# concaténation de variable dans une chaîne:
temp="${langue}_${sens_num}_${i}"; #sert à donner un nom à la page aspirée du type "langue_sens du mot_numéro courrant de la page aspirée.html"
if [ ${reponse} == "o" ] ; then
mkdir ./PAGES-ASPIREES 2>/dev/null;
wget -O ./../PAGES-ASPIREES/$temp.html $nom; #télécharge les pages selectionnées
source_aspiree="./../PAGES-ASPIREES/";
else
source_aspiree="./../ARCHIVES/PAGES-ASPIREES/";
fi;
#####début transcodages en UTF-8, dossier du travail ./../PAGES-ASPIREES
#détermine l'encodage avec du code uniligne en Perl
# -n exécute avec tous les arguments @ARGV comme des fichiers
# -e vérifie l'existence du fichier;la ligne s'exécute sans paramètres pour un programme
# -lne trouve des palindromes
# $1 valeur d'une expression régulière repérée; $_ contient la ligne courante; $_ valeur actuelle; /o exécuter une seule fois
source_file="${source_aspiree}/${temp}.html";
charset=$(perl -nle 'print $1 if (/charset=(.*?)"(.*?)/imo)' $source_file);
#charset=`echo ${charset} | tr 'A-Z' 'a-z'`;# transformer en minuscules
#echo "$i in $temp charset is $charset";
if [ $charset <> "utf-8" ]; then
#iconv -f encodage_original -t utf-8 fichier_original > nouveau_fichier
#mv move ou efface des fichier ou des répertoires; renome les originaux pour utiliser le même nom pour les pages transcodées
iconv -s -f $charset -t UTF-8 $source_file > ./../PAGES-ASPIREES/transcode_$temp.html;
#sed -e “s/chaine1/chaine2/g” “$file” > “$file”.tmp && mv -f “$file”.tmp “$file”
sed -e "s/charset=${charset}/charset=utf-8/g" ./../PAGES-ASPIREES/transcode_$temp.html > ./../PAGES-ASPIREES/$temp.html;
rm ./../PAGES-ASPIREES/transcode_$temp.html
fi;
#####fin du transcodage
#####début du dumpage, dossier du travail ./../DUMP-TEXT
#le texte dans la variable &nom est filtré/dumpé et écrit dans un fichier txt; -nolist : pour enlever les URLS de references
lynx -assume_local_charset=utf-8 -display_charset=utf-8 -nolist -dump ./../PAGES-ASPIREES/$temp.html > ./../DUMP-TEXT/$temp.txt;
#####fin du dumpage
#####début selecter le contexte
#la sortie du programme est toujours nomme resultat-extraction.html il faut donc le renommer
case "${langue}" in
"francais" | "français")
perl ./../ARCHIVES/minigrepmultilingue-v2.1/FRANCAIS/minigrepmultilingue.pl "UTF-8" ./../DUMP-TEXT/$temp.txt ./../MOTIF/"${langue}_motif".txt;
cp resultat-extraction.html ./../CONTEXTES/$temp.html;
;;
"bulgare" | "russe" | "anglais")
perl ./../ARCHIVES/minigrepmultilingue-v2.1/minigrepmultilingue.pl "UTF-8" ./../DUMP-TEXT/$temp.txt ./../MOTIF/"${langue}_motif".txt;
cp resultat-extraction.html ./../CONTEXTES/$temp.html;
;;
*)
echo "Langue non supportée!"
exit
;;
esac ;
#####fin selecter le contexte
#####début de l'écriture de la page du résultat
echo " <tr>
<td width=\"5%\">lien $i </td>
<td width=\"10%\"><a href=\"./../CONTEXTES/$temp.html\">CONTEXTE $i</a></td>
<td width=\"7%\"><a href=\"./../DUMP-TEXT/$temp.txt\">DUMPE $i</a></td>
<td width=\"7%\"><a href=\"./../PAGES-ASPIREES/$temp.html\">ASPIRE $i</a></td>
<td width=\"71%\"><a href=\"$nom\"> $nom </a></td>
</tr>" >>$tablo;
#####fin de l'écriture de la page du résultat
let "i+=1";
};
#####fin de la boucle for pour la lecture des lignes d'un fichier de ./../URLS
};
#####fin de la boucle de la lecture des fichier dans ./../URLS