Le projet en six étapes :


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, ...)

  • Choix des sens : Nous avons pris les sens qui semblaient les plus présents sur le web, ainsi que ceux comme "piste" dans le domaine du vélo qui nous semblait intéressant car il possède trois traductions possibles en anglais. Nous avons retenu sept sens du mot. Les voici, avec leur traduction anglaise :
      - 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)
  • Problèmes rencontrés : En y regardant de plus près, il n'est pas forcément très facile de classer les occurences de piste avec des étiquettes précises. C'est ainsi posé le problème du domaine Traces, empreintes et indices qui nous semblait se recouper, tout en ayant quelques différences subtiles : traité sur notre blog. Au final, nous avons obtenu un dossier final PISTE, qui a cette architecture (architecture du dossier établi dans la 3ème étape):

    Une fois les URL's classées, le travail d'automatisation des tâches va pouvoir commencer.
  • Haut de page


    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.

    Haut de page


    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.

  • Remarque : Lors de l'aspiration d'une page, l'invite de commande nous fait observer le travail de la machine : on peut donc voir s'il y a réussite (en rouge) ou échec (en jaune):


  • Problème rencontré : Comme nous enregistrons les résultats des pages aspirées dans un dossier, il nous faut forcément une extension. Il nous faut donc différencier les pages html des pages pdf (pour créer soit des pages aspirées en .html, soit en .pdf), afin de pouvoir poursuivre notre travail.

    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


    Haut de page


    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.

  • Problème rencontré : Nous avons déjà signalé avant des pages en .pdf. Cependant, autant nous avons réussi à contourner le problème pour l'aspiration des pages en gardant le format pdf pour le fichier de sortie, autant ici il semblerait qu'il n'y ait aucune solution pour récupérer le texte brut. En effet, le format pdf est un format spécial, on ne peut pas le convertir (sans logiciel) en format .txt. Nous avons donc arrêté ici le traitement pour les URL's concernées. A noter, qu'appliquer une commande lynx -dump sur une telle page n'indique aucun message d'erreur, mais le résultat sera illisible, puisqu'on obtient une page de caractères non identifiables.

    Haut de page


    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).

  • mais...problème : à partir d'un fichier texte de la forme
    #runway
    http://.....
    #landing strip
    http://
    lorsqu'on lui demande d'afficher les lignes une par une, il écrit pour la 3ème ligne,
    #landing
    strip,
    c'est à dire qu'il fait comme si l'espace entre les deux était un retour chariot.

  • Explication : Quand on fait dans le script un for ligne in `cat $fichierURL Dans un premier temps, la commande cat va afficher le contenu du fichier :
    #runway
    http://....
    http://....
    #landing strip
    http://
    Ensuite 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 !!!

  • Solution : relier landing et strip par - , l'ensemble traité sera donc #landing-strip, pour avoir une variable du mot que l'on veut repérer ensuite dans la page dumpée, on utilisera deux fois la commande perl -pe associée à une substitution "s/motif_à_enlever/ce_par_quoi_le_remplacer/g" ce qui nous donne les deux commandes suivantes :
    perl -pe "s/#//g" tempo.txt | perl -pe "s/-/ /g"

    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| |\.|;|,|$)"

  • Problème : Nous avons voulu mettre ce mot en rouge dans le fichier html de sortie afin de le repérer plus facilement. Malheureusement, même avec l'utilisation de perl -pe (version uniligne de perl), nous avons mis un petit moment à comprendre comment faire fonctionner la substitution combinée à des expressions régulières reprises en variables. Pour plus de détail, voir article du blog, et les commentaires

  • Haut de page

    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.
  • Problèmes rencontrés : La page du script est optimisée pour Mozilla Firefox, comme nous l'avons indiqué, car sous Internet Explorer, la balise <pre> ne semble pas fonctionnée.

    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.

    Haut de page