#!/usr/bin/bash #--------------------------------------------------------------------- # MODE D'EMPLOI : # Ce script est pensé pour être exécuté depuis le dossier PROJET-MOT-SUR-WEB de notre environnement de travail et de projet. # Notre commande pour le lancer contient trois arguments: # Il faut indiquer quel est le dossier où ont été enregistré nos URLS, sans oublier de spécifier l'emplacement du fichier html que l'on générera et le motif. # Voici la commande: # bash ./PROGRAMMES/projet-script.sh ./URLS ./TABLEAUX/tableaux_projet.html "apatridi?es?|stateless(ness)?|ap(á|a)tridi?as?|апатрид|безгражданство" #--------------------------------------------------------------------- # On choisi des variables pour stocker les arguments que l'on vient de spécifier: dossierURL=$1; tableaux=$2; motif=$3; #On ajoute une variable qui contendrait le nombre d'ocurrences du mot chosi #----------------------------------------------------------------------- # Fonction 1: traitements_utf8 () { #--------------------------------------------------------- # 1er traitement : étant UTF-8, on récupère le text brut de chaque page aspirée à travers la commande lynx, en situant le résultat dans le répertoire DUMP-TEXT lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt; #--------------------------------------------------------- # 2ème traitement : on compte les occurrences du mot choisi avec egrep et wc compteurMotif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l); #--------------------------------------------------------- # 3ème traitement # 3 a) : nous allons extraire des contextes textuels plus largesde notre motif. egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/"$compteur_tableau-$compteur".txt; # 3 b) : avec le programme mini-egrep, nous creons un fichier html pour meiux afficher nos contextes. On deplacera le résultat au dossier CONTEXTES. perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html #--------------------------------------------------------- # 4ème traitement : Nous ferons un index ordonné de manière hierarchique à partir du fichiers DUMP egrep -i -o "\w+" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ; # 5ème traitement : Ensuite, on calcule les bigrammes pour connaître le contexte immédiat de notre motif. tr " " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > index1.txt ; tail -n +2 index1.txt > index2.txt; paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ; #--------------------------------------------------------- # On remplit les colonnes avec les donées récoltées à partir de traitements juste expliqués. La couleur jaune indique le bon traitement. echo "$compteur $codehttp $encodageURL
(cURL) $ligne P.A n°$compteur_tableau-$compteur DUMP n°$compteur_tableau-$compteur$compteurMotif contexte txt $compteur_tableau-$compteur contexte html $compteur_tableau-$compteur index $compteur_tableau-$compteur bigramme $compteur_tableau-$compteur " >> $tableaux; #-----------------------# } #----------------------------------------------------------------------- # Fonction 2: traitements_autreEncodage () { # 1er A traitement : on récupère le text brut de chaque page aspirée à travers la commande lynx, en situant le résultat dans le répertoire DUMP-TEXT lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt; #--------------------------------------------------------- # 1er B traitement : on transcode le text brut de chaque dump. iconv -f "$encodageURL" -t "UTF-8" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".html # 2ème traitement : on compte les occurrences du mot choisi avec egrep et wc compteurMotif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l); #--------------------------------------------------------- # 3ème traitement # 3 a) : nous allons extraire des contextes textuels plus larges de notre motif. egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/"$compteur_tableau-$compteur".txt; # 3 b) : avec le programme mini-egrep, nous creons un fichier html pour meiux afficher nos contextes. On deplacera le résultat au dossier CONTEXTES. perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html #--------------------------------------------------------- # 4ème traitement : Nous ferons un index ordonné de manière hierarchiques à partir du fichiers DUMP egrep -i -o "\w+" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ; # 5ème traitement : Ensuite, on calcule les bigrammes pour connaître le contexte immédiat de notre motif. tr " " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > index1.txt ; tail -n +2 index1.txt > index2.txt; paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ; #--------------------------------------------------------- # On remplit les colonnes avec les donées récoltées à partir de traitements juste expliqués. La couleur verte indique le bon traitement. echo "$compteur $codehttp $encodageURL
(cURL) $ligne P.A n°$compteur_tableau-$compteur DUMP n°$compteur_tableau-$compteur$compteurMotif contexte txt $compteur_tableau-$compteur contexte html $compteur_tableau-$compteur index $compteur_tableau-$compteur bigramme $compteur_tableau-$compteur " >> $tableaux; } # Fonction 3: traitements_utf8_viaEncodeDetect () { #--------------------------------------------------------- # Tous les traitements sont identiques aux ceux déjà incorpores dans les autres fonctions. Le remplissage du tableau est différente. lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt; #--------------------------------------------------------- compteurMotif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l); #---------------------------------------------------------. egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/"$compteur_tableau-$compteur".txt; perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html #--------------------------------------------------------- egrep -i -o "\w+" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ; tr " " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > index1.txt ; tail -n +2 index1.txt > index2.txt; paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ; #--------------------------------------------------------- # On remplit les colonnes avec les donées récoltées à partir de traitements juste expliqués. Le couleur bleu indique le bon traitement. echo "$compteur $codehttp $encodageExtrait
(Encode::Detect) $ligne P.A n°$compteur_tableau-$compteur DUMP n°$compteur_tableau-$compteur$compteurMotif contexte txt $compteur_tableau-$compteur contexte html $compteur_tableau-$compteur index $compteur_tableau-$compteur bigramme $compteur_tableau-$compteur " >> $tableaux; } #----------------------------------------------------------------------- # Fonction 4: traitements_autreEncodage_viaEncodeDetect () { # Tous les traitements sont identiques aux ceux déjà incorpores dans les autres fonctions. Le remplissage du tableau est différente. lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt; #--------------------------------------------------------- iconv -f "$encodageExtrait" -t "UTF-8" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".html compteurMotif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l); #--------------------------------------------------------- egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/"$compteur_tableau-$compteur".txt; perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html egrep -i -o "\w+" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/index_"$compteur_tableau-$compteur".txt ; tr " " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | tr -s "\n" | egrep -v "^$" > index1.txt ; tail -n +2 index1.txt > index2.txt; paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt ; #--------------------------------------------------------- # On remplit les colonnes avec les donées récoltées à partir de traitements juste expliqués. Le couleur bleu indique le bon traitement. echo "$compteur $codehttp $encodageExtrait
(Encode::Detect) $ligne P.A n°$compteur_tableau-$compteur DUMP n°$compteur_tableau-$compteur$compteurMotif contexte txt $compteur_tableau-$compteur contexte html $compteur_tableau-$compteur index $compteur_tableau-$compteur bigramme $compteur_tableau-$compteur " >> $tableaux; } #----------------------------------------------------------------------- # Fonction 5: # On remplit les colonnes avec des tirets et d’un minimum d’informations. La couleur rouge indique l'impossibilité de traiter l'URL. sans_traitements() { echo "$compteur$codehttp-$ligne -------" >> $tableaux; } #----------------------------------------------------------------------- # Fonction 6: # L’entête du fichier html avec le contenu CSS. html_entete() { echo "" > $tableaux; } #-----------PROGRAMME PRINCIPAL-------------------- echo "MOTIF=\b$motif\b" > ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt # Création du fichier HTML en indiquant le jeu de caractères utilisé et le style: html_entete # Un compteur pour chaque fichier URL et donc pour chaque tableau associé à celui-ci compteur_tableau=1; # On parcourt le dossier afin de individualiser chaque fichier d'URL en utlisant la commande ls sur notre variable for fichier in $(ls $dossierURL) do # Pour chaque fichier d'URLs, on va créer un nouveau tableau qui contendrait 11 colonnes echo $fichier; echo "" >> $tableaux; compteur=1; # compteur d'URL qui servira à les énumérer et à nommer les pages aspirées echo "" >> $tableaux; echo "" >> $tableaux; echo "" >> $tableaux; # Ensuite on parcourt chaque ligne, c'est-à-dire chaque URL, afin de remplir le tableau jusqu'à ce que l'on trouve plus while read ligne do # Chaque URL est traitée et ajoutée au tableau echo "-----------------------------------------------------------"; echo "TRAITEMENT DE URL : $ligne"; # On recupére le code http dans une variable avec le but de savoir si la conection s'est bien passée # Pour cela, on utilise la commande curl qui, d'une seule fois, recupérer le code http et aspire les pages codehttp=$(curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0" -o ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html $ligne -w %{http_code}) ; # -------------------------------------------------------------------- if [[ $codehttp == 200 ]] # si la valeur de la variable codehttp est 200, on extrait aussi l'encodage utilisé à travers les commandes egrep, cut et tr pour afficher le code en majuscules et eliminer \r then encodageURL=$(curl -I $ligne | egrep -i "charset" | cut -f2 -d= | tr [a-z] [A-Z] | tr -d "\r"); echo "<$encodageURL>"; # On verifie si l'encodage est UTF-8, si il l'est on continue avec le traitement if [[ $encodageURL == "UTF-8" ]] then echo "<---------------HTTP OK UTF8-------------------------->" echo "<$compteur_tableau><$compteur><$ligne><$codehttp><$encodageURL>"; #------------------------# # On exécute la premiere fonction. traitements_utf8 #-----------------------# else # Si l'encodage n'est pas UTF-8 mais le code HTTP est correct echo "<------------------------HTTP OK, NO UTF8------------------------------->" echo "<$compteur_tableau><$compteur><$ligne><$codehttp><$encodageURL>"; if [[ $encodageURL != "" ]] then # On vérifie si la commande iconv accepte l’encodage récupérer afin de le transcoder. reponse=$(iconv -l | egrep "$encodageURL"); if [[ $reponse != "" ]] then # Si la variable contenant l'encodage n'est pas vide et iconv l'accepte, on exécute la deuxième fonction traitements_autreEncodage else #Sinon, on fait rien et on exécute la fonction suivante sans_traitements fi else # Si la variable contenant l'encodage est vide, on essaie de récupérer de nouveau l'encodage, cette fois-ci avec un programme Perl encodageExtrait=$(perl ./PROGRAMMES/detect-encoding.pl ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html | tr -d "\n" | tr -d "\r") echo "ENCODAGE EXTRAIT : $encodageExtrait"; # On répète tous le pas qu’on a fait après la première détection de l'encodage, mais avec la variable encodageExtrait if [[ $encodageExtrait == "UTF-8" ]] then echo "<---------------HTTP OK UTF8 via Encode Detect-------------------------->" echo "<$compteur_tableau><$compteur><$ligne><$codehttp><$encodageExtrait>"; traitements_utf8_viaEncodeDetect else echo "<------------------------HTTP OK, NO UTF8 via Encode Detect------------------------------->" echo "<$compteur_tableau><$compteur><$ligne><$codehttp><$encodageExtrait>"; if [[ $encodageExtrait != "" ]] then reponse=$(iconv -l | egrep "$encodageExtrait"); if [[ $reponse != "" ]] then traitements_autreEncodage_viaEncodeDetect else sans_traitements fi fi fi fi fi else # Si le code http n'est pas 200, on remplit les tableaux avec un tiret courts, sans traitements. echo "<------------------------PB HTTP------------------------------->" echo "<$compteur_tableau><$compteur><$ligne><$codeHttp>"; sans_traitements fi #On augmente le compter pour enumérer chaque ligne du tableau compteur=$((compteur + 1)); done < $dossierURL/$fichier # On indique le chemin du fichier input, source élémentaire du démarrage de la boucle et du programme. echo "
TABLEAU $compteur_tableau
MOTIF : $motif
CPTHTTPEncodageURLP.ADUMPCPT MOTIFContextes txtContextes htmlIndexBigrammes
" >> $tableaux; echo "


