Secteur TAL Informatique,
Université Sorbonne nouvelle, Paris 3

19 rue des Bernardins, 75005 Paris
Secteur TAL Informatique, Université Sorbonne nouvelle, Paris 3

Etape 1 :
Automatisation des Tâches


 

Liens

lien direct : http://www.tal.univ-paris3.fr/cours/atomatisationdestaches-etape1.html

Retour page du cours.

Transparents

Transparents Série 1 (version PDF), "Présentation du cours et du projet, le mini-projet "barrage", ... ou (version HTML) .

Transparents Série 2 (version PDF) : "Fichiers et systèmes de fichiers"

Préambule :

Examen d’un mot sur le web : le mot « barrage » (ou un mot de votre choix)

A. Rechercher le mot sur le web (cf slides):

Essayer de récupérer les pages « pertinentes ». Comment faites-vous ? À la main ou non. Difficultés rencontrées. Type de fichiers « pêchés » ? L’état du texte ?

Rédigez une note de synthèse.

B. Outils de collectes : wget (cf slides)

Lire la documentation de la commande

Rédigez votre propre mode d'emploi

C. Objectif n°1 (cf slides)

Constituer un corpus « restreint » sur le Web (50 pages minimum) avec un échantillon des différents usages du mot « barrage » (à partir des ressources (sur le web, sur un corpus de Presse))

Outils à utiliser pour la collecte : wget

Automatisation, point de départ :

A. Chaque groupe a un fichier ou plusieurs fichiers contenant les URL illustrant les emplois du mot "barrage"

  1. fichier barrage_hydro.txt
  2. http://www.barrage.com/index.html
    http://www.edf.fr/energie_hydro.html
    http://www.un_amour_de_barrage.fr/durance.htm

  3. fichier tir_de_barrage.txt
  4. http://www.red_devils.com/on_les_aura.html
    http://www.ioc.org/derniers_matchs.html
    http://www.disqualifiez_moi.net/competitions/leeds_vs_liverpool.htm
  5. fichier autres_usages.txt
  6. ......

B. Chaque groupe a enregistré en local les URL contenues dans ces fichiers, par la commande : wget -i

La figure suivante illustre la suite des traitements réalisés à ce stade :


 

Problématique "générale" : on a environ 50 URL en local, on veut automatiser les tâches suivantes :

Pour un usage du mot "barrage" illustré dans les URL du fichier barrage_hydro.txt ou du fichier tir_de_barrage.txt ou d'un autre, on veut permettre :

  • Tâche numéro 1 : le renvoi aux 50 pages correspondantes, en local ou en global, grâce à des liens hypertexte (du type <a href="http://www.red_devil.com/on_les_aura.html"> match de barrage</a>). Pour cela on va créer automatiquement une page html listant tous ces liens : il s'agit d'une tâche répétitive.
  • Tâche numéro 2 : la transformation des 50 fichiers html (URL) en fichiers au format texte, de façon à pouvoir retrouver les contextes d'utilisation de "barrage" (avec lynx -dump). A nouveau, au lieu de taper 50 fois la même commande, on vous demandra d'automatiser cette tâche.
  • Tâche numéro 3 : la possibilité pour un utilisateur d'interroger tous les fichiers liés à un usage spécifique de "barrage" pour retrouver le contexte immédiat de ce mot, que ce dernier soit écrit en lettres majuscules ou minuscules (avec egrep -i). Il s'agit bien encore d'automatisation.

