LA VIE MULTILINGUE DES MOTS SUR LE WEB

fr. Brexit / en. Brexit / alb. Brexit / ru. Брексит - Брекзит

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;