" >> $tableaux; # On crée deux fichiers où nous concatènerons et nettoierons le corpus final echo "" > ./CORPUS/CORPUS_"$compteur_tableau".txt echo "" > ./CORPUS/CORPUS_CONTEXTES_"$compteur_tableau".txt # Deux boucle for pour concaténer et nettoyer les balises html et homogénéiser les cases de caractères. for file in $(ls ./DUMP-TEXT/utf8_"$compteur_tableau"*.txt) do echo "" >> ./CORPUS/CORPUS_"$compteur_tableau".txt tr "\n" " " < ./$file | sed -r 's/[[:upper:]]*/\L&/g' | sed -r "s/<[^>]+>//g" >> ./CORPUS/CORPUS_"$compteur_tableau".txt echo "" >> ./CORPUS/CORPUS_"$compteur_tableau".txt done for file in $(ls ./CONTEXTES/"$compteur_tableau"*.txt) do echo "" >> ./CORPUS/CORPUS_CONTEXTES_"$compteur_tableau".txt tr "\n" " " < ./$file | sed -r 's/[[:upper:]]*/\L&/g' | sed -r "s/<[^>]+>//g" >> ./CORPUS/CORPUS_CONTEXTES_"$compteur_tableau".txt echo "" >> ./CORPUS/CORPUS_CONTEXTES_"$compteur_tableau".txt done # Nouveau tableau avec le corpus final. echo "" >> $tableaux; echo "" >> $tableaux; echo "" >> $tableaux; echo "" >> $tableaux; echo "
CORPUS FINAL DU TABLEAU $compteur_tableau
Depuis fichiers DUMPs(UTF-8)CORPUS $compteur_tableau
Depuis fichiers CONTEXTES(UTF-8)CORPUS CONTEXTES $compteur_tableau
" >> $tableaux; echo "


" >> $tableaux; compteur_tableau=$((compteur_tableau + 1)); # On augmente le compteur du tableau done # On ferme le fichier html echo "" >> $tableaux;