Le projet en six étapes :
- Choix d'une cinquantaine d'URL
- Premier tableau en html
- Aspiration de pages avec wget
- Récupération du texte brut avec lynx -dump
- Filtrage du contexte avec egrep
- Présentation du rapport final
Première étape : Choix d'une cinquantaine d'URL.
Après avoir bien observé les différents usages du mot "piste" (d'après le site du TLFI : définition de piste ) , il nous a fallu récupérer sur le web une cinquantaine de pages pertinentes. Pour cela, nous avons utilisé différents moteurs de recherches (google, mozbot, http://www.widepress.com, yahoo.com) et nous avons essayé de varier autant que possible les sources (articles de journaux, blogs, pages spécialisées, définitions, ...)
-
- aérospatial (runway, landing-strip)
- cirque (ring)
- automobile (track)
- empreintes, traces / ensemble d'indices (trail, track)
- piste cyclable (sur route : cycle lane / voix séparée : cycle path/track)
- ski (piste, ski runs)
- musique (track)
Une fois les URL's classées, le travail d'automatisation des tâches va pouvoir commencer.
Deuxième étape : Premier tableau html
Notre dossier crée, nous avons vu, en cours, comment produire un tableau html, avec un premier script donné par les professeurs. Ce fut pour nous une première approche concrète du BASH, après un cours théorique des commandes principales. Ce petit script tout simple nous a en effet permis de découvrir les commandes de bases. Il nous a également fallu commencer à regarder le langage html, pour rendre le tableau plus joli (couleurs, bordures, ...). Nous avons donc passé un peu de temps à nous familiariser avec les balises html. Ce script et ce tableau seront réutilisés pour chaque nouvelle étape : on y ajoutera effectivement tous les traitements effectués sur les URL's dans de nouvelles cellules et de nouvelles colonnes. On créera ainsi progressivement notre résultat final.
Troisième étape : Aspiration des pages -> WGET
Dans un même temps, nous avons vu comment aspirer les pages : c'est à dire télécharger des pages internet pour les rendre accessibles hors connexion. Il s'agissait au départ de faire fonctionner cette commande de façon indépendante pour chaque URL. Nous avons ensuite réaliser un script nous permettant, à partir de l'arborescence, d'automatiser un peu la manipulation.
De plus, nous avons continué notre fichier html, en y ajoutant une nouvelle colonne contenant les liens vers les pages aspirées. Nous avons alors décidé de créer un tableau par sens. Un nouveau problème a alors été rencontré : nous n'avions pas forcément bien anticipé cette partie là lors de notre classement d'URL's dans des dossiers, et nous avons donc dû le rechanger afin d'avoir un résultat qui nous convienne : voir sur le blog, article du 18 novembre
Quatrième étape : Récupération du texte -> LYNX -DUMP
Cette commande va nous permettre de récupérer le texte brut d'une URL: c'est à dire que l'on "jette" les images, les effets de police, les couleurs,... Ici, on récupèrera ce texte à partir des pages aspirées et on redirigera le flux vers un fichier de sortie : dump_numéro-de-l'URL.txt.
Evidemment, on va à nouveau placer ces résultats dans notre fichier html, sous la forme d'une nouvelle colonne.
Cinquième étape : Filtrage du contexte -> EGREP
Dernière phase du script : retrouver dans chaque page dumpée le contexte autour du mot piste ou une de ses traductions. Nous avons ici choisi de limiter le contexte à une ligne au dessus, et deux lignes en dessous du mot trouvé. A partir de là, nouvelle question : comment indiquer au programme les mots que l'on veut retrouver ?
- Première solution (très simple) envisagée : entrer directement au clavier les mots souhaités.
-> Problème : cela va nous obliger à rentrer un certain nombre de mots pour l'anglais, puisqu'on a jusqu'à trois traductions anglaises pour un sens.
Nous avons donc opté pour une deuxième solution qui consisterait à ajouter, dans nos fichiers d'URLs de départ, une ligne contenant le mot, et surmontant les URL's concernées.
Nous avons décidé de commencer la ligne par un '#' afin de la distinguer plus facilement. Il suffirait alors d'appliquer un traitement différent aux lignes suivant qu'elle commence par # (dans ce cas, on enregistre le mot comme variable) ou qu'elle contienne une URL (dans quel cas on recherche la variable enregistrée précédemment dans la page dumpée).
#runwaylorsqu'on lui demande d'afficher les lignes une par une, il écrit pour la 3ème ligne,
http://.....
#landing strip
http://
#landingc'est à dire qu'il fait comme si l'espace entre les deux était un retour chariot.
strip,
#runwayEnsuite la boucle for consiste à traiter chacun des éléments de la pseudo-liste que l’on peut associer à la sortie précédente et à les associer dans un premier temps à la variable ligne. Cette pseudo liste est en fait constituée par le découpage de cette longue chaîne de caractères en prenant comme séparateur le caractère espace. Cette liste ressemble donc à ceci : (#runway, http://...,http://...,#landing,strip,http://..., etc) Et on voit bien qu’il va y avoir un problème !!!
http://....
http://....
#landing strip
http://
A noter qu'au départ, nous utilisions la commande sed, mais que comme dans la suite du programme, nous utilisons perl -pe pour permettre les expressions régulières dans la substitution, nous avons harmonisé le tout.
Une fois cela résolu, il nous reste encore à déterminer le motif de la commande egrep. En l'occurrence, le programme cherche le mot de la variable :
- en début de ligne, en fin de ligne,
- précédé ou suivi d'un point, d'une virgule ou d'un espace
- suivi d'un s.
ce qui nous donne : egrep "(^|\.|,|;| )$traduction(s| |\.|;|,|$)"
Sixième étape : Présentation du rapport final
Enfin, un petit mot quand même sur la réalisation du site nous permettant de présenter notre travail. Après le soulagement (très bref) et la satisfaction (très grande) d'avoir enfin un script qui fonctionne comme on le désire, la création de ce site (à partir d'un CSS existant, mais modifié à notre goût) s'annonce relativement longue et coûteuse en temps et en énergie.On remarquera également que les caractères < et > doivent être écrits en caractères (le symbole "&", un "l" pour un ouvrant ou un "g" pour un fermant, un "t" et un ";") pour ne pas être interprétés commes des ouvertures ou fermetures de balises.