Script et résultats (Angèle)

Deux semaines se sont passées depuis le dernier article publié sur notre blog. Les dernières séances ont été l’occasion de travailler sur notre script en cours afin d’avancer un maximum, puisque la fin du semestre approche à grande vitesse.

Etant trois étudiantes dans notre groupe, nous avons chacune travaillé sur notre propre script, c’est pourquoi nous n’en sommes pas toutes exactement au même point, chacune d’entre nous faisant l’expérience de problèmes différents … Cet article sera l’occasion de résumer ce qui a été fait depuis la récupération de nos urls en français, italien et coréen jusqu’à la concaténation de nos fichiers de dumps, contextes et index.

Rappelons tout d’abord l’objectif de ce cours Programmation et Projet Encadré 1 : il s’agit de choisir un mot, dans notre cas le mot maman en français, mamma en italien, 엄마 en coréen, de récupérer des données sur le web qui contiennent des occurrences de ce mot (nous avons chacune trouvé 80 urls d’articles de journaux et de blogs), puis d’analyser les données récupérées. Pour ce projet, nous nous sommes créé un environnement de travail PROJET_MOT_SUR_LE_WEB contenant les sous-répertoires PROGRAMMES, URLS, TABLEAUX, DUMP_TEXT, CONTEXTES, IMAGES et CONCATENATION.

projet_mot_sur_le_web
Environnement de travail

 

Voici maintenant le résultat de l’avancée du script jusqu’à maintenant :

script1script2script3script4script5script6script7script8

Nous avons également créé un fichier de paramètres contenant le chemin vers notre dossier URLS, le chemin vers notre fichier de résultats se trouvant dans le répertoire TABLEAUX et le motif à rechercher dans les trois langues.

La première étape de notre script, et surtout celle qui nous a pris le plus de temps, c’est de s’assurer que les pages web récupérées étaient bien en UTF-8.

Voici donc un schéma qui représente la structure générale de cette étape dans notre script :

schema_PE
Schéma : Structure du script
  • Si l’encodage qu’on récupère est en UTF-8, on le stocke dans une variable $encodage, puis on récupère le contenu de chaque url grâce à la commande lynx et on le place dans le répertoire DUMP_TEXT, et on peut effectuer les traitements que nous détaillerons plus bas.
  • Si l’encodage n’est pas en UTF-8 et que la variable $encodage est vide, on vérifie si la page aspirée existe bien. Si elle n’existe pas, on ne fait rien. Sinon, on récupère l’encodage de la page avec la commande file qu’on place dans une variable $encodage2. On vérifie ensuite que l’encodage récupéré est connu de iconv : s’il est inconnu, on ne fait rien. Sinon, on récupère le dump avec la commande lynx, on convertit l’encodage récupéré en UTF-8, on détecte le nouvel encodage, censé être en UTF-8, et on le place dans la variable $encodageC, puis on effectue nos traitements.
  • Si l’encodage n’est pas en UTF-8 et que la variable $encodage n’est pas vide, on vérifie que l’encodage est connu de iconv. S’il l’est, on récupère le dump avec la commande lynx, on convertit l’encodage en UTF-8 et on le place dans une nouvelle variable $encodageC, puis on effectue nos traitements. S’il ne l’est pas et que la page aspirée n’existe pas, on ne fait rien. Sinon, on tente de récupérer l’encodage de la page avec la commande file, et on le place dans la variable $encodage2. Ensuite, on vérifie que l’encodage récupéré est connu de iconv. S’il ne l’est pas, on ne fait rien, sinon on récupère le dump, on convertit l’encodage en UTF-8 et on le place dans une nouvelle variable $encodageC, puis on effectue nos traitements.

 

Après avoir réglé l’étape de l’encodage des pages récupérées, nous avons donc pu effectuer nos traitements :

  • Nous avons recherché dans chaque fichier dump, c’est-à-dire dans chaque contenu de page web, le mot recherché $motif et son contexte. Pour cela, nous avons commencé par nous servir de la commande egrep avec l’option i (ignore case). Nous nous sommes ensuite servi du programme minigrep (détaillé dans un autre article du blog) qui fonctionne avec une bibliothèque perl que nous avons dû installer.
  • Nous avons créer une variable $nbmotif dans laquelle se trouve le nombre d’occurrences du mot choisi dans chaque page, que nous avons calculé encore une fois grâce à egrep accompagné de son option -c (count).
  • Nous avons également utilisé la commande egrep pour créer un index de tous les mots de chaque page. Pour cela, nous nous sommes servi de l’option -o qui permet d’afficher uniquement ce qu’on recherche, et de l’expression régulière « \w+ » (au moins une occurrence de n’importe quel caractère de mot, autrement dit, cette expression régulière trouve un mot).
  • Enfin, nous avons procédé à la concaténation de tous les dumps, à la concaténation de tous les contextes trouvé avec egrep, à la concaténation de tous les contextes trouvé avec minigrep, et à celle de tous les index. Pour pouvoir distinguer les différents dumps à chaque fois, nous avons créé un compteur de dumps et nous avons ajouté des balises ouvrantes et fermantes indiquant le numéro du dump dans chacun des fichiers de concaténation.

 

Après avoir lancé notre programme dans la fenêtre de commande à l’aide de la commande bash et en ayant aussi fourni un input (notre fichier de paramètres), nous obtenons une page html resultats.html dans laquelle nous avons envoyé tous nos résultats, comme on peut le voir dans le script. Cette page contient donc trois tableaux (un pour chaque langue) qui nous indiquent le numéro de l’url, l’encodage initial de la page (EI), l’encodage converti s’il existe (EC), le code http de la page, l’url, la page aspirée (.html), le dump (.txt), les contextes trouvés avec egrep (.txt), les contextes trouvés avec minigrep (.html), la fréquence du motif recherché dans une page, et l’index contenant tous les mots du dump de chaque page (.txt).

fenetre_commande
Lancement du programme dans la fenêtre de commande

 

extrait_tableau
Extrait – Tableaux de résultats

 

 

Il nous reste encore sûrement quelques problèmes de script à résoudre, et plus important : la partie des analyses à laquelle nous allons nous consacrer pour le rendu final début janvier.

 

La suite au prochain épisode…

Bonne lecture sur notre blog,

So-Young, Yamina et Angèle 🙂

Laisser un commentaire