#!/bin/bash
# la première ligne permet d'annoncer quel language de programmation est utilisé
# on commence par supprimer l'éventuel fichier de résultat que l'on doit reconstruire avec la commande "rm" (remove) avec l'option "-f" qui fait abstraction le cas échéant de la non présence de fichier
rm -f "$2/tableau.html";
# on récupère les 3 arguments que l'on a passés au programme
# le premier : chemin relatif vers le dossier contenant les fichiers d'URLs
# le second : chemin relatif vers le dossier devant contenir le fichier HTML final
echo "Les URLS sont dans : $1";
echo "Je stocke le tableau html dans : $2";
# le troisième : le motif recherché dans les fichiers
motif=$3;
# Début de la création d'un tableau rassemblant les données souhaitées (ceux de la procédure) pour chaque URL
echo "
" >> $2/tableau.html;
echo "N° | URL | Code http | encodage | Page aspirée | Dump | Filtrage Txt | Filtrage Html | Index | Bitexte | Fq Motif |
" >> "$2/tableau.html" ;
#----------------------------------------------------------------
# "parcours" d'un fichier d'URL : lecture ligne à ligne des URLs
for ligne in $(cat "$1/$fichier")
do
echo "----------------------------------------------";
echo "Traitement de l'URL : $ligne";
echo "----------------------------------------------";
#-----------------------------------------------------------
# 1. on teste la connexion vers l'URL : récupération de http_code via la commande curl
#-----------------------------------------------------------
coderetour=$(curl -SIL -o toto -w %{http_code} $ligne);
echo "CODE HTTP : $coderetourhttp";
# si coderetourhttp est egale à 200. Un autre code que 200 signale une erreur et bloque le reste de la procédure.
if [[ $coderetour == 200 ]]
then
#-----------------------------------------------------------
# 2. on essaie de récupérer l'encodage de la page associée à l'URL
# REMARQUE : la commande suivante n'est lancée que si http_code=200
#-----------------------------------------------------------
encodage=$(curl -sIL -o toto -w %{content_type} $ligne |cut -f2 -d"="|tr '[a-z]' '[A-Z]' | tr -d '\r' | tr -d "\"");
echo "ENCODAGE DETECTE PAR CURL : $encodage";
# REMARQUE : avec la commande "tr" on s'assure que les encodages seront écrits de manière homogène : en majuscule et sans caractère parasite
#-----------------------------------------------------------
# 3. on récupère la page localement et on la range dans le bon dossier : aspiration de la page
#-----------------------------------------------------------
curl -L -o "./PAGES-ASPIREES/$numerotableau-$compteur.html" "$ligne";
#-----------------------------------------------------------
# si l'encodage de la page est en utf-8
if [[ $encodage == "UTF-8" ]]
then
#-----------------------------------------------------------
# On remplit le tableau : 1 ligne par URL et autant de colonnes que de traitement réalisés
# Pour le dump via LYNX on travaille sur la page aspirée
#-----------------------------------------------------------
# 1. On lynx la page aspirée : le dump
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage "./PAGES-ASPIREES/$numerotableau-$compteur.html" > ./DUMP-TEXT/$numerotableau-$compteur.txt;
#-----------------------------------------------------------
#pour ce qui suit, nous définissons une fonction pour pouvoir refaire la même chose sur les autres fichiers une fois convertis en UTF-8
constit_tableau()
{
#cette fonction permet de remplir le tableau
# 2. On cree le fichier contexte txt via egrep
egrep -i -C2 $motif "./DUMP-TEXT/$numerotableau-$compteur.txt" > ./CONTEXTES/$numerotableau-$compteur.txt;
#-----------------------------------------------------------
# 3. Fq motif
nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$numerotableau-$compteur.txt);
#-----------------------------------------------------------
# 4. contexte html
perl ./minigrep/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$numerotableau-$compteur.txt minigrep/parametre-motif.txt;
mv resultat-extraction.html ./CONTEXTES/$numerotableau-$compteur.html;
#-----------------------------------------------------------
# 5. index hierarchique
egrep -o "\w+" ./DUMP-TEXT/$numerotableau-$compteur.txt | sort | uniq -c | sort -gr > ./DUMP-TEXT/index-$numerotableau-$compteur.txt;
#-----------------------------------------------------------
# 6. bigramme
egrep -o "\w+" ./DUMP-TEXT/$numerotableau-$compteur.txt > bi1.txt;
tail -n +2 bi1.txt > bi2.txt;
paste bi1.txt bi2.txt > bi3.txt ;
cat bi3.txt | sort | uniq -c | sort -gr > ./DUMP-TEXT/bigrams-$numerotableau-$compteur.txt;
#-----------------------------------------------------------
# 7. on écrit les résultats dans le tableau avec tous les résultats produits
echo "
$compteur |
$ligne |
Code_http=$coderetour |
Encodage = $encodage |
$numerotableau-$compteur.html |
$numerotableau-$compteur.txt |
$numerotableau-$compteur.txt |
$numerotableau-$compteur.html |
index-$numerotableau-$compteur |
bigramme-$numerotableau-$compteur |
$nbmotif |
" >> $1/tableau.html;
#on ajoute le dump au fichier qui comportera tous les dump
#avant et apès le fichier dump on ajoute des balises pour préparer le fichier à son utilisation sur iTrameur (outil textométrique)
echo "" >> ./CONCAT/$numerotableau-dumpglobal.txt;
cat ./DUMP-TEXT/$numerotableau-$compteur.txt | tr '[A-Z]' '[a-z]' >> ./CONCAT/$numerotableau-dumpglobal.txt;
echo "" >> ./CONCAT/$numerotableau-dumpglobal.txt;
#on ajoute le fichier contexte dans un fichier contexteglobal qui va regrouper tous les contextes, en s'assurant au préalable que tout le texte est en minuscule avec la commande "tr"
echo "" >> ./CONCAT/$numerotableau-contexteglobal.txt;
cat ./CONTEXTES/$numerotableau-$compteur.txt | tr '[A-Z]' '[a-z]' >> ./CONCAT/$numerotableau-contexteglobal.txt;
echo "">> ./CONCAT/$numerotableau-contexteglobal.txt;
}
#fin de la fonction
constit_tableau $2;
#utilisation de la fonction constit_tableau
#si l'encodage n'est pas UTF-8
else
#on vérifie sa présence dans la liste de la commande "iconv"
encodage=$(iconv -l | egrep -oi "\b$encodage\b" | uniq);
#si l'encodage n'est pas dans la liste iconv
if [[ $encodage == "" ]]
then
#alors, on cherche l'encodage dans le code source
encodage=$(egrep -io "charset=\"?[^\",]+\"?" ./PAGES-ASPIREES/$numerotableau-$compteur.html | cut -f2 -d"=" | tr -d '("|\\|>)' | sed "s/'//g" | tr '[a-z]' '[A-Z]' | sort | uniq);
#on vérifie la présence du nouvel encodage trouvé dans la liste iconv
encodage=$(iconv -l | egrep -oi "\b$encodage\b" | uniq);
#si on ne l'y trouve toujours pas, j'abandonne cette page
if [[ $encodage == "" ]]
then
echo "
$compteur |
$ligne |
CODE RETOUR=$coderetour |
ENCODAGE = $encodage |
$numerotableau-$compteur.html |
- |
- |
- |
- |
- |
- |
" >> $2/tableau.html;
#sinon, si on trouve l'encodage dans la liste iconv, deux traitements différents suivant l'encodage
else
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage "./PAGES-ASPIREES/$numerotableau-$compteur.html" > ./DUMP-TEXT/$numerotableau-$compteur.txt;
#si l'encodage est en UTF-8
if [[ $encodage = "UTF-8" ]]
then
#alors, application de la fonction consist_tableau
constit_tableau $2;
#sinon, si l'encodage n'est pas en UTF-8
else
#on convertit l'encodage en UTF-8 avec la commande "iconv"
iconv -f $encodage -t UTF-8 ./DUMP-TEXT/$numerotableau-$compteur.txt > ./DUMP-TEXT/$numerotableau-$compteur.txt;
#application de la fonction consist_tableau
constit_tableau $2;
fi
fi
# si l'encodage trouvé dans le protocole est dans la liste iconv, on la convertis en utf-8 et on applique la fonction
else
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage "./PAGES-ASPIREES/$numerotableau-$compteur.html" > ./DUMP-TEXT/$numerotableau-$compteur.txt;
iconv -f $encodage -t UTF-8 ./DUMP-TEXT/$numerotableau-$compteur.txt > ./DUMP-TEXT/$numerotableau-$compteur.txt;
constit_tableau $2;
fi
fi
#si code retour http n'est pas 200, on ne peut rien faire de l'url et on se contente de ferme le tableau sans rien ajouter
else
echo "
$compteur |
$ligne |
CODE RETOUR=$coderetour |
- |
- |
- |
- |
- |
- |
- |
- |
" >> $2/tableau.html;
fi
# on incrémente le compteur des URLs
compteur=$((compteur+1));
done;
#----------------------------------------------------------------
#on fait les index des deux fichiers globaux
egrep -o "\w+" ./CONCAT/$numerotableau-dumpglobal.txt | sort | uniq -ci | sort -gr > ./CONCAT/index-$numerotableau-dumpglobal.txt;
egrep -o "\w+" ./CONCAT/$numerotableau-contexteglobal.txt | sort | uniq -ci | sort -gr > ./CONCAT/index-$numerotableau-contexteglobal.txt;
#on fait les bigrammes des fichiers globaux
# pour le dump
egrep -o "\w+" ./CONCAT/$numerotableau-dumpglobal.txt > bi1.txt;
tail -n +2 bi1.txt > bi2.txt;
paste bi1.txt bi2.txt > bi3.txt ;
cat bi3.txt | sort | uniq -c | sort -gr > ./CONCAT/bigrams-$numerotableau-dumpglobal.txt;
# pour le contexte
egrep -o "\w+" ./CONCAT/$numerotableau-contexteglobal.txt > bi1.txt;
tail -n +2 bi1.txt > bi2.txt;
paste bi1.txt bi2.txt > bi3.txt ;
cat bi3.txt | sort | uniq -c | sort -gr > ./CONCAT/bigrams-$numerotableau-contextelobal.txt;
# on nettoye les gros fichiers pour qu'ils soient utilisable dans iTrameurmeur en retirant les balises parasites
egrep -v "(<|>)[^d\/]" ./CONCAT/$numerotableau-dumpglobal.txt > ./CONCAT/$numerotableau-dump_global.txt;
egrep -v "(<|>)[^c\/]" ./CONCAT/$numerotableau-contexteglobal.txt > ./CONCAT/$numerotableau-contexte_global.txt;
#on ajoute tous les fichiers globaux (dump, contexte et les 2 index correspondants) à la fin du tableau
echo "- |
- |
- |
- |
- |
$numerotableau-dumpglobal.txt |
$numerotableau-contexteglobal.txt |
- |
index-$numerotableau-dumpglobal.txt |
index-$numerotableau-contexteglobal.html |
- |
br>" >> $2/tableau.html;
# on incrémente le compteur de tableaux
numerotableau=$((numerotableau+1));
done;
#----------------------------------------------------------------
#on ferme le tableau
echo "" >> $2/tableau.html;