#!/bin/bash
#L'utilisateur doit se placer dans le dossier "projet" et lancer la commande suivante: sh PROGRAMMES/script.sh. Le programme fera tout lui-même, sans demander aucune information supplémentaire. Le programme créera un fichier tabl1.html dans le dossier "TABLEAUX".
echo "
Tableau de liens httpsens | | adresse web | lien vers la page aspiree | dump encodage initial | dump encodage UTF-8 | contextes |
" > TABLEAUX/tabl1.html;
# obj est un fichier ou dossier dans le répertoire "projet".
for obj in `ls`
do
#J'ai besoin du dossier "URLS", qui se trouve dans le répertoire "projet", donc je fais un test pour le retrouver.
if [ $obj = "URLS" ]; then
#Dans le dossier "URLS", il y a des dossiers consacrés aux différentes langues. Je les traite un à un. "dossier" est une variable qui prend pour valeur les noms des dossiers du répertoire "URLS" l'un après l'autre.
# La variable "nom" prend pour valeur le nom de chacun des dossiers du répertoire "URLS" l'un après l'autre.
for dossier in `ls URLS`
do
if [ $dossier = "arabe" ]; then
nom="arabe";
elif [ $dossier = "russe" ]; then
nom="russe";
fi
echo "$nom";
# L'en-tête de la partie du tableau contient le nom du dossier traité qui correspond au nom d'une langue.
echo "$nom |
" > TABLEAUX/tabl1.html;
n=1;
for fichier in `ls URLS/$dossier`
do
#Dans chaque dossier consacré à une langue donnée, il y a 4 fichiers contenant des URLS.
#Chaque fichier contient des URLS qui comprend un des 4 sens du mot "bouton". Les noms de ces fichiers sont significatifs.
#Par exemple, le fichier qui contient des URLS concernant le mot "bouton" au sens botanique s'appelle b_ar_txt.txt.
#Le fichier qui contient des URLS relatif au mot "bouton" au sens électrique s'appelle e_ar_txt.txt.
#Grâce à la commande "cut", nous obtenons cette première lettre significative du nom du fichier et ainsi déterminons le sans du mot dans les URLS qu'il contient.
#La variable "theme" prend pour valeur cette première lettre et la variable "sens" prend pour valeur le sens du mot.
#L'introduction de la deuxième variable n'est pas nécessaire, mais commode pour le contrôle du déroulement du programme.
echo "fichier = $fichier";
theme=`echo $fichier | cut -d_ -f1`;
echo "theme = $theme";
if [ $theme = "b" ]; then
sens="botanique";
elif [ $theme = "c" ]; then
sens="couture";
elif [ $theme = "m" ]; then
sens="medical";
elif [ $theme = "e" ]; then
sens="electrique";
fi
echo "sens = $sens";
#Je crée des répertoires pour stocker les fichiers contenant le texte en UTF-8 et les fichiers contenant les contextes des mots choisis.
mkdir DUMP-UTF8/$sens-$nom;
mkdir CONTEXTES/$sens-$nom;
#On aspire les pages à partir des URLS grâce à la commande "curl".
for lien in `cat URLS/$dossier/$fichier`
do
curl -o PAGES-ASPIREES/pa$n$nom-$theme.html $lien;
#On récupère l'encodage à partir des indications du créateur du site. La commande "egrep" cherche un des motifs indiqués entre parenthèses. L'option -i enlève les distinctions entre les casses. L'option -o arrête la recherche au sein du fichier dès que le premier motif (la première indication de l'encodage) est trouvé.
#La variable "char" prend pour valeur l'encodage de la page.
char=$(egrep -m 1 -o '(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)(\w)?|(WINDOWS|windows|Windows)-1251|(WINDOWS|windows|Windows)-1252|(WINDOWS|windows|Windows)-1256|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' PAGES-ASPIREES/pa$n$nom-$theme.html | sort -u)
echo "char=$char"
#Si l'encodage n'est pas indiqué dans la page ou bien, pour une raison ou une autre, il n'est pas détecté par "egrep", on cherche l'encodage à l'aide de la commande "file".
#La variable "enc" prend pour valeur la réponse donnée par la commande "file".
if [[ $char == "" ]]; then
enc=$(file -i PAGES-ASPIREES/pa$n$nom-$theme.html)
echo "enc=$enc"
#On vérifie si la commande "file" a retrouvé l'encodage, c'est-à-dire si la variable "enc" contient le mot "charset".
verif=$(egrep -i -o "charset" $enc)
echo "verif=$verif"
#Si l'encodage a été détecté, on le donne comme valeur à la variable "encodage". Pour le faire, on prend la variable "enc", qui contient une ligne qui ressemble à "charset=UTF-8". On coupe la valeur à droite du signe "=".Ainsi, on obtient l'encodage.
if [[ $verif == "charset" ]]; then
encodage=$($enc | cut -d= -f2)
#Si l'encodage n'a pas été détecté par "file", on donne à la variable "encodage" la valeur d'une chaîne de caractères vide.
else
encodage=""
fi
#Si l'encodage a été détecté par la commande "egrep", la variable "encodage" prend cette valeur.
else encodage=$char
fi
echo "encodage=$encodage"
#Ainsi, la variable "encodage" contient soit l'encodage de la page, soit une chaîne de caractères vide.
#Si l'encodage n'a pas été détecté, on affiche un message d'erreur dans le tableau.
if [[ $encodage == "" ]]; then
echo "$sens | $n | lien vers le site web | page aspiree numero $n | erreur | erreur | erreur |
" > TABLEAUX/tabl1.html;
#Si l'encodage a été détecté, on le donne pour valeur à la variable "code" et on continue les traitements.
else
code=$encodage
echo "code=$code"
# fichier boncode$n$nom.txt - fichier avec le bon encodage (UTF-8)
# fichier proper$n$nom.txt - fichier avec l'encodage initial
#Si l'encodage initial est UTF-8, il ne faut pas le changer. On écrit le même texte dans deux fichiers: avec l'encodage initial et avec l'encodage UTF-8.
if [ $code = "UTF-8|utf-8|utf8|UTF8" ]; then
lynx -dump -nolist -display_charset=$code $lien > DUMP-TEXT/proper$n$nom-$theme.txt;
lynx -dump -nolist -display_charset=$code $lien > DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt;
#On cherche les motifs dans les fichiers texte en UTF-8 et on les enregistre dans des fichiers contextes dont les noms commencent avec "cont".
if [ $nom = "arabe" ]; then
if [ $sens = "botanique" ]; then egrep -i "برعم" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "couture" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "medical" ]; then egrep -i "بشرة" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "electrique" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
fi
elif [ $nom = "russe" ]; then
if [ $sens = "botanique" ]; then egrep -i "бутон" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "couture" ]; then egrep -i "пуговиц" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "medical" ]; then egrep -i "прыщ" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "electrique" ]; then egrep -i "кноп" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
fi
fi
#Si l'encodage initial n'est pas UTF-8, on recode le fichier à l'aide de la commande "iconv".
else lynx -dump -nolist -display_charset=$code $lien > DUMP-TEXT/proper$n$nom-$theme.txt;
iconv -f $code -t UTF-8 DUMP-TEXT/proper$n$nom-$theme.txt > DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt;
#On cherche les motifs dans les fichiers texte en UTF-8 et on les enregistre dans des fichiers contextes dont les noms commencent avec "cont".
if [ $nom = "arabe" ]; then
if [ $sens = "botanique" ]; then egrep -i "برعم" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "couture" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "medical" ]; then egrep -i "بشرة" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "electrique" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
fi
elif [ $nom = "russe" ]; then
if [ $sens = "botanique" ]; then egrep -i "бутон" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "couture" ]; then egrep -i "пуговиц" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "medical" ]; then egrep -i "прыщ" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
elif [ $sens = "electrique" ]; then egrep -i "кноп" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt
fi
fi
#La variable "contenu" prend pour valeur le contenu des fichiers contextes un à un.
contenu=$(cat CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt)
echo "contenu=$contenu"
#Si "egrep" n'a pas trouvé les contextes, le contenu de la variable "contenu" est vide. Dans ce cas là, on affiche un message d'erreur.
if [[ $contenu == "" ]]; then
echo "$sens | $n | lien vers le site web | page aspiree numero $n | dump$n$nom.txt | boncode$n$nom-$theme.txt | contextes non trouvés |
" > TABLEAUX/tabl1.html;
#Si "egrep" a trouvé les contextes, la variable "contenu" n'est pas vide, on affiche un lien envers le fichier de contextes dans le tableau html.
else
echo "$sens | $n | lien vers le site web | page aspiree numero $n | dump$n$nom.txt | boncode$n$nom-$theme.txt | contextes |
" > TABLEAUX/tabl1.html;
fi
#fi de if code = utf-8
fi
#fi de if encodage=""
fi
echo "`cat CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt`" > CONTEXTES/$sens-$nom/globcont$nom-$theme.txt
#n=`expr $n + 1`;
let "n+=1";
# done de for lien dans fichier
done
echo "$sens | | | | | | contextes globaux |
" > TABLEAUX/tabl1.html;
#done de for fichier dans dossier
done
#done de for dossier dans URLS
done
#fi de if obj = URLS
fi
#done de obj in ls
done
echo "" > TABLEAUX/tabl1.html;
exit;