Journal de bord
L'objectif de cet exercice est de constituer un corpus de pages web contenant les différents emplois du terme « barrage ». Dans un premier temps, nous avons donc recherché le terme sur des moteurs de recherche traditionnels comme google et yahoo. Les premiers résultats laissant apparaître un usage dominant, à savoir celui d'ouvrage hydro-électrique, nous avons dû laisser passer des dizaines de pages de résultats, afin de trouver des emplois moins usités. Par la suite nous avons utilisé des moteurs de recherche plus spécialisés, comme scholar.google.com ou citeseer, mais ils ont produit des résultats mins nombreux et moins originaux.
Liste des différentes acceptions du mot « barrage »
L'étape suivante de notre travail a consisté à lister les URL des pages contenant les différentes acceptions du mot « barrage » dans des fichiers texte. On n'a conservé que les pages HTML et pas les documents dans des formats exotiques (XLS, etc). Nous avons également classé les adresses par sens. Ainsi, nous avons trouvé des sens très différents du mot « barrage » : cela allait du sens évoqué ci-avant et connu de tous à des sens plus surprenants, comme le
barrage sur les guitares, le
barrage anti-sel,
le barrage en équitation, en tir à l'arc et en escrime, et surtout le
barrage en bridge. Parmi les sens non retenus figurent toutes les occurrences commerciales du terme « barrage », utilisé dans des jeux vidéo, des spectacles, etc.
Utilisation de wget pour aspirer les pages web
Ensuite nous avons appris à utiliser
wget
et ses nombreuses options, ce qui nous a permis d'aspirer les URL que nous avions réunies. Certaines URL n'ont pas pu être aspirées pour cause soit d'erreur 403 (accès interdit), soit d'erreur 404 (page introuvable). La modification de l'User-Agent de
wget
n'a hélas pas permis de régler les problèmes d'erreurs 403. Il y a également eu un problème de dépassement de délai pour certaines pages.
Le début du journal
Après cela, nous nous sommes attelés à la découverte du logiciel
NVU, qui sert à composer des pages web, et qui est d'ailleurs utilisé pour la conception même de cette page, ou du moins pour sa rédaction.
Créer un tableau de liens contenant toutes les pages retenues.
Meilleur moyen pour automatiser cette opération : l'utilisation d'un script shell. Pour simplifier la réalisation de cette tâche, nous avons repris le script bash présenté en cours, et l'avons légèrement modifié pour y ajouter des informations manquantes, notamment au niveau du balisage HTML. Ce script utilise des variables et une boucle, notions qu'il a fallu apprendre pour l'occasion, surtout pour les traductiques.On a également modifié le fichier pour corriger la boucle et pour expliciter les noms de variables.
Créer des fichiers texte
Une fois ceci fait, nous devons désormais transformer les pages aspirées en fichiers au format texte. Nous avons pour cela utilisé
lynx
et son option 'dump', qui permet de détagger une page HTML, soit de lui enlever son balisage. Le principe du script shell restait le même que précédemment, soit une boucle qui liste désormais le contenu du répertoire de pages aspirées et transmet chaque page à
lynx
. Cela crée automatique un fichier texte (on a précédemment pris soin de retirer l'extension d'origine du fichier à l'aide d'un
basename
relié par un pipe à un
cut
), et la boucle se charge une nouvelle fois de créer un tableau HTML contenant des liens vers tous les fichiers nouvellement créés.
Principal problème lors de la manipulation : les fichiers n'ayant pas une extension .htm ou .html ne sont pas transformés en text/plain par la commande
lynx -dump
. Pour pallier cette déficience du programme, on doit rajouter à la boucle une commande qui rajoute à la volée l'extension .html à tous les fichiers, y compris ceux qui la possédaient déjà.
Extraction des occurences du mot « barrage »
Prochaine étape : extraire le contexte des occurrences de « barrage » dans les fichiers textes.
Pour ce faire, nous avons utilisé la commande
egrep
avec l'option -i, qui permet d'ignorer la casse. Encore une fois, le but est d'obtenir un tableau HTML contenant des liens vers des fichiers textes avec le contexte du mot « barrage ». Il nous faut donc encore une fois une boucle, dans laquelle on place notre commande egrep. Afin de conserver le contexte, on utilise l'option '-C 1', qui permet de conserver un total de trois lignes de contexte.
Premier bilan
À l'issue des trois tâches réalisées, on peut constater que l'automatisation des tâches permet un énorme gain de temps, même si ce n'est pas forcément visible sur une petite cinquantaine d'URIs. Malgré cela, certaines opérations ne peuvent être effectuées de manière automatique, mais doivent être réalisées à la main. Pour utiliser cette méthode de façon efficace en production, typiquement en entreprise, il faut donc l'améliorer encore.
Pour créer directement un tableau avec plusieurs colonnes, et non pas trois tableaux contenant chacun une colonne, il suffit de créer une boucle contenant les instructions exécutées dans chacune des boucles précédentes, en les modifiant évidemment pour éviter les erreurs de programmation.
Ayant terminé le projet avec un peu d'avance, nous avons donc décidé de tester ce que ça pourrait donner : le résultat est le script actuel, soit un seul script capable d'aller chercher de lui-même les URIs à télécharger, de les télécharger, les transformer en texte et en extraire le contexte, puis de générer les tableaux HTML idoines. Cela nous a permis d'utiliser de nombreuses autres commandes de bash, comme les opérateurs de conditionnalité. Sébastien a également pu mettre en pratique un peu de Perl pour améliorer l'extraction des noms de fichiers directement depuis l'URI.
La méthode pour la conception de ce script final était un peu différente : nous ne sommes pas partis du script proposé, mais avons commencé par écrire l'intégralité de l'algorithme nécessaire à l'exécution du script. C'est seulement ensuite que nous avons commencé à regarder la doc et à coder le script. Cet algo de départ se trouve toujours à la fin du script, commenté évidemment.
On a également décidé de générer tout le HTML à la volée : si cette page est donc bien rédigée sous NVU, on lui enlève ensuite les balises de début et de fin, et elle est générée soit directement par le script barrage.sh, soit ponctuellement par le script makeHtml.sh. Cela nous permet d'avoir un design commun à toutes les pages.
Conclusion
Cette version finale du script est bien plus complète et utilisable (les dossiers sont créés à la volée si besoin, le traitement d'une page se fait en une seule passe...), mais il n'est pas encore certain que le script fonctionne de manière parfaite sur des corpus beaucoup plus grands : il y a notamment des risques de collisions de pages portant le même nom de fichier, ce qui n'est pas encore géré dans le script actuel par exemple (coup de chance : le découpage en catégories de sens et le faible nombre de pages ont fait que ce cas de figure ne s'est pas encore présenté).