• Script du projet

Vous pouvez télécharger le script du projet ici. Et voir toutes les étapes qui ont mené à sa création sur notre blog.

#!/usr/bin/bash
#-------------------------------------------------------
# pour lancer ce script:
# bash premierscript.sh  
#-------------------------------------------------------
# stockage des arguments dans des variables :
DOSSIER_URL=$1;
DOSSIER_TABLEAUX=$2;
#-------------------------------------------------------
# validation des arguments (ou arrêt du programme) -> s'assurer qu'ils ne sont pas vides et que ce sont des dossiers existants
if [[ "$#" -ne 2 ]]
# alternative : if [ -z "$*" ]
	then
		echo "Cette commande requiert deux arguments"
		exit;
else
	if [[ ! -d $1 ]] || [[ ! -d $2 ]]
		then
			echo "Les arguments doivent être des dossiers existants"
			exit;
	else
		echo $DOSSIER_URL
		echo $DOSSIER_TABLEAUX
	fi
fi
#-------------------------------------------------------
# avant de commencer, on vide les dossiers
rm ./PAGES-ASPIREES/*
rm ./DUMP-TEXT/*
rm ./CONTEXTES/*
rm ./FICHIERS-CONCAT/*
#-------------------------------------------------------
# on instancie les variables
cptTableau=0;
# Ευρωπαϊκή Ένωση|Ε.Ε.|ΕΕ|União Europeia|UE|Europa
motif="(EU|Europäischen? Union|UE|Union européenne|European Union|Ευρωπαϊκή Ένωση|Ε.Ε.|ΕΕ|União Europeia|UE)"
#-------------------------------------------------------
# en-tête du fichier html, avec un style intégré pour avoir un tableau plus lisible
# mise en place d'un index des tableaux à l'aide d'ancres pour pouvoir accéder au tableau souhaité plus facilement
echo "<html>
		<head>
		<meta charset =\"UTF8\">
		<style> 
		
		th, td { padding: 10px; border: 1px solid black; word-break: break-all; }
		tr:nth-child(even) { background-color: #EEEEEE; }
		
		</style>
		</head>
			<body>
				<h2 id=indextable>Index des tableaux</h2>
				<a href=\"#DE.txt\">Tableau n°1 DE</a><br>
				<a href=\"#EL.txt\">Tableau n°2 EL</a><br>
				<a href=\"#EN.txt\">Tableau n°3 EN</a><br>
				<a href=\"#FR.txt\">Tableau n°4 FR</a><br>
				<a href=\"#PT.txt\">Tableau n°5 PT</a><br><br>"  > $DOSSIER_TABLEAUX/tableau.html;
#-------------------------------------------------------
# pour chaque élément condenu dans DOSSIER_URL
for fichier in $(ls $DOSSIER_URL); do
	echo $fichier;
	# on incrémente le compteur de tableau
	cptTableau=$(($cptTableau+1));
	# ajout d'un compteur URL : chaque fichier = 1 tableau HTML
	cptURL=0;
	#-------------------------------------------------------
	# à part pour le premier fichier, mettre une ancre pour revenir à l'index des tableaux
	if [[ $fichier != "DE.txt" ]]
		then
			echo "<a href=\"#indextable\"align=center>Retour à l'index des tableaux</a><br>" >> $DOSSIER_TABLEAUX/tableau.html;
	fi
	#-------------------------------------------------------
	# début de tableau et paramétrage du tableau
	# RQ : sans mise en page, mettre simplement : echo "<table>" >> $DOSSIER_TABLEAUX/tableau.html
	echo "<table style=\"width: 800px\" align=\"center\" border=\"1px\" bordercolor=black>" 
	>> $DOSSIER_TABLEAUX/tableau.html;
	# premières lignes descriptives
	echo "<tr><th colspan=\"11\">Tableau n° $cptTableau</th></tr>" >> $DOSSIER_TABLEAUX/tableau.html;
	echo "<tr><th colspan=\"11\">Fichier $fichier</tr>" >> $DOSSIER_TABLEAUX/tableau.html;
	echo "<tr><th colspan=\"11\">MOTIF : ${motif}</th></tr>" >> $DOSSIER_TABLEAUX/tableau.html;
	echo "<tr><td><nobr>N°</nobr></td><td><nobr>HTTP<br>code</nobr></td><td><nobr>Encodage<br>d'origine</nobr></td>
	<td><nobr><p>              URL             </p></nobr></td>
	<td><nobr><p>Page aspirée</p></nobr></td><td><nobr><p>Dump text</p></nobr></td>
	<td><nobr>Index</nobr></td><td><nobr>Bigramme</nobr></td><td><nobr><p>Contexte txt</p></nobr></td>
	<td><nobr><p>Contexte html</p></nobr></td><td><nobr>CPT<br>Motif</nobr></td></tr>" >> $DOSSIER_TABLEAUX/tableau.html;
	#-------------------------------------------------------
	# on commence le partitionnement des différents fichiers par langue
	echo "<L=\"$fichier\">" >> ./FICHIERS-CONCAT/texteconcat$fichier
	echo "<L=\"$fichier\">" >> ./FICHIERS-CONCAT/contexteconcat$fichier
	#-------------------------------------------------------
	# lire chaque fichier du dossier
	while read line; do
		#-------------------------------------------------------
		# on incrémente le compteur URL
		cptURL=$(($cptURL+1));
		#-------------------------------------------------------
		# variable pour vérifier si la connexion vers l'URL est OK et aspirer les pages des URLS 
		codeHTTP=$(curl -L -w '%{http_code}\n' -o ./PAGES-ASPIREES/"$cptTableau-$cptURL".html $line);
		#-------------------------------------------------------
		# si le code HTTP est OK
		if [[ $codeHTTP==200 ]]
		# RQ: espace avant et après les crochets car n'entre pas dans le if sinon
			then
				# variable pour essayer de repérer l'encodage via CURL
				encodage=$(curl -L -I $line | sed -n '/HTTP.* 200/,$p' | egrep charset | cut -d "=" -f2 | tr -d '\r' | tr -d '\n' | tr '[:lower:]' '[:upper:]');
				#-------------------------------------------------------
				# si aucun encodage trouvé, tenter de récupérer l'encodage via le code html
				if [[ $encodage == "" ]]
					then
						encodage=$(curl -L -i $line | egrep -o "<meta charset=.*>" | cut -d\" -f2 | tr '[:lower:]' '[:upper:]')
				fi
				#-------------------------------------------------------
				# vérifier si l'encodage fait partie de la liste iconv
				verif_iconv=$(iconv -l | egrep -io "$encodage" | head -1)
				#-------------------------------------------------------
				# si bien de l'UTF-8 ou un autre encodage "reconnu"
				if [[ $encodage == "UTF-8" || verif_iconv != "" ]]
					then
						# l'encodage est bien UTF-8 ou un encodage connuu de iconv -l, on continue
						# on utilise lynx pour avoir le texte en format brut, on fait du nettoyage avant de le mettre dans un fichier txt
						texte=$(lynx -nolist --assume_charset=UTF-8 --display_charset=UTF-8 --dump ./PAGES-ASPIREES/"$cptTableau-$cptURL".html) 
						echo "$texte" | grep -v "[\+\*].*" | grep -Ev "jpe?g|png|gif|BUTTON|LIKES|TWEETS|alternate|\s+o |___" > ./DUMP-TEXT/"$cptTableau-$cptURL".txt
						# RQ : pas obligé de mettre dans une variable avec cette alternative :
						# lynx -nolist --assume_charset UTF-8 --dump ./PAGES-ASPIREES/"$cptTableau-$cptURL".html > ./DUMP-TEXT/"$cptTableau-$cptURL".txt
						#-------------------------------------------------------
						# compteur de motif
						cptfreq=$(egrep -o "${motif}" ./DUMP-TEXT/$cptTableau-$cptURL.txt | wc -l)
						#-------------------------------------------------------	
						# création d'index
						echo "$texte" | egrep -o "\w+'?" | sort | uniq -c | sort -nr > ./DUMP-TEXT/index-"$cptTableau-$cptURL".txt
						#-------------------------------------------------------	
						# création de bigramme
						echo "$texte" | egrep -o "\w+'?" > ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt
						cp ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt
						sed -i '1i\ ' ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt
						paste ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt | tail -n +2 | head -n -1 | sort | uniq -c | sort -nr > ./DUMP-TEXT/bigramme-"$cptTableau-$cptURL".txt
						rm ./DUMP-TEXT/index1-"$cptTableau-$cptURL".txt
						rm ./DUMP-TEXT/index2-"$cptTableau-$cptURL".txt
						#-------------------------------------------------------
						# création fichier contexte.txt
						cat "./DUMP-TEXT/"$cptTableau-$cptURL".txt" | tr '\n' '&' |  sed 's/&   / /g' | tr '&' '\n' | egrep -o "((\w)+(-| |[[:punct:]])+){0,7}${motif}((-| |[[:punct:]])+(\w)+){0,7}" > ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt
						#-------------------------------------------------------	
						# création fichier contexte.html
						perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" 
						./DUMP-TEXT/"$cptTableau-$cptURL".txt ./PROGRAMMES/motif.txt
						mv resultat-extraction.html ./CONTEXTES/contextehtml-"$cptTableau-$cptURL".html
						#-------------------------------------------------------	
						# création d'un fichier de concaténation des fichiers dump-text.txt 
						# et un fichier de concaténation des fichiers contextes.txt avec partitionnement
						# le texte a été modifié par soucis d'uniformisation et afin d'avoir un seul mot pour itrameur
						echo "<T=\"utf-8_$cptTableau-$cptURL.txt\">" >> ./FICHIERS-CONCAT/texteconcat$fichier
						echo "<T=\"utf-8_$cptTableau-$cptURL.txt\">" >> ./FICHIERS-CONCAT/contexteconcat$fichier
						if [[ $fichier == "FR.txt" ]]
							then
								cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' |  sed 's/&   / /g' | tr '&' '\n' | sed 's/Union européenne/UE/g'>> ./FICHIERS-CONCAT/texteconcat$fichier
								cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt |  sed 's/Union européenne/UE/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier
						fi
						if [[ $fichier == "DE.txt" ]]
							then
								cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' |  sed 's/&   / /g' | tr '&' '\n'  | sed 's/Europäische Union/EU/g' | sed 's/Europäischen Union/EU/g' >> ./FICHIERS-CONCAT/texteconcat$fichier
								cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/Europäische Union/EU/g' | sed 's/Europäischen Union/EU/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier
						fi
						if [[ $fichier == "EN.txt" ]]
							then
								cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' |  sed 's/&   / /g' | tr '&' '\n' | sed 's/European Union/EU/g' >> ./FICHIERS-CONCAT/texteconcat$fichier
								cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/European Union/EU/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier
						fi
						if [[ $fichier == "EL.txt" ]]
							then
								cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' |  sed 's/&   / /g' | tr '&' '\n' | sed 's/Ευρωπαϊκή Ένωση/ΕΕ/g' | sed 's/Ε.Ε./ΕΕ/g' >> ./FICHIERS-CONCAT/texteconcat$fichier
								cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/Ευρωπαϊκή Ένωση/ΕΕ/g' | sed 's/Ε.Ε./ΕΕ/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier
						fi
						if [[ $fichier == "PT.txt" ]]
							then
								cat ./DUMP-TEXT/"$cptTableau-$cptURL".txt | tr '\n' '&' |  sed 's/&   / /g' | tr '&' '\n' | sed 's/União Europeia/UE/g' >> ./FICHIERS-CONCAT/texteconcat$fichier
								cat ./CONTEXTES/contexte-"$cptTableau-$cptURL".txt | sed 's/União Europeia/UE/g' >> ./FICHIERS-CONCAT/contexteconcat$fichier
						fi
						echo "</T>§" >> ./FICHIERS-CONCAT/texteconcat$fichier
						echo "</T>§" >> ./FICHIERS-CONCAT/contexteconcat$fichier
				else
					#-------------------------------------------------------
					#l'encodage n'est ni UTF-8, ni un encodage "reconnu"
					echo "autre"
					echo $encodage
				fi
			#-------------------------------------------------------	
			# construire les lignes du tableau
			echo "<tr><td>$cptURL</td>
			<td>$codeHTTP</td>
			<td>$encodage</td>
			<td><a href=\"$line\">$line</a></td>
			<td><a href=\"../PAGES-ASPIREES/$cptTableau-$cptURL.html\">P.A."$cptTableau-$cptURL"</a></td>
			<td><a href=\"../DUMP-TEXT/$cptTableau-$cptURL.txt\">D.T. "$cptTableau-$cptURL"</a></td>
			<td><a href=\"../DUMP-TEXT/index-$cptTableau-$cptURL.txt\">index "$cptTableau-$cptURL"</a></td>
			<td><a href=\"../DUMP-TEXT/bigramme-$cptTableau-$cptURL.txt\">bigramme "$cptTableau-$cptURL"</a></td>
			<td><a href=\"../CONTEXTES/contexte-$cptTableau-$cptURL.txt\">contexte txt"$cptTableau-$cptURL"</a></td>
			<td><a href=\"../CONTEXTES/contextehtml-$cptTableau-$cptURL.html\">contexte html"$cptTableau-$cptURL"</a></td>
			<td>$cptfreq</td>
			</tr>" >> $DOSSIER_TABLEAUX/tableau.html;
		else
			#-------------------------------------------------------
			# construction des lignes du tableau pour une URL inaccessible
			echo "<tr><td>$cptURL</td>
			<td>$codeHTTP</td>
			<td>-</td>
			<td><a href=\"$line\">$line</a></td>
			<td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>" >> $DOSSIER_TABLEAUX/tableau.html;
		fi 		
	done < $DOSSIER_URL/$fichier;
	#-------------------------------------------------------
	# on finit le partitionnement des différents fichiers par langue
	echo "</L>" >> ./FICHIERS-CONCAT/texteconcat$fichier
	echo "</L>" >> ./FICHIERS-CONCAT/contexteconcat$fichier
	#-------------------------------------------------------
	# rajout d'un lien vers la concaténation dump-text et concaténation contexte à la fin de chaque tableau
	echo "<tr><th colspan=\"11\"><a href=\"../FICHIERS-CONCAT/texteconcat$fichier\">Concaténation dump-text $fichier</a></th></tr>" 
	>> $DOSSIER_TABLEAUX/tableau.html;
	echo "<tr><th colspan=\"11\"><a href=\"../FICHIERS-CONCAT/contexteconcat$fichier\">Concaténation contexte $fichier</a></th></tr>" 
	>> $DOSSIER_TABLEAUX/tableau.html;
	#-------------------------------------------------------
	# fermeture d'un tableau (et de la lecture d'un fichier) et séparateur
	echo "</table><HR size=8 width=\"100%\" color=\"black\" align=\"center\">" >> $DOSSIER_TABLEAUX/tableau.html;
done;
echo "</body></html>" >> $DOSSIER_TABLEAUX/tableau.html;