Pré-requis :

  • redirection > et >>
  • commande cat dans un terminal et comment le programme sait qu'il doit évaluer une expression avec des apostrophes inversées
  • chemin absolu et relatif vers fichier
  • répertoire d'accueil (là où je suis)
  • caractères réservés et comment les dé-spécialiser (ici \")
  • interaction avec utilisateur (commande du shell : read)
  • commande du shell : echo
  • Tâche numéro 1 :

    Contexte de travail : l'arborescence construite pour ce travail

    Vous pourrez récupérer cette arborescence "minimale" et vous en servir pour la suite de votre travail : arbo.zip

    Solution n°1 : via 1 shell script (fait-tableau-v1.sh à récupérer ici)

    • écriture d'un shell script avec un éditeur de texte (emacs, vi, bloc-notes) pour automatiser la tâche consistant à faire un tableau html contenant toutes les URL illustrant un certain usage du mot "barrage"

    shebang #!/bin/bash
    commentaires indiqués avec # en début de ligne #ici, commentaire
    echo "hello world";
    read data; le programme stocke ce que l'utilisateur a rentré dans la variable $data
    boucle simple "for [fic] in [liste ou commande entre apostrophes inversées]" { tâche à accomplir}


    #!/bin/bash
    echo "donne nom de fichier contenant les liens http";
    #c'est la liste des pages wgettées
    read fic; #le programme connait le fichier de liens sous le nom $fic
    echo "donne nom de fichier html où stocker ces liens"; #c'est le tableau de liens à créer
    read tablo; #enregistre nom donné par utilisateur dans la variable $tablo
    echo "<html><head><title>tableau de liens</title></head><body><table border=\"1\">" > $tablo; #code de début de tableau
    for nom in `cat $fic` #$nom est la variable dans laquelle sera stocké chaque lien
    {
    echo "<tr><td>$nom</td></tr>" >> $tablo; #création d'un tableau à une colonne et autant de lignes qu'il y a d'URL
    }
    echo "</table></html>" >> $tablo; #code de fin de tableau
    #le fichier dont le nom correspond à la variable tablo est maintenant créé, ouvrez-le

    Solution n°2 : via 1 script perl (fait-tableau-v2.pl à récupérer ici)

    #!/usr/bin/perl
    print "Donnez le nom de fichier contenant les liens http \n"; #c'est la liste des pages wgettées
    $filehttp=<STDIN>; #lecture de ce que l'utilisateur entre au clavier et association à une variable
    print "$filehttp";
    chomp($filehttp); #on supprime le retour chariot
    print "Donnez un nom de fichier html où stocker ces liens \n"; #c'est la liste des pages wgettées
    $filehtml=<STDIN>;
    print "$filehtml";
    chomp($filehtml);

    open(FILEIN,"$filehttp"); # ouverture du fichier des pages wgettées en lecture
    open(FILEOUT,">$filehtml"); # ouverture du fichier HTML en écriture
    print FILEOUT "<html>\n<head>\n<title>tableau de liens</title>\n</head><body>\n<table border=\"1\">\n" ; #code de début de tableau

    while ($ligne=) {
    print $ligne;
    chomp($ligne);
    print FILEOUT "<tr><td>$ligne</td></tr>";

    }
    print FILEOUT "\n</table>\n</body>\n</html>"; #code de fin de tableau
    close(FILEIN);
    close(FILEOUT);

    Trace de l'exécution :

    Résultats produits :

    le fichier "url-hydro.txt"

    le fichier "url-hydro-v1.html"

    le fichier "url-hydro-v2.html"

     

    Votre travail :

    Que faut-il rajouter au code précedent pour que le tableau d'URL construit permette un accès direct à chacune des URL listées (via un lien hypertexte) ? (A faire sur les 2 scripts)

    Que faut-il rajouter au code pour que le tableau contienne 2 colonnes : une contenant les URLs et l'autre contenant un lien vers la page aspirée et associée à chaque URL.

    Modifiez le script perl pour lancer à la fois, la récupération des fichiers via wget et la création du tableau (on utilisera par exemple la commande perl "system").

    Tâches numéro 2 et 3 :

    Lecture indispensable...

    • Guide avancé d'écriture des scripts Bash, sur le Site de traduction français pour le guide ABS Advanced Bash Scripting Guide
      (Lien : Version 5 http://abs.traduc.org/abs-5.0-fr/)
      Une exploration en profondeur de l'art de la programmation shell. Ce tutoriel ne suppose aucune connaissance de la programmation de scripts, mais permet une progression rapide vers un niveau intermédiaire/avancé d'instructions tout en se plongeant dans de petites astuces du royaume d'UNIX. Il est utile comme livre, comme manuel permettant d'étudier seul, et comme référence et source de connaissance sur les techniques de programmation de scripts. Les exercices et les exemples grandement commentés invitent à une participation active du lecteur avec en tête l'idée que la seule façon pour vraiment apprendre la programmation de scripts est d'écrire des scripts.
      On regardera en particulier : la seconde partie, le chapitre 10, le chapitre 14, etc.