Notre script
Pour télécharger la version de script "stylé" avec les fonctions, c'est ici.
La version de script sans style et sans fonctions est par ici.
#!/bin/bash #------------------------------------------------------- IMPORTANT -----------------------------------------------------------------# # Le répertoire courant pour executer le script est : # PROJET-MOT-SUR-WEB #----------------------------------------------- MODE D'EMPLOI DU PROGRAMME --------------------------------------------------------# # On lance le programme comme ceci : # bash ./PROGRAMMES/projet_v8.sh ./URLS ./TABLEAUX/tableaux_v8.html "brexit|(брекзит|брексит)(а|у|ом|е)?" # #--------------------------------------------------- DECLARATION DES VARIABLEs -----------------------------------------------------# # On récupère les arguments du programme et on les stocke dans des variables : # 1er argument du programme : le répertoire URLS qui contient tous les fichiers txt d'URLs dossier_URL=$1; # 2ème argument du programme : le nom du tableau HTML mon_tableau=$2; # 3ème argument du programme : mot recherché motif=$3; #------------------------------------- FONCTION D'ÉCRITURE DU HEADER AVEC LES STYLES DU TABLEAU -----------------------------------# ecrireHeadHtml() { echo "<head><meta charset=\"utf-8\" /> <style> .styleTableau { border-collapse: collapse; width: 100%; border: 2px solid rgba(204, 0, 1, 1); /* bordure de 2 pixels en rouge */ font-size: 10px; /* taille de la police du tableau */ } .styleTableau th { border: 1px solid rgba(204, 0, 1, 1); /* bordure de 1 pixel en rouge */ padding: 5px; } .styleTableau td { border: 1px solid rgba(204, 0, 1, 1); /* bordure de 1 pixel en rouge */ padding: 5px; } .styleEnteteColonne tr { text-align: center; /* police centré */ font-family: Arial, Helvetica, sans-serif; /* police de l'en-tête du tableau*/ font-size: 12px; /*t aille de la police l'en-tête du tableau*/ font-weight: bold; background-color: rgba(204, 0, 1, 0.1); /* couleur du fond de l'en-tête du tableau */ border: 2px solid rgba(204, 0, 1, 1); /* bordure de 2 pixels en rouge */ } tbody tr:nth-child(even) { /* colorie une ligne sur deux */ background: rgba(204, 0, 1, 0.1); } a { text-decoration: none; color: #000; /* couleur des liens */ } a:hover { text-decoration: underline; /* liens soulignés au passage de la souris */ } .styleCenter { text-align: center; } .styleNot200 { background-color:rgba(255, 215 ,0, 0.5); } .styleInconnu { background-color:rgba(255, 215 ,0 , 0.5); } </style> </head>" >> $mon_tableau; } #----------------------------------------- FONCTION D'ÉCRITURE DE L'EN-TÊTE DU TABLEAU ------------------------------------------# ecrireEnteteTableau() { # La fonction remplit l'en-tête du tableau echo "<table class=\"styleTableau\"> <thead class=\"styleEnteteColonne\"> <tr><th colspan=\"11\">TABLEAU $compteur_tableau</th></tr> <tr><th colspan=\"11\">MOTIF : $motif</th></tr> <tr> <th>n°</th> <th>HTTP</th> <th>Encodage</th> <th>URL</th> <th>Page<br/>Aspirée</th> <th>Dump</th> <th>Cpt<br/>Motif</th> <th>Contextes<br/>txt</th> <th>Contextes<br/>html</th> <th>Index<br/>Hierarchique</th> <th>Bigrammes</th> </tr> </thead> <tbody>" >> $mon_tableau; } ecrireLignesTableau() { # La fonction remplit les lignes du tableau quand l'encodage peut être défini echo "<tr> <td class=\"styleCenter\">$compteur</td> <td class=\"styleCenter\">$code_http</td> <td class=\"styleCenter\">$encodage_URL<br/>$source</td> <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> <td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A. n°$compteur</a></td> <td><a href=\"../DUMP-TEXT/utf8_$compteur_tableau-$compteur.txt\">DUMP n°$compteur</a></td> <td class=\"styleCenter\">$compteur_motif</td> <td><a href=\"../CONTEXTES/utf8_$compteur_tableau-$compteur.txt\">contexte-$compteur</a></td> <td><a href=\"../CONTEXTES/$compteur_tableau-$compteur.html\">contexte-$compteur</a></td> <td><a href=\"../DUMP-TEXT/index_$compteur_tableau-$compteur.txt\">index-$compteur</a></td> <td><a href=\"../DUMP-TEXT/bigramme_$compteur_tableau-$compteur.txt\">bigramme-$compteur</a></td> </tr>" >> $mon_tableau; } ecrireLignesTableauInconnu() { # La fonction remplit les lignes du tableau quand l'encodage ne peut pas être défini echo "<tr> <td class=\"styleCenter\">$compteur</td> <td class=\"styleCenter\">$code_http</td> <td class=\"styleCenter\">$encodage_URL<br/>$source</td> <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> <td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A. n°$compteur</a></td> <td class=\"styleCenter\"><span class=\"styleInconnu\">??</span></td> <td class=\"styleCenter\"><span class=\"styleInconnu\">??</span></td> <td class=\"styleCenter\"><span class=\"styleInconnu\">??</span></td> <td class=\"styleCenter\"><span class=\"styleInconnu\">??</span></td> <td class=\"styleCenter\"><span class=\"styleInconnu\">??</span></td> <td class=\"styleCenter\"><span class=\"styleInconnu\">??</span></td> </tr>" >> $mon_tableau; } ecrireLignesTableauNon200() { # La fonction remplit les lignes du tableau quand le code HTTP n'est pas 200 echo "<tr> <td class=\"styleCenter\">$compteur</td> <td class=\"styleCenter\"><span class=\"styleNot200\">$code_http</span></td> <td class=\"styleCenter\">—</td> <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> <td class=\"styleCenter\">—</td> <td class=\"styleCenter\">—</td> <td class=\"styleCenter\">—</td> <td class=\"styleCenter\">—</td> <td class=\"styleCenter\">—</td> <td class=\"styleCenter\">—</td> <td class=\"styleCenter\">—</td> </tr>" >> $mon_tableau; } #--------------------------------------------------- FONCTIONS DE TRAITMENT ------------------------------------------------------# traitementPageUtf8() { # TRAITEMENT 1 : récupérer le contenu de la page avec lynx lynx -dump -nolist -nomargins -width=1024 -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt; # TRAITEMENT 2 : compter les occurrences du motif compteur_motif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l); # TRAITEMENT 3 : extraire des contextes réduits au motif (1 ligne avant et 1 ligne après) # 1) construire des morceaux de corpus egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$compteur_tableau-$compteur".txt; # 2) donner à voir ces contextes au format HTML avec le program Minigrep perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-2020.txt; # 3) sauvegarder le résultat mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html; # TRAITEMENT 4 : index hiérarchique de chaque 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; # TRAITEMENT 5 : calcul de bigramme tr" " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt |tr-s "\n" | egrep -v "^$" > ./DUMP-TEXT/index1.txt; tail -n +2 ./DUMP-TEXT/index1.txt > ./DUMP-TEXT/index2.txt; paste ./DUMP-TEXT/index1.txt ./DUMP-TEXT/index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt; } traitementPageAutre() { # TRAITEMENT 1 : : récupérer le contenu de la page avec lynx lynx -dump -nolist -nomargins -width=1024 -display_charset="$encodage_URL" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/autre_"$compteur_tableau-$compteur".txt; # TRAITEMENT 2 : conversion en UTF-8 iconv -f $encodage_URL -t utf-8 ./DUMP-TEXT/autre_"$compteur_tableau-$compteur".txt > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt; # TRAITEMENT 3 : compter les occurrences du motif compteur_motif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l); # TRAITEMENT 4 : extraire des contextes réduits au motif (1 ligne avant et 1 ligne après) egrep -C 2 -i "$motif" ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt > ./CONTEXTES/utf8_"$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-2020.txt; mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html; # TRAITEMENT 5 : index hiérarchique de chaque 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; # TRAITEMENT 6 : calcul de bigramme tr" " "\n" < ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt |tr-s "\n" | egrep -v "^$" > ./DUMP-TEXT/index1.txt; tail -n +2 ./DUMP-TEXT/index1.txt > ./DUMP-TEXT/index2.txt; paste ./DUMP-TEXT/index1.txt ./DUMP-TEXT/index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 -r > ./DUMP-TEXT/bigramme_"$compteur_tableau-$compteur".txt; } #------------------------------------------------------- PROGRAMME PRINCIPALE ----------------------------------------------------# echo "<$dossier_URL><$mon_tableau><$motif>"; # Début du fichier HTML de sortie echo "<html>" > $mon_tableau; ecrireHeadHtml $mon_tableau; echo "<body>" >> $mon_tableau; # Le compteur des fichiers d'URL et des tableaux associés compteur_tableau=1; #--------------------------------------------------------- # BOUCLE 1 : on parcourt chaque fichier d'URL contenu dans le dossier URLS #--------------------------------------------------------- for fichier in $(ls $dossier_URL) do # Pour chaque fichier d'URL, on va créér un nouveau tableau echo $fichier; # renvoie les noms de fichier du dossier URLs compteur=1; # compteur d'URL # Écriture de l'en-tête du tableau ecrireEnteteTableau $mon_tableau; #--------------------------------------------------------- # BOUCLE 2 : pour chaque ligne du fichier d'URLs, on crée une ligne dans le tableau #--------------------------------------------------------- while read ligne do # chaque URL lue est traitée et permet de remplir le tableau HTML de sortie echo "---------------------------------------------------------------------------"; echo "TRAITEMENT DE URL : $ligne"; # TRAITEMENT 0 : récupérer le contenu html de la page # On s'assure que la commande curl se passe bien en créant une variable qui va récupérer la valeur http_code générée par curl code_http=$(curl -L -o ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html $ligne -w %{http_code}); #--------------------------------------------------------- # TEST DE LA VALEUR code_http #--------------------------------------------------------- if [[ $code_http == 200 ]] then encodage_URL=$(curl -L -I $ligne | egrep -i "charset" | cut -f2 -d= |tr[a-z] [A-Z] |tr-d "\r" |tr-d "\n" |tr-d "\""); echo "<$encodage_URL>"; #--------------------------------------------------------- # TEST DE L'ENCODAGE #--------------------------------------------------------- if [[ $encodage_URL == "UTF-8" ]] then echo "--------------------------- OK : UTF-8 ------------------------------------"; echo "<$compteur_tableau><$compteur><$ligne><$code_http><$encodage_URL>"; # On appele de la fonction de réalisation des instructions pour de l'UTF-8 traitementPageUtf8; source="(via CURL)"; # On écrit dans le tableau final ecrireLignesTableau $mon_tableau; # encodage potentiellement pas UTF-8 else if [[ $encodage_URL != "" ]] then echo "------------------------- OK : NON UTF-8 ----------------------------------"; echo "<$compteur_tableau><$compteur><$ligne><$code_http><$encodage_URL>"; reponse=$(iconv --list | egrep "$encodage_URL"); if [[ $reponse != "" ]] then #--------------------------------------------------------- # ici l'encodage est bon, il suffit de faire les traitements en générant de l'UTF-8 (via iconv) #--------------------------------------------------------- traitementPageAutre; source="(via CURL)"; ecrireLignesTableau $mon_tableau; else #--------------------------------------------------------- # ici l'encodage n'est pas connu de iconv ==> on ne lance pas les traitements #--------------------------------------------------------- ecrireLignesTableauInconnu $mon_tableau; fi else echo "--------------------- OK : POSSIBLEMENT UTF-8 -----------------------------"; echo "<$compteur_tableau><$compteur><$ligne><$code_http><$encodage_URL>"; # ici l'encodage détecté par curl est vide - on l'extrait dans la page aspirée encodage_extrait=$(perl ./PROGRAMMES/detect-encoding/detect-encoding.pl ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html |tr-d "\n" |tr-d "\r"); echo "ENCODAGE EXTRAIT PAR DETECT_ENCODING : $encodage_extrait"; reponse=$(iconv --list | egrep "$encodage_extrait"); if [[ $reponse != "" ]] then encodage_URL=$encodage_extrait #--------------------------------------------------------- # ici l'encodage est bon, il suffit de faire les traitements en générant de l'UTF-8 (via iconv) # ==> on lance les traitement des URLs avec $encodage_extrait #--------------------------------------------------------- traitementPageAutre; source="(via detect)"; # ECRITURE DANS LE TABLEAU FINAL : ecrireLignesTableau $mon_tableau; else #--------------------------------------------------------- # ici l'encodage n'est pas connu de iconv ==> on ne lance pas les traitements #--------------------------------------------------------- ecrireLignesTableauInconnu $mon_tableau; fi fi fi else # ECRITURE DANS LE TABLEAU FINAL : echo "--------------------- SOUCI AVEC LE CODE HTTP -----------------------------"; echo "<$compteur_tableau><$compteur><$ligne><$code_http>"; ecrireLignesTableauNon200 $mon_tableau; fi; compteur=$((compteur + 1)); # on incrémente le compteur d'URLs done < $dossier_URL/$fichier # pour accéder au fichier input, qui se trouve dans le sous-dossier, il faut redonner le chemin echo "</tbody></table><br/><br/><br/>" >> $mon_tableau; # fin du tableau compteur_tableau=$((compteur_tableau +1)); # on incrémente le compteur de tableau done # Fin des traitements, on finit la sortie HTML echo "</body></html>" >> $mon_tableau;