#!/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 "TABLEAU D'URLs" >> $2/tableau.html; # Création d'une variable pour compter les fichiers traités et donc le nb de tableau généré : tableau par fichier d'URL, un fichier d'URL par langue étudiée # cette variable sera utilisée pour créer les noms de fichiers associés à chaque URL numerotableau=1; #---------------------------------------------------------------- # Parcours du dossier contenant les fichiers URLs for fichier in $(ls $1); # utilisation de la boucle for : pour chacun des élément d'une liste, on va agir sur l'élément visé do compteur=1; # compteur destiné à compter les URLs pour chaque fichier d'URL echo "$1/$fichier"; #----------------------------------------------------------- # Création du corps du tableau : ligne associée au fichier en cours de traitement #----------------------------------------------------------- #Création de l'en-tête du tableau echo "" >> $2/tableau.html; echo "" >> "$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 "" >> $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 "" >> $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 "" >> $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 "
URLCode httpencodagePage aspiréeDumpFiltrage TxtFiltrage HtmlIndexBitexteFq Motif
$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
$compteur $ligne CODE RETOUR=$coderetour ENCODAGE = $encodage $numerotableau-$compteur.html - - - - - -
$compteur $ligne CODE RETOUR=$coderetour - - - - - - - -
- - - - - $numerotableau-dumpglobal.txt $numerotableau-contexteglobal.txt - index-$numerotableau-dumpglobal.txt index-$numerotableau-contexteglobal.html -
" >> $2/tableau.html; # on incrémente le compteur de tableaux numerotableau=$((numerotableau+1)); done; #---------------------------------------------------------------- #on ferme le tableau echo "" >> $2/tableau.html;