#!/usr/bin/bash # pour lancer ce script: # bash ./PROGRAMMES/scriptFinal_ppe1.sh ./URLS ./TABLEAUX # stockage des arguments dans des variables DOSSIER_URL=$1 DOSSIER_TABLEAUX=$2 # stockage du motif dans une variable pour l'extraction du contexte en .txt motif="(U|u)niversités?|(U|u)niversit(y|ies)|(U|u)niversità" # on affiche les valeurs des variables suivantes pour les controler echo $DOSSIER_URL ; echo $DOSSIER_TABLEAUX ; echo $motif # on ecrit l'en-tete du fichier de resultats qui sera en html sous le nom "tableau.html" echo " " > $DOSSIER_TABLEAUX/tableau.html ; # ajout d'une variable qui va compter les tableaux (1 tableau par fichier d'URLs et donc par langue) cptTableau=0; # creation d'une boucle pour le traitement de chaque fichier contenu dans DOSSIER_URL for fichier in $(ls $DOSSIER_URL); do # on affiche le fichier sur lequel on travaille echo "Fichier lu : $fichier" # on incremente le compteur de tableaux pour pouvoir tous les parcourir cptTableau=$(($cptTableau+1)) ; # creation d'un compteur pour pouvoir compter chaque URL compteur=0 # construction du tableau (essentiellement des questions d'apparence ici) echo "


