#!/bin/bash
#programme_tableau.sh - Camille REY
# génère un ou plusieurs tableaux html d'URLs avec diverses informations, dont l'analyse d'un motif, à partir d'un ou plusieurs fichiers contenant une liste d'URLs
# prend en argument : 1- le répertoire contenant les fichiers d'URLs 2- le chemin de sortie du fichier html contenan le ou les Tableaux
# demande à l'utilisateur quel motif doit être analysé pour chaque langue
# segmente le contenu de l'URL si il est en japonais
#fonction pour remplir une ligne de tableau html
ligne_tableau () {
ligne_tab="
"
for arg in "$@"
do
ligne_tab="$ligne_tab$arg | "
done
ligne_tab="$ligne_tab
"
echo $ligne_tab
}
#fonction pour créer un lien html
lien () {
lien=$1
nom=$2
lien_html=$''$nom''
echo $lien_html
}
#fonction pour récupérer l'encodage d'une page
get_encodage () {
encodage=$(curl -sIL -o tmp.txt -w %{content_type} $1 | cut -f2 -d"=" | tr '[a-z]' '[A-Z]' | tr -d '\r')
if [[ $encodage != "UTF-8" ]]
then
encodage=$(curl -sL $1 | egrep -oi -m 1 "charset=\"?[^/>\"]*" | cut -f2 -d"=" | tr -d "[\"/ >\r]" | tr '[a-z]' '[A-Z]')
if [[ $encodage != "UTF-8" ]]
then
if [[ $encodage == "" ]]
then
encodage=$(file -b --mime-encoding $2)
if [[ $(iconv -l | egrep "\b$encodage\b") == "" ]]
then
encodage=$encodage"(INCONNU)"
fi
else
if [[ $(iconv -l | egrep "\b$encodage\b") == "" ]]
then
encodage=$(file -b --mime-encoding $2)
if [[ $(iconv -l | egrep "\b$encodage\b") == "" ]]
then
encodage=$encodage"(INCONNU)"
fi
fi
fi
fi
fi
}
#supprimer le fichier du même nom s'il existe déjà
rm -f $2;
#récupérer les motifs
i=1;
for fichier in $(ls $1)
do
echo "Quel est le motif à chercher pour le fichier $fichier ?"
read motif$i;
i=$((i+1));
done
#début de page html
numerotableau=1;
echo "Tableaux d'URL" >> $2;
for fichier in $(ls $1)
do
compteur=1;
motif_courant=motif$numerotableau;
echo "MOTIF=${!motif_courant}" > ./minigrep/$numerotableau.txt
echo " $fichier
" >> $2;
contenu_ligne=(
"Numéro"
"Lien"
"Code http"
"Encodage"
"Page aspirée"
"Dump"
"Contexte txt"
"Contexte html"
"index"
"bitexte"
"fréquence motif");
echo $(ligne_tableau "${contenu_ligne[@]}") >> $2;
for ligne in $(cat $1/$fichier)
do
id_ligne=$numerotableau-$compteur;
#tester valeur du coderetour
coderetour=$(curl -sIL -o tmp.txt -w %{http_code} $ligne);
if [[ $coderetour == 200 ]]
then
#récupérer localement l'URL
curl -sL -o "./PAGES-ASPIREES/$id_ligne.html" $ligne;
#gérer le cas de fichier compressé
if [[ $(file -b --mime-type "./PAGES-ASPIREES/$id_ligne.html" | egrep "zip") != "" ]]
then
echo "compressé"
mv "./PAGES-ASPIREES/$id_ligne.html" "./PAGES-ASPIREES/$id_ligne.gz";
gunzip -c "./PAGES-ASPIREES/$id_ligne.gz" > "./PAGES-ASPIREES/$id_ligne.html";
rm "./PAGES-ASPIREES/$id_ligne.gz";
fi
get_encodage $ligne "./PAGES-ASPIREES/$id_ligne.html"
if [[ ${encodage: -9} == "(INCONNU)" ]]
then
# écriture d'une ligne si l'encodage est inconnu
contenu_ligne=(
$compteur
"$(lien $ligne $ligne)"
$coderetour
$encodage
"$(lien ../PAGES-ASPIREES/$id_ligne.html $id_ligne)"
"-"
"-"
"-"
"-"
"-"
"-"
);
echo $(ligne_tableau "${contenu_ligne[@]}") >> $2;
else
#dump en txt
w3m -dump -I $encodage -O $encodage "./PAGES-ASPIREES/$id_ligne.html" > ./DUMP-TEXT/$id_ligne.txt
#conversion si besoin
if [[ $encodage != "UTF-8" ]]
then
iconv -f $encodage -t UTF-8 ./DUMP-TEXT/$id_ligne.txt > ./DUMP-TEXT/UTF8_$id_ligne.txt
mv -f ./DUMP-TEXT/UTF8_$id_ligne.txt ./DUMP-TEXT/$id_ligne.txt
encodage=$encodage"(converti_UTF8)"
fi
#segmentation si le texte est du japonais
if [[ $(cat ./DUMP-TEXT/$id_ligne.txt | grep -P "([ぁ-んァ-ン一-龯]){3,}") != "" ]]
then
python3 PROGRAMMES/segmenteur_jap.py DUMP-TEXT/$id_ligne.txt DUMP-TEXT/segmente_$id_ligne.txt
mv -f ./DUMP-TEXT/segmente_$id_ligne.txt ./DUMP-TEXT/$id_ligne.txt
fi
#variable expansion / ! --> variable indirection
#contexte txt
egrep -i -C2 ${!motif_courant} ./DUMP-TEXT/$id_ligne.txt > ./CONTEXTES/$id_ligne.txt
#contexte html
perl ./minigrep/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$id_ligne.txt ./minigrep/$numerotableau.txt
mv resultat-extraction.html ./CONTEXTES/$id_ligne.html
#index hierarchique
egrep -o "\w+" ./DUMP-TEXT/$id_ligne.txt | sort | uniq -c | sort -nr -k 1,1 > ./DUMP-TEXT/index-$id_ligne.txt
#bigrammes
egrep -o "\w+" ./DUMP-TEXT/$id_ligne.txt > ./bigramme1.txt ;
tail -n +2 ./bigramme1.txt > ./bigramme2.txt ;
paste bigramme1.txt bigramme2.txt > bigramme3.txt ;
cat bigramme3.txt | sort | uniq -c | sort -nr -k 1,1 > ./DUMP-TEXT/bigramme-$id_ligne.txt
#fréquence motif
fq_motif=$(egrep -coi ${!motif_courant} ./DUMP-TEXT/$id_ligne.txt)
# écriture d'une ligne dans le tableau si tout va bien
contenu_ligne=(
$compteur
"$(lien $ligne $ligne)"
$coderetour
$encodage
"$(lien ../PAGES-ASPIREES/$id_ligne.html $id_ligne)"
"$(lien ../DUMP-TEXT/$id_ligne.txt $id_ligne)"
"$(lien ../CONTEXTES/$id_ligne.txt $id_ligne)"
"$(lien ../CONTEXTES/$id_ligne.html $id_ligne)"
"$(lien ../DUMP-TEXT/index-$id_ligne.txt $id_ligne)"
"$(lien ../DUMP-TEXT/bigramme-$id_ligne.txt $id_ligne)"
$fq_motif)
echo $(ligne_tableau "${contenu_ligne[@]}") >> $2;
fi
else
#écriture d'une ligne dans le cas de code http différent de 200
contenu_ligne=(
$compteur
"$(lien $ligne $ligne)"
$coderetour
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
);
echo $(ligne_tableau "${contenu_ligne[@]}") >> $2;
fi
compteur=$((compteur+1));
done
echo "
" >> $2;
numerotableau=$((numerotableau+1));
done