#!/bin/bash
########################################################Fontion traitant le sens####################################################################################
function traiteSens
{
#On regroupe ici tous les motifs
motif_anglais="bud|button|switch|simple|spot";
motif_arabe="برﻋﻢ|ﺯﺮ|بشرة";
motif_espagnol="botón|grano|pustula|capullo";
motif_francais="bouton";
motif_malgache="vontsina|bokotra|mony|forofotra";
motif_russe="бутон|пуговица|кнопка|прыщ";
#On cré et on initialise les compteurs à 0
#Le compteur j sert à crée des sous-répertoires dans les répertoires PAGESASPIREES, DUMP, ET CONTEXTES. Chaque sous-répertoire va stocker les résultats crée par le programme.
j=0;
#Le compteur c sert à compter uniqument les urls.
c=0;
#Le compteur i sert à crée des fichiers dans les répertoires PAGESASPIREES, DUMP, ET CONTEXTES. Chaque fichier va stocker les résultats crée par le programme.
i=0;
#On crée et on initialise le compteur nbdump qui servira pour le répertoire FICHIERSGLOBAUX
nbdump=0;
#Pour chaque fichier dans chaque répertoire sens, on fait:
for fic in `ls $dossier/$sens`
{
#On incrémente le compteur j
let "j+=1";
#On extraie la langue de chaque fichier
basename=$(basename $fic);
langue=$(echo $basename |cut -d"_" -f2 |cut -d"." -f1);
echo -n "traiteSens langue=$langue";
# On attribue un ou des motif(s) parmi chaque langue. On crée donc une condition.
if [ "$langue" == "ar" ]
then
motif=$motif_arabe;
fichier="motif_arabe.txt";
elif [ "$langue" == "an" ]
then
motif=$motif_anglais;
fichier="motif_anglais.txt";
elif [ "$langue" == "es" ]
then
motif=$motif_espagnol;
fichier="motif_espagnol.txt";
elif [ "$langue" == "fr" ]
then
motif=$motif_francais;
fichier="motif_francais.txt";
elif [ "$langue" == "ma" ]
then
motif=$motif_malgache;
fichier="motif_malgache.txt";
else [ "$langue" == "ru" ]
motif=$motif_russe;
fichier="motif_russe.txt";
fi
#fin de la condition
#Pour chaque url dans chaque fichier, on fait:
for nom in `cat $dossier/$sens/$fic`
{
#On incrémente les compteurs
let "c+=1";
let "i+=1";
#On crée des sous dossiers pour mettre tous les résultats
mkdir -p CONTEXTES/$sens/$j ;
mkdir -p DUMP-TXT/$sens/$j ;
mkdir -p PAGES-ASPIREES/$sens/$j ;
echo "================================================================";
echo "==========TRAITEMENT : $nom ";
#--------------- On CURL et on détermine l'encodage -----------------------------------------------------------------------------------------
curl -o ./PAGES-ASPIREES/$sens/$j/$i.html "$nom";
#C'est une variable qui vérifie si le curl se passe bien ou pas
retourcurl=$? ;
echo "RETOUR CURL : $retourcurl";
#si le curl se passe bien,
if [[ $retourcurl == 0 ]]
then
#alors je lance ma detection d'encodage
encodage=$(file -i ./PAGES-ASPIREES/$sens/$j/$i.html | cut -d= -f2);
echo "ENCODAGE initial : $encodage";
#------------------ on continue en tenant compte de l'encodage fourni par curl-------------------------------------------------------------
#si l'encodage est de l'utf8, alors je fais le travail habituel: lynx et dump
if [[ $encodage == "utf-8|UTF-8" ]]
then
lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$sens/$j/$i.html > ./DUMP-TXT/$sens/$j/$i-utf8.txt ;
egrep -i "\b$motif\b" ./DUMP-TXT/$sens/$j/$i-utf8.txt > ./CONTEXTES/$sens/$j/$i-utf8.txt ;
perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$sens/$j/$i-utf8.txt ./PROGRAMMES/$fichier ;
#On renomme le résultat, avec une nomination cohérente
mv ./resultat-extraction.html ./CONTEXTES/$sens/$j/$i-utf8.html ;
#On écrit après les résultats dans le tableau
echo "
$c |
$fic |
$nom |
$i.html |
$i.txt ($encodage) |
$i-utf8.txt |
$i-utf8.txt |
$i-utf8.html |
" >> $tablo;
#On génère le dossier global
cat ./CONTEXTES/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
cat ./DUMP-TXT/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
#Le compteur nbdump est initialisé pour savoir où on empile
let "nbdump+=1";
#-------------------------------------------------------------------------------------------------------------------------------------------------
# la page n'est pas en utf-8, on cherche un charset...
#-------------------------------------------------------------------------------------------------------------------------------------------------
#autrement, l'encogage de la page aspirée n'est pas en utf8
else
echo "on cherche un charset dans la page aspiree...";
#on détecte l'encodage de la page web au niveau du charse et encoding:
if egrep -qi "(charset ?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ./PAGES-ASPIREES/$sens/$j/$i.html ;
then
#--------------------------------------------------------------------------------------------------------------------------------------------------
# on a peut-etre trouve un charset.....
#-------------------------------------------------------------------------------------------------------------------------------------------------
#S'il y a la présence d'un charset, on va l'extraire l'encodage avec la commande egrep:
echo "Presence d'un charset...";
encodage=$(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)-1256|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' ./PAGES-ASPIREES/$sens/$j/$i.html | sort -u) ;
echo "charset extrait : $encodage ";
#-------------------------------------------------------------------------------------------------------------------------------
# avant de continuer on va vérifier si le charset est connu de iconv
#-------------------------------------------------------------------------------------------------------------------------------
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -io $encodage | sort -u);
if [[ $VERIFENCODAGEDANSICONV == "" ]]
then
#-------------------------------------------------------------------------------------------------------------------------------------------------------------
# le charset n'est pas connu de iconv : on fait rien....
#-------------------------------------------------------------------------------------------------------------------------------------------------------------
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> inconnu par inconv, on ne fait rien"
#On écrit les résultats dans le tableau
echo "
$c |
$fic |
$nom |
$i.html |
Encodage non détecté |
Encodage non détecté |
Encodage non détecté |
Encodage non détecté |
" >> $tablo;
else
#----------------------------------------------------------------------------------------------------------------------------------------------------------
# le charset extrait est connu de iconv : on lynxe et on dump !!!
#----------------------------------------------------------------------------------------------------------------------------------------------------------
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..."
lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$sens/$j/$i.html > ./DUMP-TXT/$sens/$j/$i.txt ;
echo "ENCODAGE final : $encodage (avant conversion vers utf-8)";
iconv -f $encodage -t utf-8 ./DUMP-TXT/$sens/$j/$i.txt > ./DUMP-TXT/$sens/$j/$i-utf8.txt
egrep -i "\b$motif\b" ./DUMP-TXT/$sens/$j/$i-utf8.txt > ./CONTEXTES/$sens/$j/$i-utf8.txt ;
perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$sens/$j/$i-utf8.txt ./PROGRAMMES/$fichier ;
mv ./resultat-extraction.html ./CONTEXTES/$sens/$j/$i-utf8.html ;
#On écrit les résultats dans le tableau
echo "
$c |
$fic |
$nom |
$i.html |
$i.txt ($encodage) |
$i-utf8.txt |
$i-utf8.txt |
$i-utf8.html
|
" >> $tablo;
#On génère le dossier global
cat ./CONTEXTES/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
cat ./DUMP-TXT/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
#Le compteur nbdump est initialisé pour savoir où on empile
let "nbdump+=1";
fi
else
#Sinon, le charset n'est pas détecté, on ne fait rien
echo "Pas de charset detecte : on ne fait rien pour le DUMP... ";
#On écrit les résultats dans le tableau
echo "
$c |
$fic |
$nom |
$i.html |
Encodage non détecté |
Encodage non détecté |
Encodage non détecté |
Encodage non détecté |
" >> $tablo;
fi
fi
# Fin de curl
else
#On écrit les résultats dans le tableau
echo "
$c |
$fic |
$nom |
Page non aspiree... |
Encodage non détecté |
Encodage non détecté |
Encodage non détecté |
Encodage non détecté |
" >> $tablo;
fi
}
}
#On écris les résultats de FICHIERGLOBAUX à la fin du tableau
echo "
|
Fichier Dump global $nbdump fichier(s) |
Fichier Contexte global $nbdump fichier(s) |
" >> $tablo;
#On ferme le tableau
echo "" >> $tablo;
}
############################# FIN de la fonction qui traite le sens #################################################################################
#On enregistre le nom du répertoire contenant les urls dans la variable 'dossier'
dossier="./URLS/";
#On enregistre le nom du fichier de sortie dans la variable tablo
tablo="loulou.html";
#On crée le début de la page web
echo "Tableau de liens" > $tablo;
echo " " >> $tablo;
#Création du répertoire FICHIERGLOBAUX
mkdir -p FICHIERGLOBAUX ;
#On supprime tous les répertoires contenant dans le répertoire FICHIERGLOBAUX
rm ./FICHIERGLOBAUX/*.*;
########################On crée un tableau pour chaque sens:#####################################################################
#Pour chaque sans dans le répertoire URLS,
for sens in `ls $dossier`
{
#Si le sens est botanique alors,
if [[ $sens == "botanique" ]]
then
#On écrit "sens botannique" dans le tableau
echo "Sens botanique :
" >> $tablo;
#On crée la première ligne du tableau qui contient tous les titres des colonnes
echo "
Nombre d'url: |
Nom des fichiers: |
Urls: |
Pages aspirées: |
Dump initial: |
Dump utf-8:
|
Contextes utf-8:
|
Contextes html:
|
" >> $tablo;
#On fait l'appel de la fonction 'traite sens'
traiteSens;
#Sinon si le sens est "electrique", alors
elif [[ $sens == "electrique" ]]
then
#On écrit "sens electrique" dans le tableau
echo "Sens électrique :
" >> $tablo;
#On crée la première ligne du tableau qui contient tous les titres des colonnes
echo "
Nombre d'url: |
Nom des fichiers: |
Urls: |
Pages aspirées: |
Dump initial: |
Dump utf-8:
|
Contextes utf-8:
|
Contextes html:
|
" >> $tablo;
#On fait l'appel de la fonction 'traite sens'
traiteSens;
#sinon si le sens est medical, alors
elif [[ $sens == "medical" ]]
then
#On écrit "sens médical" dans le tableau
echo "Sens médical :
" >> $tablo;
#On crée la première ligne du tableau qui contient tous les titres des colonnes
echo "
Nombre d'url: |
Nom des fichiers: |
Urls: |
Pages aspirées: |
Dump initial: |
Dump utf-8:
|
Contextes utf-8:
|
Contextes html:
|
" >> $tablo;
#On fait l'appel de la fonction 'traite sens'
traiteSens;
#sinon le sens est couture, alors
else [[ $sens == "couture" ]]
#On écrit "sens couture" dans le tableau
echo "Sens couture :
" >> $tablo;
#On crée la première ligne du tableau qui contient tous les titres des colonnes
echo "
Nombre d'url: |
Nom des fichiers: |
Urls: |
Pages aspirées: |
Dump initial: |
Dump utf-8:
|
Contextes utf-8:
|
Contextes html:
|
" >> $tablo;
#On fait l'appel de la fonction 'traite sens'
traiteSens;
#Fin de la condition
fi
}
######################################### FIN du programme #########################################################################################################################################################################################################################
#On ferme les balises body et html
echo "" >> $tablo;
################################################################################################################################################################################################################################################