La vie multilingue de mot champagne
Script: commandes et commentaires
Tout au long du semestre, dans le cadre du cours de Projet Encadré, nous avons toutes les trois élaboré un script (cf.les liens suivants). Cependant, pour constituer notre corpus, nous avons jugé plus sage de récolter toutes les données avec un seul script : nous voulions obtenir des résultats aussi comparables que possible et avons donc tenu à utiliser rigoureusement les mêmes outils pour chaque langue (cela vaut également pour les outils d'analyse).

Nous avons travaillé, soit sur Windows avec Cygwin (Apolline et Aline), soit avec la console Bash sur Linux (Elena). Nous avons choisi d'utiliser le script d'Apolline pour élaborer le corpus sur lequel nos analyses linguistiques sont basées, car c'était celui pour lequel il semblait y avoir le moins de soucis pour les aspirations de page Web.

Pour fonctionner, le script final a donc besoin :
  • d'un fichier de paramètres (avec le chemin du répertoire contenant les fichiers d'URLs, le chemin du fichier qui accueillera le tableau HTML, le motif recherché)
  • du programme Minigrep (et d'un fichier contenant le motif recherché)
  • du programme Concat (pour concaténer les fichiers dans le script)
Notre script final
#!/bin/bash
#fonctions
#paramètres : Numéro, lien, code_curl, header, encodage initial, Fq motif, cpt tableau, fic_tab, convertible?
#Définition des colonnes du tableau html: Numéro,lien,code curl,header curl,page,encodage initial, dump initial,dump utf-8,contexte utf-8,contexte html utf-8, Fq motif
function ecrit_ligne(){
	if [ "$encodage" != "utf-8" ] ; then
		str="<a href=\"../DUMP-TEXT/$cpttablo-$numlignes-utf8.txt\">DUMP n&deg; $cpttablo-$numlignes</a>"
		if [[ "$1" == "OK" ]]
		then
			str2="<a href=\"../DUMP-TEXT/$cpttablo-$numlignes.txt\">DUMP n&deg; $cpttablo-$numlignes</a>"
		else
			str2="-"
		fi
	else
		str="-"
		str2="<a href=\"../DUMP-TEXT/$cpttablo-$numlignes.txt\">DUMP n&deg; $cpttablo-$numlignes</a>"
	fi
	echo "<tr><td align=\"center\">$numlignes</td><td align=\"center\"><a href=\"$ligne\">lien n&deg;$numlignes</a></td><td align=\"center\">$coderetour</td><td align=\"center\"><small>$header</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$cpttablo-$numlignes.html\">P.A n&deg; $cpttablo-$numlignes</a></td><td align=\"center\">$encodage</td><td align=\"center\">$str2</td><td align=\"center\">$str</td><td align=\"center\"><a href=\"../CONTEXTES/$cpttablo-$numlignes.txt\">CONTEXTE n&deg; $cpttablo-$numlignes</a></td><td align=\"center\"><a href=\"../CONTEXTES/$cpttablo-$numlignes.html\">CONTEXTE n&deg; $cpttablo-$numlignes</a></td><td>$nbmotif</td></tr>" >> $tablo ;#on peut utiliser des variables globales comme tablo
}
# 1. Lecture des paramètres dans le fichier PARAMETRES
#On instancie les variables rep et tablo avec commande read
#Ces variables vont prendre comme valeur une ligne du fichier parametres.txt qu'on fournit au prog bash
read rep;#répertoire contenant les fichiers d'url
read tablo;#Le nom du fichier html en sortie
read motif;#Le motif analysé
echo "INPUT : $rep"; 
echo "OUTPUT : $tablo"; 
echo "PATTERN : $motif";
# 2. Affichage des tableaux
let "cpttablo=1"; #numlignes tableau html?
#Construction de l'entête de la page html
echo -e "<html>\n<head>\n<meta charset=\"utf8\">\n<title>Tableau de liens</title>\n</head>\n<body>\n" > $tablo;
#====== pour chacun des fichiers d'URL ========
#On veut accéder à chacun des fichiers d'urls du rep
#La première boucle a pour tâche de lister des fichiers du répertoire
for file in  $(ls $rep) #ls sert à lister le contenu du rep (les fichiers d'urls)
	#-------------------------------------------------
	{
	# traitement d'un fichier d'URL 
	let "numlignes=1"; #On intialise à 1 un premier numlignes qui va nous servir à parcourir le rep en input pour compter les urls (les lignes)
    echo "<p align=\"center\"><hr color=\"blue\" width=\"80%\"> </p>" >> $tablo;#Nouvelle section (nv thématique)
    echo "<table align=\"center\" border=\"1\">" >> $tablo;#Nouveau tableau
    echo "<tr><td colspan=\"11\" align=\"center\">Tableau n&deg; $cpttablo</td></tr>" >> $tablo;#titre du tableau html
    echo "<tr><td align=\"center\"><b>N&deg;</b></td><td align=\"center\"><b>Lien</b></td><td align=\"center\"><b>CODE CURL</b><td align=\"center\"><b>En-t&ecirc;te</b></td><td align=\"center\"><b>Page Aspir&eacute;e</b></td><td align=\"center\"><b>Encodage Initial</b></td><td align=\"center\"><b>DUMP initial</b></td><td align=\"center\"><b>DUMP UTF-8</b></td><td align=\"center\"><b>CONTEXTE UTF-8</b></td><td align=\"center\"><b>CONTEXTE HTML UTF-8</b></td><td align=\"center\"><b>Fq MOTIF</b></td></tr>" >> $tablo ;#Définition des colonnes du tableau html: Numéro,lien,code curl,status curl,page,encodage initial, dump initial,dump utf-8,contexte utf-8,contexte html utf-8, Fq motif
	#-------------------------------------------------
	# traitement de chacun des URLs
	for ligne in $(cat $rep/$file); # ici on liste les lignes contenues dans le fichier file grâce à la commande cat
	#-------------------------------------------------
#echo "<table width=\"50%\"align=\"center\"cellspacing=\"4\"border=\"1\">" >> $tablo; #On crée un tableau par fichiers (avec alignement, cellules espacées et bordure)
#echo "<tr><td>N°</td><td>Encodage</td><td>http_code</td><td>URL</td><td>PAGES-ASPIREES</td><td>DUMP-TEXT</td></tr>" >> $tablo;
		# 1. RECUPERATION DU HEADER HTTP
		{
		header=$(curl -sI $ligne | head -n 1);
		echo "header curl: $header";
		# ==> ASPIRATION DE LA PAGE
		echo "TELECHARGEMENT de $ligne vers ./PAGES-ASPIREES/$cpttablo-$numlignes.html"; 
		# 2. RECUPERATION DU CODE RETOUR HTTP ET DE LA PAGE
		coderetour=$(curl --silent --output ./PAGES-ASPIREES/"$cpttablo"-"$numlignes".html --write-out "%{http_code}" $ligne);#on prend le code de retour de curl et on le met à la fin
		echo "CODE RETOUR CURL : $coderetour" ;
		#-----------------------------------------------------------------------
		# test de la bonne reussite du telechargement
		if [[ "$coderetour" == 2?? ]]
		then
			#il y a correspondance donc réussite du téléchargement
			echo "téléchargement réussi"
		else
			#le télécharement a échoué
			echo "échec du téléchargement "
			continue
		fi
		#-----------------------------------------------------------------------
		# ==> DETECTION DE L'ENCODAGE DE LA PAGE en ligne
		encodage=$(curl -sI $ligne | egrep -i "charset=" | cut -f2 -d= | tr -d "\n" | tr -d "\r" | tr "[:upper:]" "[:lower:]");
		echo "ENCODAGE : <$encodage>" ;
		if [[ $encodage == "utf-8" ]]
		then 
			echo "DUMP via lynx" ;
			lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ; 
			# ajouter ici l'extraction de contexte autour des mots choisis
			egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ; 
			nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt);
			./PROGRAMMES/minigrepmultilingue.exe "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes.txt ./PROGRAMMES/motif.txt;
			mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
			echo "ECRITURE RESULTAT dans le tableau" ;
			ecrit_ligne "OK";
		else
			#------------------------------------------
			# ATTENTION : avant de faire ce qui suit : 
			# il faudrait s'assurer que l'encodage recupere est bien un "BON" encodage !!!!
			# dans un premier temps on s'assure SEULEMENT que cette variable n'est pas vide
			# et ça ne suffit pas, il faudra en faire plus
			#------------------------------------------
			if [[ $encodage != "" ]]
			then
				VERIFENCODAGEDANSICONV=$(iconv -l |  egrep -o "[-A-Z0-9\_\:]+" |egrep -i $encodage) ;
				#------------------------------------------
				# ici il faut s'assurer que l'encodage est bien connu de iconv !!!!
				#------------------------------------------
				if [[ $VERIFENCODAGEDANSICONV == "" ]]
				then
				#------------- On ne fait rien...   -------------------------------------------------
				ecrit_ligne "KO";
				else
					echo "DUMP (via $encodage) de $ligne via lynx" ;
					lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ;
					iconv -f $encodage -t utf-8 ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt ;
					egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ; 
					nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt);
					#perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt $motif;
					#mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
					echo "ECRITURE RESULTAT dans le tableau" ;
					ecrit_ligne "OK"
				fi
			else
				isthereacharset=$(egrep -i -o "meta(.*)?charset" ./PAGES-ASPIREES/"$cpttablo-$numlignes".html);
				if [[ $isthereacharset != "" ]]
				then
					encodage=$(egrep -i -o "meta(.*)charset[^=]*?=[^\"]*?\"?[^\"]+?\"" ./PAGES-ASPIREES/$cpttablo-$numlignes.html | egrep -i -o "charset[^=]*?= *?\"?[^\"]+?\"" | cut -f2 -d= | sed "s/\"//g" | sed "s/>//g" | sed "s/ //g" | sed "s/\///g" | sort -u | tr [A-Z] [a-z] );
					echo "ENCODAGE EXTRAIT DE LA PAGE ASPIREE : $encodage" ;
					if [[ $encodage == "utf-8" ]]
					then 
						echo "DUMP de $ligne via lynx" ;
						lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ; 
						egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ; 
						nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt);
						#perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes.txt $motif ;
						#mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
						echo "ECRITURE RESULTAT dans le tableau" ;
						ecrit_ligne "KO"
					else
						#on a retrouvé l'encodage, différent de utf-8
						VERIFENCODAGEDANSICONV=$(iconv -l |  egrep -o "[-A-Z0-9\_\:]+" |egrep -i $encodage) ;
						if [[ $VERIFENCODAGEDANSICONV == "" ]]
							#non convertible
						then
						#------------- On ne fait rien...   -------------------------------------------------
							ecrit_ligne "KO";
						else
							lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ;
							iconv -f $encodage -t utf-8 ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt
							egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ; 
							nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt);
							#perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt $motif ;
							#mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
							#------------------------------------------------------------------------------------------------------
							echo "ECRITURE RESULTAT dans le tableau" ;
							ecrit_ligne "OK"
						fi
					fi
				else
					#on n'a pas pu retrouver l'encodage
					ecrit_ligne "KO"
				fi
			fi
		fi
		# il faut ajouter 1 au numlignes de lignes
		let "numlignes=numlignes+1";  # let "numlignes+=1";
	}
	#----------------------------------------------------
	echo "</table>" >> $tablo ;
	let "cpttablo=cpttablo+1";
	}
echo "</body></html>" >> $tablo ;
Made on
Tilda