Script final

Le Tuning en quatre langues

Notre script final est téléchargeable ici.

Nous avons décidé de conserver le script que nous avons fait en cours. Le script est écrit en bash. La sortie, qui est un tableau, est au format html. Ce programme récupère le code html de chaque URL, puis son encodage. Si la page est encodée en UTF-8, le contenu de la page est aspiré. De plus, la présence d'un motif représentant le mot recherché nous permet d'extraire des contextes. Nous avions quelques URLs ayant un code d'erreur HTTP 403 et nous avons dû les retirer, car il s'agissait d'un code d'accès refusé. Toutes les URLs trouvées (sauf deux) étaient encodées en UTF-8. Nous n'avons donc pas eu besoin de créer la partie du script concernant la conversion de l'encodage. De plus, la concaténation des fichiers a été faite directement dans la console Unix.


#!/usr/bin/bash
#---------------------------------------------------------------------
# MODE D'EMPLOI DU PROGRAMME : 
# 1. on se place dans le dossier PROJET 
# 2. puis on lance le programme comme ceci :
# bash ./PROGRAMMES/OKprojet-2020-11-18modif.sh ./URLS ./TABLEAUX/tableau.html "((チュー(ンド|ニング)|カスタム)(カー)?)|暴走族|汽车|改装|\bcustoms?\b|\bpersonnalisations?\s?(automobile)?\b|\bmodified(\s)?(cars?|vehicles?)?\b|\btun(ing|ers?|ed?)\s?(cars?)"
#
# Le motif contient l'expression régulière correspondant aux mots choisis.
#
#---------------------------------------------------------------------
# input du programme : le nom du dossier contenant les fichiers d'URLs est donné en premier argument
# output du programme : le nom du tableau HTML de sortie est donné en second argument
#----------------------------------------------------------------------
# on récupère les arguments du programme et on les stocke dans des variables
dossierURL=$1;
montableau=$2;
motif=$3;
#-----------------------------------------------------------------------
# Ecriture du début du fichier HTML de sortie
echo "" > $2 ;
# Création du compteur des fichiers d'URL et des tableaux associés
compteurtableau=1;
# parcours des fichiers d'urls dans le dossier URLs
for fichier in $(ls $1)
	do
		# pour chaque fichier d'url, création d'un nouveau tableau
		echo $fichier;
		echo "" >> $2;
		
		# Traitement de chaque ligne du fichier d'URL en cours
		# Ecriture d'une ligne dans le tableau html
		
		compteur=1; # compteur d'URL
		# Création des colonnes du tableau
		echo "<tr><th colspan=\"11\">TABLEAU $compteur_tableau</th></tr>" >> $2;
		echo "<tr><th colspan=\"11\">MOTIF : $motif</th></tr>" >> $2;
		echo "<tr><td>CPT</td><td>HTTP</td><td>Encodage</td><td>URL</td><td>P.A</td><td>DUMP</td><td>CPT MOTIF</td><td>Contextes txt</td><td>Contextes html</td><td>Index</td><td>Bigrammes</td></tr>" >> $2;
		# puis lire ligne à ligne le fichier d'URL
		for ligne in $(cat $1/$fichier)
			do
				# chaque URL lue est traitée et permet de remplir le tableau HTML de sortie
				echo "-----------------------------------------------------------";
				echo "TRAITEMENT DE URL : $ligne";
				# 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
				codeHttp=$(curl -s -L -o ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html $ligne --write-out %{http_code}) ; 
				# --------------------------------------------------------------------
				# On teste la valeur de codeHttp
				# Si le code est 200, on passe à la détection de l'encodage
				if [[ $codeHttp == 200 ]]
					then
					encodageURL=$(curl -sIL "$ligne" | egrep -i "charset" | cut -f2 -d"=" | tr "[a-z]" "[A-Z]" | tr -d "\n" | tr -d "\r");
					echo -e "$compteurtableau::$compteur::$code_sortie::$ENCODAGE::$ligne\n";
					# test de l'encodage
					if [[ $encodageURL == "UTF-8" ]]
						then
							echo -e "Encodage initial en UTF-8, on passe au traitement"
							echo "<$compteur_tableau><$compteur><$ligne><$codeHttp><$encodageURL>";
							curl -sL -o  ./PAGES-ASPIREES/$compteurtableau-$compteur.html $ligne ;
							#---------------------------------------------------------
							
							# 1er traitement : on récupère le contenu de la page via la commande lynx
							lynx -dump -nolist -assume_charset="UTF-8" -display_charset="UTF-8" ./PAGES-ASPIREES/"$compteur_tableau-$compteur".html > ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt;
							
							#---------------------------------------------------------
							# 2eme traitement : on compte les occurrences du motif
							compteurMotif=$(egrep -o -i $motif ./DUMP-TEXT/utf8_"$compteur_tableau-$compteur".txt | wc -l);
							#---------------------------------------------------------
							
							# 3ème traitement : extraire des contextes réduits au motif (1 ligne avant et 1 ligne après) avec egrep
							
							# 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. Contextes au format html
							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 ;
							
							# puis on sauvegarde le résultat
							mv resultat-extraction.html ./CONTEXTES/"$compteur_tableau-$compteur".html;
							
							#---------------------------------------------------------
							# 4ème traitement : 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 ;
							
							# 5ème traitement : calcul de bigramme (séquence de 2 mots consécutifs)
							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 ;
							
							#---------------------------------------------------------
							# ECRITURE DANS LE TABLEAU FINAL :
							echo "<tr><td>$compteur</td><td><span style=\"background-color:yellow\">$codeHttp</span></td><td><span style=\"background-color:yellow\">$encodageURL</span></td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n&deg;$compteur</a></td><td><a href=\"../DUMP-TEXT/utf8_$compteur_tableau-$compteur.txt\">DUMP n&deg;$compteur</a></td><td>$compteurMotif</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>" >> $montableau;
						
							
							#---------------------------------------------------------
						else
							echo  -e "HTTP OK mais encodage pas en  UTF8 ----------------------------------"
							echo  -e "<$compteur_tableau><$compteur><$ligne><$codeHttp><$encodageURL>";
							curl -sL -o  ./PAGES-ASPIREES/$compteurtableau-$compteur.html $ligne ;
							ENCODAGEFILE=$(file -i ./PAGES-ASPIREES/$compteurtableau-$compteur.html | cut -d"=" -f2);
							echo -e "ENCODAGE initial vide. ENCODAGE extrait via file : $ENCODAGEFILE \n";
							echo -e "Il faut désormais s'assurer que cet encodage peut être OK ou pas... \n";

						    #---------------------------------------------------------
							# ECRITURE DANS LE TABLEAU FINAL :
							echo "<tr><td>$compteur</td><td><span style=\"background-color:#f97b5c\">$codeHttp</span></td><td><span style=\"background-color:#f97b5c\">$encodageURL</span></td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td><a href=\"../PAGES-ASPIREES/$compteur_tableau-$compteur.html\">P.A n&deg;$compteur</a></td><td><span style=\"background-color:#f97b5c\">??</span></td><td><span style=\"background-color:#f97b5c\">??</span></td><td><span style=\"background-color:#f97b5c\">??</span></td><td><span style=\"background-color:#f97b5c\">??</span></td><td><span style=\"background-color:#f97b5c\">??</span></td><td><span style=\"background-color:#f97b5c\">??</span></td><tr>" >> $montableau;
							#---------------------------------------------------------
						fi
					else
						#---------------------------------------------------------
						# ECRITURE DANS LE TABLEAU FINAL :
						echo "PB HTTP ----------------------------------"
						echo "<$compteur_tableau><$compteur><$ligne><$codeHttp>";
						echo "<tr><td>$compteur</td><td>$codeHttp</td><td>-</td><td><a target=\"_blank\" href=\"$ligne\">$ligne</a></td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><tr>
					fi ;
					
				#---------------------------------------------------------------------
				# on incrémente le compteur d'URLs
				compteur=$((compteur + 1)); 
			done << $dossierURL/$fichier   
		echo "</table>" >> $montableau;
		echo "<p><hr color=\"blue\"></p>" >> $montableau;
		# on incrémente le compteur de tableau
		compteur_tableau=$((compteur_tableau + 1)); 
	done
# Fin des traitements, on finit la sortie HTML
echo "</body></html>" >> $montableau;