" >> $DOSSIER_TABLEAUX/tableau.html ; echo "" >> $DOSSIER_TABLEAUX/tableau.html ; echo "" >> $DOSSIER_TABLEAUX/tableau.html ; # construction de l'en-tete du tableau avec les noms de chaque colonne echo " " >> $DOSSIER_TABLEAUX/tableau.html # on commence le travail sur les URLs a partir d'ici # lecture de chaque ligne du fichier, une par une (une ligne = une URL) while read line; do compteur=$(($compteur + 1)); # on incremente le compteur a chaque tour # on travaille sur chaque ligne, URL ($line = notre url) # on va aspirer les pages pour pouvoir les lire hors ligne avec la fonction "curl" # (-L qui permet de suivre le lien meme si l'URL est un raccourci, -o qui permet de renvoyer la page aspiree dans un fichier au lieu de la ligne de commande) # on recupere le code http et on le met dans une variable ('%{http_code}\n' = pour recuperer le code HTTP) codeHTTP=$(curl -L -w '%{http_code}\n' -o ./PAGES-ASPIREES/"$cptTableau-$compteur".html $line) echo $codeHTTP # boucle if pour tester si le code est 200 (code 200 = code bon > on passe à la suite) if [[ $codeHTTP == 200 ]] then # on va essayer de reperer l'encodage avec CURL (option -I > afficher des informations complementaires dont l'encodage) # on redirige ce resultat vers de nouvelles commandes > fonction egrep (chercher une regexp) a laquelle on donne charset comme argument pour qu'elle trouve la ligne où l'encodage est indique # on utilise la commande cut pour garder la partie de l'encodage qui nous interesse encodage=$(curl -L -I $line | egrep charset | cut -d"=" -f2 | tr -d '\r' | tr -d '\n'); echo $encodage # boucle if pour tester si l'encodage est bien de UTF-8 if [[ $encodage =~ 'utf' || $encodage =~ 'UTF' || $encodage =~ 'Utf' && $encodage =~ '8' ]] ; then # l'encodage est en UTF-8, on peut passer aux traitements # 1. on aspire la page et on la conserve localement texte=$(lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$cptTableau-$compteur".html); echo "$texte" > ./DUMP-TEXT/"$cptTableau-$compteur".txt # 2. on fait l'index hierarchique des mots du texte recupere echo "$texte" | egrep -o "\w+" | sort | uniq -c | sort -nr > ./DUMP-TEXT/index"$cptTableau-$compteur".txt # 3. on va compter la frequence de nos motifs recherches nbmotif=$(egrep -coi $motif ./DUMP-TEXT/"$cptTableau-$compteur".txt) ; # 4. on va faire la liste des bigrammes du texte recupere egrep -o "\w+" ./DUMP-TEXT/"$cptTableau-$compteur".txt > bigrammes1.txt; tail -n +2 bigrammes1.txt > bigrammes2.txt ; paste bigrammes1.txt bigrammes2.txt > bigrammes3.txt ; cat bigrammes3.txt | sort | uniq -c | sort -nr > ./DUMP-TEXT/bigramme"$cptTableau-$compteur".txt ; # 5. on va aller regarder les contextes autour de notre motif (mot d'interet) # au format .txt en vue de la concatenation pour l'analyse statistique # µ = caractere qui n'apparait pas dans nos textes contexteTxt=$(cat ./DUMP-TEXT/$cptTableau-$compteur.txt | tr '\n' 'µ' | sed 's/µ / /g' | tr 'µ' '\n' | grep -E '(\w+[,’ «» ]+){0,15}'$motif'([,’ «» ]+\w+){0,15}' --color) echo "$contexteTxt" > ./CONTEXTES/"$cptTableau-$compteur".txt ; # 6. on va aller regarder les contextes autour de notre motif (mot d'interet) # au format html - necessite minigrep perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$cptTableau-$compteur.txt ./PROGRAMMES/minigrep/motif-regexp.txt ./CONTEXTES/$cptTableau-$compteur.html ; mv resultat-extraction.html ./CONTEXTES/$cptTableau-$compteur.html ; # on construit les lignes du tableau avec les resultats obtenus echo " " >> $DOSSIER_TABLEAUX/tableau.html else # l'encodage n'est pas de l'UTF-8 # boucle if pour tester si la variable qui contient l'encodage est vide ou non if [[ $encodage!="" ]] then # ici la variable n'est pas vide # on essaye de recuperer l'encodage avec la liste des jeux de caracteres reconnus par iconv VERIFENCODAGEDANSICONV=$(iconv -l | egrep -o "[-A-Z0-9\_\:]+" | egrep -i $encodage) # on va verifier si la nouvelle variable qui contient l'encodage qui n'est pas UTF-8, est vide if [[ $VERIFENCODAGEDANSICONV!="" ]] then # ici la variable contenant l'encodage n'est pas vide, donc on a un encodage non vide connu de iconv # on va essayer de recuperer la nature de l'encodage qui n'est pas de l'UTF-8 echo "encodage connu d'iconv"; echo "$VERIFENCODAGEDANSICONV"; lynx -dump -nolist -assume_charset=$VERIFENCODAGEDANSICONV -display_charset=$VERIFENCODAGEDANSICONV "../PAGES-ASPIREES/"$cptTableau-$compteur".html" > ../DUMP-TEXT/"$cptTableau-$compteur".txt ; # on va convertir cet encodage repere en UTF-8 iconv -c -f $VERIFENCODAGEDANSICONV -t UTF-8 ../DUMP-TEXT/"$cptTableau-$compteur".txt > ../DUMP-TEXT/"$cptTableau-$compteur".txt ; ## on peut appliquer les memes traitements # 1. on aspire la page et on la conserve localement texte=$(lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$cptTableau-$compteur".html); echo "$texte" > ./DUMP-TEXT/"$cptTableau-$compteur".txt # 2. on fait l'index hierarchique des mots du texte recupere echo "$texte" | egrep -o "\w+" | sort | uniq -c | sort -nr > ./DUMP-TEXT/index"$cptTableau-$compteur".txt # 3. on va compter la frequence de nos motifs recherches nbmotif=$(egrep -coi $motif ./DUMP-TEXT/"$cptTableau-$compteur".txt) ; # 4. on va faire la liste des bigrammes du texte recupere egrep -o "\w+" ./DUMP-TEXT/"$cptTableau-$compteur".txt > bigrammes1.txt; tail -n +2 bigrammes1.txt > bigrammes2.txt ; paste bigrammes1.txt bigrammes2.txt > bigrammes3.txt ; cat bigrammes3.txt | sort | uniq -c | sort -nr > ./DUMP-TEXT/bigramme"$cptTableau-$compteur".txt ; # 5. on va aller regarder les contextes autour de notre motif (mot d'interet) # au format .txt en vue de la concatenation pour l'analyse statistique # µ = caractere qui n'apparait pas dans nos textes contexteTxt=$(cat ./DUMP-TEXT/$cptTableau-$compteur.txt | tr '\n' 'µ' | sed 's/µ / /g' | tr 'µ' '\n' | grep -E '(\w+[,’ «» ]+){0,15}'$motif'([,’ «» ]+\w+){0,15}' --color) echo "$contexteTxt" > ./CONTEXTES/"$cptTableau-$compteur".txt ; # 6. on va aller regarder les contextes autour de notre motif (mot d'interet) # au format html - necessite minigrep perl ./PROGRAMMES/minigrep/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$cptTableau-$compteur.txt ./PROGRAMMES/minigrep/motif-regexp.txt ./CONTEXTES/$cptTableau-$compteur.html ; mv resultat-extraction.html ./CONTEXTES/$cptTableau-$compteur.html ; # on construit les lignes du tableau avec les resultats obtenus echo " " >> $DOSSIER_TABLEAUX/tableau.html else # ici la variable qui contient l'encodage n'est pas vide mais est inconnu de iconv # on ne peut pas faire de traitement, on remplit le tableau avec des cases vides echo " " >> $DOSSIER_TABLEAUX/tableau.html; # fin du test pour savoir si encodage est connu ou non de iconv fi else # la variable qui doit contenir l'encodage est vide # pas de traitement possible echo "l'encodage est vide, on ne fait rien" # fin du test pour savoir si la variable qui contient l'encodage est vide ou non fi # fin du test pour savoir si l'encdoage est de l'UTF-8 ou non fi #si le code n'est pas 200 alors on ne peut pas récupérer la page, on ne fait rien else #construire les lignes du tableau avec des cases vides puisque le code n'est pas 200 echo " " >> $DOSSIER_TABLEAUX/tableau.html; # fin du test pour savoir si le code http est bien 200 fi echo $compteur $ligne done < $DOSSIER_URL/$fichier # fermeture d'un tableau echo "
Tableau n° $cptTableau
Fichier : $fichier
Motif : $motif
Num. httpcode encodage de base URL pages aspirées dump text fréquence motif index bigrammes contexte txt contexte html
$compteur $codeHTTP $encodage $line $cptTableau-$compteur.html $cptTableau-$compteur.html $nbmotif index$cptTableau-$compteur.html bigramme$cptTableau-$compteur.html $cptTableau-$compteur.html $cptTableau-$compteur.html
$compteur $codeHTTP $VERIFENCODAGEDANSICONV $line $cptTableau-$compteur.html $cptTableau-$compteur.txt $nbmotif index$cptTableau-$compteur.html bigramme$cptTableau-$compteur.html $cptTableau-$compteur.html $cptTableau-$compteur.html
$compteur $codeHTTP
$compteur $codeHTTP
" >> $DOSSIER_TABLEAUX/tableau.html done echo " " >> $DOSSIER_TABLEAUX/tableau.html exit