ANGLICISME

La vie multilingue des mots sur le web

Script bash

Le script bash élaboré suit le schéma suivant :

image schema du script
Vous trouverez ci-dessous le code dans son intégralité, ou vous pouvez le télécharger ici.

Le programme s'exécute depuis notre répertoire de travail, qui contient les sous-répertoires suivants :
1 #!/user/bin/bash 2 3 #à partir de x fichiers txt contenant chacun une liste d'URLs, génère un fichier html avec x tableaux. 4 5 #le programme s'utilise comme ceci : 6 #bash ./PROGRAMMES/tableaux_URLs.sh ./URLS ./TABLEAUX/tableaux_URLS.html "anglicisme|anglicismes|anglicismo|anglicismi|anglismo|anglismi|inglesismo|inglesismi|الدخيل|الانجليزي|نكلزة" 7 8 #premier agument du programme : input : $1 le répertoire URLS qui contient tous les fichiers d'URLs .txt 9 dossierURL=$1; 10 #deuxième argument du programme : output : $2 : le nom du tableau html 11 monTableau=$2; 12 #troisième argument du programme : motif : le mot pour lequel on recherche les occurrences 13 motif=$3; 14 15 #écriture du début du fichier HTML 16 echo "<html><head><meta charset=\"UTF-8\"/><title>TABLEAUX URLS</title></head><body>" > $monTableau; 17 18 #première boucle : pour chaque fichier d'URL 19 compteurTableau=1; #déclaration-initialisation de la variable compteurTableau qui va compter le nb de fichiers 20 for fichier in $(ls $dossierURL) 21 do 22 #On crée un nouveau tableau pour chaque fichier d'URLs 23 echo "<table align=center border=1 width=100%>" >> $monTableau #début du tableau 24 echo "<tr bgcolor = #3CA9D1><th colspan=\"11\"TABLEAU NUMERO $compteurTableau</th></tr>" >> $monTableau #titre du tableau 25 #1ère ligne du tableau avec les intitulés de nos colonnes 26 echo "<tr bgcolor = #84E3F7><td>NUMERO URL</td> 27 <td>HTTP</td> 28 <td>ENCODAGE</d> 29 <td>URL</td> 30 <td>PAGE ASPIREE</td> 31 <td>DUMP</td> 32 <td>OCCURRENCES MOTIF</td> 33 <td>CONTEXTES TXT</td> 34 <td>CONTEXTES HTML</td> 35 <td>INDEX HIERARCHIQUE</td> 36 <td>BIGRAMMES</td></tr>" >> $monTableau; 37 38 #deuxième boucle : lecture du fichier ligne par ligne 39 compteur=1; #déclaration-initialisation de la variable compteur 40 #pour chaque ligne du fichier d'URLS, càd pour chaque URL, on crée une ligne dans le tableau 41 while read ligne 42 do 43 #on veut aspirer les URLS et on les sauvegarde dans le répertoire PAGES-ASPIREES 44 #d'abord, il faut s'assurer que la commande curl se passe bien 45 #on crée une variable codeHttp qui va récupérer le code retour fourni par http_code généré par curl 46 #on utilise -s et -L pour suivre les redirections 47 codeHttp=$(curl $ligne -s -L -o ./PAGES-ASPIREES/">$compteurTableau-$compteur".html -w %{http_code}); 48 49 #on teste la valeur de codeHttp 50 #si cette valeur est 200 : tout se passe bien. Sinon, on ne peut pas récupérer la page aspirée 51 if [[ $codeHttp == 200 ]] 52 then 53 #on s'assure ensuite que l'URL est bien encodé en UTF-8 54 #pour cela, on isole la valeur du charset de l'URL et on la stocke dans une variable 55 #il faut récupérer le 2ème champ 56 encodageURL=$(curl -I $ligne | egrep -i "charset" | cut -f2 -d= | tr [a-z] [A-Z] | tr -d "\r"); 57 58 #on teste la valeur de encodageURL 59 #si l'encodage est bien UTF-8 : on peut récupérer la page aspirée et remplir le tableau 60 if [[ $encodageURL == "UTF-8" ]] 61 then 62 63 # ********************* CodeHttp 200 + encodage UTF-8 ---> TRAITEMENTS ********************* 64 65 # 1. Dump 66 #on récupère le contenun textuel de la page via la commande lynx 67 #on exécute lynx sur la page aspirée, pas sur l'URL (car certains sites nous empêchent de récupérer leur contenu textuel avec lynx) 68 #on stocke les dumps dans le répertoire DUMP-TEXT 69 lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteurTableau-$compteur".html > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt; 70 71 # 2. Tokenisation (traitement supplémentaire pour les URLs en arabe uniquement) 72 if [[ $fichier == "urls_3_arabe.txt" ]] 73 then 74 java -cp ./PROGRAMMES/stanford-segmenter/stanford-segmenter-4.2.0.jar -mx1g edu.stanford.nlp.international.arabic.process.ArabicSegmenter -loadClassifier ./PROGRAMMES/stanford-segmenter/data/arabic-segmenter-atb+bn+arztrain.ser.gz -textFile ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8-tk.txt 75 mv ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8-tk.txt ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt 76 fi; 77 78 # 3. Nombre d'occurrences de notre motif 79 #on stocke ce nombre dans la variable compteur_motif 80 compteur_motif=$(egrep -o -i $motif ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | wc -l); 81 82 # 4. Contextes avec egrep 83 #Méthode 1 : egrep : construire des morceaux de corpus 84 egrep -C 2 -i "$motif" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt > ./CONTEXTES/"$compteurTableau-$compteur".txt; 85 86 # 5. Contextes HTML avec minigrep 87 perl ./PROGRAMMES/minigrepmultilingue/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt ./PROGRAMMES/minigrepmultilingue/motif-regexp.txt; 88 #3 arguments du programme minigrepmultilingue.pl : l'encodage + le fichier + le motif 89 #Attention le motif à chercher doit être indiqué dans le fichier motif-regexp.txt sous forme d'expression régulière ! 90 #Attention il faut "sauvegarder" le résultat 91 mv resultat-extraction.html ./CONTEXTES/"$compteurTableau-$compteur".html; 92 93 # 6. Index hiérarchique 94 egrep -i -o "\w+" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | sort | uniq -c | sort -n -r -s -k 1,1 > ./DUMP-TEXT/"$compteurTableau-$compteur"-index.txt; 95 96 # 7. Bigrammes (séquence de 2 mots consécutifs) 97 tr " " "\n " < ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | tr -s "\n" | egrep -v "^$" > index1.txt; 98 tail -n +2 index1.txt > index2.txt; 99 paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/"$compteurTableau-$compteur"-bigramme.txt 100 101 # ------------> On peut remplir toutes les lignes du tableau 102 echo "<tr><td>$compteur</td> 103 <td>$codeHttp</td> 104 <td>$encodageURL</td> 105 <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> 106 <td><a target=\"_blank\" href=\"../PAGES-ASPIREES/$compteurTableau-$compteur.html\">Page aspirée $compteur</a></td> 107 <td><a target=\"_blank\" href=\"../DUMP-TEXT/$compteurTableau-$compteur-dump-utf8.txt\">Dump $compteur</a></td> 108 <td>$compteur_motif</td> 109 <td><a target=\"_blank\" href=\"../CONTEXTES/$compteurTableau-$compteur.txt\">Contexte txt $compteur</a></td> 110 <td><a target=\"_blank\" href=\"../CONTEXTES/$compteurTableau-$compteur.html\">Contexte html $compteur</a></td> 111 <td><a target=\"_blank\" href=\"../DUMP-TEXT/$compteurTableau-$compteur-index.txt\">Index $compteur</a></td> 112 <td><a target=\"_blank\" href=\"../DUMP-TEXT/$compteurTableau-$compteur-bigramme.txt\">Bigramme $compteur</a></td> 113 </tr>" >> $monTableau; 114 115 else 116 #code http = 200 OK mais encodage PAS UTF-8 117 118 #est ce que curl a récupéré quelque chose ? 119 #si curl a récupéré quelque chose (une chaîne non-vide), il faut vérifier si cette chaîne de caractère récupérée est effectivement un bon encodage 120 if [[ $encodageURL != "" ]] 121 then 122 #on utilise iconv, l'option -l (--list) renvoie la liste de tous les encodages connus 123 response=$(iconv -l | egrep "\b$encodageURL\b"); 124 if [[ $response != "" ]] 125 #si l'encodage est bien dans la liste iconv 126 127 # ********************* CodeHttp 200 + encodage récupéré par curl ---> TRAITEMENTS ********************* 128 129 then 130 # 1. Dump 131 # Attention on effectue le lynx dans la valeur de l'encodage 132 lynx -dump -nolist -assume_charset="$encodageURL" -display_charset=$encodageURL" ./PAGES-ASPIREES/"$compteurTableau-$compteur".html > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump.txt; 133 134 # 1bis. Conversion du dump en UTF-8 135 iconv -f $encodageURL -t UTF-8 ./DUMP-TEXT/"$compteurTableau-$compteur"-dump.txt > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt; 136 137 # 2. Tokenisation (traitement supplémentaire pour les URLs en arabe uniquement) 138 if [[ $fichier == "urls_3_arabe.txt" ]] 139 then 140 java -cp ./PROGRAMMES/stanford-segmenter/stanford-segmenter-4.2.0.jar -mx1g edu.stanford.nlp.international.arabic.process.ArabicSegmenter -loadClassifier ./PROGRAMMES/stanford-segmenter/data/arabic-segmenter-atb+bn+arztrain.ser.gz -textFile ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8-tk.txt 141 mv ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8-tk.txt ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt; 142 fi; 143 144 # 3. Nombre d'occurrences de notre motif 145 compteur_motif=$(egrep -o -i $motif ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | wc -l); 146 147 # 4. Contextes avec egrep 148 egrep -C 2 -i "$motif" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt > ./CONTEXTES/"$compteurTableau-$compteur".txt; 149 150 # 5. Contextes HTML avec minigrep 151 perl ./PROGRAMMES/minigrepmultilingue/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt ./PROGRAMMES/minigrepmultilingue/motif-regexp.txt; 152 mv resultat-extraction.html ./CONTEXTES/"$compteurTableau-$compteur".html; 153 154 # 6. Index hiérarchique 155 egrep -i -o "\w+" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | sort | uniq -c | sort -n -r -s -k 1,1 > ./DUMP-TEXT/"$compteurTableau-$compteur"-index.txt; 156 157 # 7. Bigrammes (séquence de 2 mots consécutifs) 158 tr " " "\n " < ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | tr -s sort -r -n -s -k 1,1 > ./DUMP-TEXT/"\n" | egrep -v sort -r -n -s -k 1,1 > ./DUMP-TEXT/"^$" > index1.txt; 159 tail -n +2 index1.txt > index2.txt; 150 paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/"$compteurTableau-$compteur"-bigramme.txt; 161 162 # ------------> On peut remplir toutes les lignes du tableau 163 echo "<tr><td>$compteur</td> 164 <td>$codeHttp</td> 165 <td bgcolor=#FDF08D>$encodageURL (détecté avec curl)</td> 166 <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> 167 <td><a target=\"_blank\" href=\"../PAGES-ASPIREES/$compteurTableau-$compteur.html\">Page aspirée $compteur</a></td> 168 <td><a target=\"_blank\" href=\"../DUMP-TEXT/$compteurTableau-$compteur-dump-utf8.txt\">Dump $compteur</a></td> 169 <td>$compteur_motif</td> 170 <td><a target=\"_blank\" href=\"../CONTEXTES/$compteurTableau-$compteur.txt\">Contexte txt $compteur</a></td> 171 <td><a target=\"_blank\" href=\"../CONTEXTES/$compteurTableau-$compteur.html\">Contexte html $compteur</a></td> 172 <td><a target=\"_blank\" href=\"../DUMP-TEXT/$compteurTableau-$compteur-index.txt\">Index $compteur</a></td> 173 <td><a target=\"_blank\" href=\"../DUMP-TEXT/$compteurTableau-$compteur-bigramme.txt\">Bigramme $compteur</a></td> 174 </tr>" >> $monTableau; 175 176 else 177 # ------------> PROBLEME - encodage détecté par curl non connu 178 echo "<tr><td>$compteur</td> 179 <td>$codeHttp</td> 180 <td bgcolor=#E5AB55>$encodageURL (encodage non connu d'iconv)</td> 181 <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> 182 <td>-</td> 183 <td>-</td> 184 <td>-</td> 185 <td>-</td> 186 <td>-</td> 187 <td>-</td> 188 <td>-</td></tr>" >> $monTableau; 189 190 fi; 191 192 #si curl a récupéré une chaîne vide ($encodageURL == "") : il faut détecter l'encodage d'une autre manière : on utilise le programme miracle detect-encodage 193 else 194 encodageExtrait=$(perl ./PROGRAMMES/detect-encoding.pl ./PAGES-ASPIREES/"$compteurTableau-$compteur".html | tr -d "\n" | tr -d "\r"); 195 #on s'assure que la valeur récupérée par le programme est effectivement un bon encodage 196 #on procède de la même manière que lorsque l'encodage récupéré par curl n'est pas UTF-8 : avec iconv 197 response=$(iconv -l | egrep "\b$encodageExtrait\b"); 198 if [[ $response != "" ]] 199 #si l'encodage est bien dans la liste iconv 200 201 # ********************* CodeHttp 200 + encodage récupéré par detect ---> TRAITEMENTS ********************* 202 203 then 204 # 1. Dump 205 # Attention on effectue le lynx dans la valeur de l'encodage 206 lynx -dump -nolist -assume_charset="$encodageExtrait" -display_charset="$encodageExtrait" ./PAGES-ASPIREES/"$compteurTableau-$compteur".html > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump.txt; 207 208 # 1bis. Conversion du dump en UTF-8 209 iconv -f $encodageExtrait -t UTF-8 ./DUMP-TEXT/"$compteurTableau-$compteur"-dump.txt > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt; 210 211 # 2. Tokenisation (traitement supplémentaire pour les URLs en arabe uniquement) 212 if [[ $fichier == "urls_3_arabe.txt" ]] 213 then 214 java -cp ./PROGRAMMES/stanford-segmenter/stanford-segmenter-4.2.0.jar -mx1g edu.stanford.nlp.international.arabic.process.ArabicSegmenter -loadClassifier ./PROGRAMMES/stanford-segmenter/data/arabic-segmenter-atb+bn+arztrain.ser.gz -textFile ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt > ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8-tk.txt; 215 mv ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8-tk.txt ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt; 216 fi; 217 218 # 3. Nombre d'occurrences de notre motif 219 compteur_motif=$(egrep -o -i $motif ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | wc -l); 220 221 # 4. Contextes avec egrep 222 egrep -C 2 -i "$motif" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt > ./CONTEXTES/"$compteurTableau-$compteur".txt; 223 224 # 5. Contextes HTML avec minigrep 225 perl ./PROGRAMMES/minigrepmultilingue/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt ./PROGRAMMES/minigrepmultilingue/motif-regexp.txt; 226 mv resultat-extraction.html ./CONTEXTES/"$compteurTableau-$compteur".html; 227 228 # 6. Index hiérarchique 229 egrep -i -o "\w+" ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | sort | uniq -c | sort -n -r -s -k 1,1 > ./DUMP-TEXT/"$compteurTableau-$compteur"-index.txt; 230 231 # 7. Bigrammes (séquence de 2 mots consécutifs) 232 tr " " "\n " < ./DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt | tr -s "\n" | egrep -v "^$" > index1.txt; 233 tail -n +2 index1.txt > index2.txt; 234 paste index1.txt index2.txt | sort | uniq -c | sort -r -n -s -k 1,1 > ./DUMP-TEXT/"$compteurTableau-$compteur"-bigramme.txt; 235 236 # ------------> On peut remplir toutes les lignes du tableau 237 echo "<tr><td>$compteur</td> 238 <td>$codeHttp</td> 239 <td bgcolor=#FDF08D>$encodageExtrait (détecté avec detect-encoding)</td> 240 <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> 241 <td><a target=\"_blank\" href=\"../PAGES-ASPIREES/"$compteurTableau-$compteur".html\">Page aspirée $compteur</a></td> 242 <td><a target=\"_blank\" href=\"../DUMP-TEXT/"$compteurTableau-$compteur"-dump-utf8.txt\">Dump $compteur</a></td> 243 <td>$compteur_motif</td> 244 <td><a target=\"_blank\" href=\"../CONTEXTES/"$compteurTableau-$compteur".txt\">Contexte txt $compteur</a></td> 245 <td><a target=\"_blank\" href=\"../CONTEXTES/"$compteurTableau-$compteur".html\">Contexte html $compteur</a></td> 246 <td><a target=\"_blank\" href=\"../DUMP-TEXT/"$compteurTableau-$compteur"-index.txt\">Index $compteur</a></td> 247 <td><a target=\"_blank\" href=\"../DUMP-TEXT/"$compteurTableau-$compteur"-bigramme.txt\">Bigramme $compteur</a></td> 248 </tr>" >> $monTableau; 249 250 else 251 # ------------> PROBLEME - encodage détecté par detect-encoding non connu 252 echo "<tr><td>$compteur</td> 253 <td>$codeHttp</td> 254 <td bgcolor=#E5AB55>$encodageExtrait (encodage non connu d'iconv)</td> 255 <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> 256 <td>-</td> 257 <td>-</td> 258 <td>-</td> 259 <td>-</td> 260 <td>-</td> 261 <td>-</td> 262 <td>-</td></tr>" >> $monTableau; 263 fi; 264 fi; 265 fi; 266 267 else 268 # PROBLEME de code http ---> On ne récupère aucune donnée de l'URL :-( 269 echo "<tr><td>$compteur</td> 270 <td bgcolor=#E5AB55>$codeHttp</td> 271 <td>-</td> 272 <td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td> 273 <td>-</td> 274 <td>-</td> 275 <td>-</td> 276 <td>-</td> 277 <td>-</td> 278 <td>-</td> 279 <td>-</td></tr>" >> $monTableau; 280 fi; 281 282 compteur=$((compteur + 1)); #incrémentation --> lecture de la prochaine ligne d'URL 283 done < $dossierURL/$fichier #pour accéder au fichier input qui se trouve dans le sous-dossier, il faut redonner le chemin 284 echo "</table>" >> $monTableau; #fin du tableau 285 echo "<p><hr color=\"blue\"></p>" >> $monTableau 286 compteurTableau=$((compteurTableau + 1)) #incrémentation --> prochain fichier txt, prochain tableau 287 done; 288 echo "</body></html>" >> $monTableau; #fin de la page HTML 289 #fin du programme