PROJET ENCADRE, TRAVAIL SUR LE MOT BARRAGE

Auteurs:     Thomas Ragot (Paris 3)
                    Yann Hiard (Paris 3)
                    Samia Achouri (Paris 3)




1. Introduction



    Ce travail avait  pour but de nous présenter une chaine de traitement textuel simple. Il s'agissait de partir d'un mot, ici barrage, et de constituer un corpus de pages web contenant au moins une fois ce mot. On a cherché  ensuite à transformer ces pages web en texte brut, afin d'en extraire des occurences en contexte du mot barrage.  On a utilisé pour cela essentiellement les commandes BASH (Bourne Again SHell), émulé sous windows par le programme Cygwin.

2. Le mot barrage


Définition du Trésor de la Langue Française informatisé

A. Action de barrer.
B. P. méton. Barrière, obstacle qui ferme un passage.

Le sens A admet des sens particuliers liés à des expressions figées que nous rencontrerons plus tard (tir de barrage, faire barrage, match de barrage, test de barrage...)

3. Choix des pages contenant le mot barrage


    Pour cette étape, on a constitué un fichier d'une cinquantaine d'urls (urls.txt),contenant des urls de pages où apparaissent une ou plusieurs fois le mot "barrage". Nous avons décidé de constituer un corpus représentatifs des différents sens de barrage. On a essayé aussi de choisir des pages provenant de sources différentes: moteur de recherche (google), presse (archive du monde et monde diplomatique), encyclopédie (Wikipédia).
    On a ensuite classé ces urls selon le sens du mot barrage dans la page correspondante (urlsclasse.txt).le fichier final a donc cette structure:
barrage_routier
http://www.monde-diplomatique.fr/2005/08/ZINN/12400.html
http://sfmac.no-ip.com/corpusLeMonde/HTML/041201/data/article_389033.html

faire_barrage
http://www.monde-diplomatique.fr/2004/05/DELPHY/11173.html
http://www.monde-diplomatique.fr/2005/05/LORDON/12175.html
etc...

4. Capture des pages avec wget


    Le fichier d'urls constitué, il s'agissait de capturer les pages afin d'avoir une version locale. On a utilisé ici l'application cygwin, qui est une émulation du terminal BASH que l'on trouve sous UNIX ou LINUX. la commande Wget nous a permis de capturer les pages.
    voici sa syntaxe:
wget [option]... [URL]...

    ce qui donne appliqué à une de nos urls:
wget  http://www.monde-diplomatique.fr/2005/03/BOVET/12113.html

    cette commande capture la page et cree le fichier 12113.html qui est une copie locale de la page web. L'option -i nous a permis de nous simplifier la tâche: on indique le nom du fichier contenant les urls des pages nous intéressant et les pages correspondantes sont capturées. Ainsi la commande:
wget -i urls.txt
nous a permis de capturer toutes les pages que l'on avait sélectionné précédemment.

Problèmes rencontrés à cette étape

 

5. Transformation des fichiers .html en texte brut grâce à la commande lynx.


    La commande lynx permet d'afficher des pages web en mode texte. Cette commande dispose d'une option, - dump, qui permet de rediriger le texte d'un page vers la sortie standard. Ainsi, en redirigeant vers un fichier le flux de sortie de la commande vers un fichier, on peut ne conserver que le texte de la page. ainsi la commande:
lynx -dump http://www.monde-diplomatique.fr/2005/03/BOVET/12113.html > diplo.txt
"dumpe" la page du monde diplomatique, le resultat est un fichier texte (diplo.txt) qui contient uniquement le texte de la page, sans mise en forme.

Problèmes rencontrés à cette étape



6. Organisation des données et automatisation des taches

6.1  Script permettant la création automatique d'un tableau de résultats

    Arrivé à ce stade, il s'agissait de créer un tableau organisant les données déjà récupérés dans un tableau de synthèse associant les urls aux fichiers constitués à partir de ces urls (fichiers de capture, fichiers dumpés). On nous a fourni comme exemple le fichier suivant, qui crée un tableau à une colonne avec les urls (voir le tableau) :

#!/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><table>" > $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

6.2 Ajout au tableau des liens vers les fichiers locaux

    A l'aide de la documentation qui nous a été conseillée, on a  cherché à modifier ce script afin qu'il automatise le plus de tâches possible. On a commencé par modifier le script afin de transformer les urls en liens  et de créer une deuxième colonne contenant les liens vers les fichiers locaux associés aux urls :

#!/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 chemin du repertoire contenant les fichiers locaux";
read rep; #le programme connait le chemin du repertoire contenant les fichiers locaux sous le nom $rep
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><table>" > $tablo; #code de début de tableau
for nom in `cat $fic` #$nom est la variable dans laquelle sera stocké chaque lien
{
echo "<tr>">>$tablo;#création d'une nouvelle ligne
echo "<td><a href=\"$nom\">$nom</a></td>" >> $tablo; #création d'une première colonne avec l'url
nom2=`echo $nom|sed -ne 's/.*\///p'` ;#On crée le nom du fichier local en supprimant tout ce qui est avant le dernier slash
echo "<td><a href=\"$rep/$nom2\">fichier local</a></td>">>$tablo;#création d'une deuxième colonne avec le lien vers le fichier capturé
echo "</tr>">>$tablo; #balise de fin de ligne
}
echo "</table></html>" >> $tablo; #code de fin de tableau
#le fichier dont le nom correspond à la variable tablo est maintenant créé, ouvrez-le.

    On a rajouté deux lignes au début du programme:

echo"donne chemin du repertoire contenant les fichiers locaux";
read rep;

    Ces deux lignes permettent d'indiquer au programme le chemin du repertoire contenant les pages capturées.
 
    On a aussi rajouté deux lignes à l'intérieur de la boucle:

nom2=`echo $nom|sed -ne 's/.*\///p'` ;

    La commande echo renvoie $nom (qui contient l'url en cours) le pipe (|) permet de rediriger cette sortie vers la commande sed. La commande sed, qui permet d'éditer du texte (ici remplacement) efface la première partie de l'url, le chemin du fichier en ligne, pour ne garder que le nom du fichier qui correspond à celui donné par wget au fichier de capture.

echo "<td><a href=\"$rep/$nom2\">fichier local</a></td>">>$tablo;

    On écrit dans le fichier $tablo la colonne permettant l'affichage du lien vers le fichier capturé associé à l'url de la colonne précédente, qui renvoie à la page contenu dans le repertoire saisi par l'utilisateur.

voir le tableau créé

6.3 Automatisation de la commande lynx 

    On a vu plus haut qu'il était nécessaire d'écrire un script pour traiter nos cinquantes urls plus rapidement. Encore une fois, on a repris le même patron de script:

#!/bin/bash
echo "donne chemin du repertoire contenant les fichiers locaux";
read rep; #le programme connait le chemin du repertoire contenant les fichiers locaux sous le nom $rep
ls $rep/>dump.txt;
mkdir dump;
for nom in `cat dump.txt` #$nom est la variable dans laquelle sera stocké chaque lien
{
nom2=`echo $nom|sed -ne 's/html/txt/p'` ;
lynx -dump $rep/$nom > dump/$nom2;
}

    La méthode a ici légèrement changé: on ne part pas d'une liste prédéfinie mais on la constitue à partir du répertoire des fichiers capturés, à travers la commande ls, qui liste les fichiers d'un répertoire donné.  Avec la commande mkdir on crée ensuite le répertoire dump chargé d'accueillir les fichiers dumpés que l'on crée à partir de la liste, juste en changeant l'extension .html en .txt à l'aide de la commande sed.

7.  Recherches des contextes du mot "barrage"

    Une fois le corpus disponible en texte brut grâce à la commande lynx, il s'agissait d'extraire des contextes  du mot "barrage". Pour cela, on  dispose de la commande egrep dont voici la syntaxe:

    egrep [options] PATTERN [FILE...]

    La commande egrep affiche les ligne qui correspondent à un motif donné, ce motif étant une expression régulière. Elle dispose d'un certain nombre d'options dont les principales sont:

    -c : affiche un décompte des lignes comprenant le motif
    cherché.
     -v :affiche les lignes qui ne contiennent pas le motif.
     -n : chaque ligne qui contient le motif est précédée de son
    numéro dans le fichier.
     -i : permet de ne pas tenir compte de la différence entre
    minuscules et majuscules
    -A nbx, i-Bnbs3aomatisatichage du lien vers le fichier capturé associé à l'url de la colonne précédente, qui renvoie à la pa pas{hgraveer.
up; num;&ng &nrerep affi : permetd . (avec une macro emac &nba ont des urie la diff&eaxhier.
nom2=`echo $nom|sed -ne 's/html/txt/p'` ;

  la p chliqu&e
--,nom de c> s sont:

 &nbs napp
 &nbs &ecun code /08/Zbt;"> "S8qu'style="te30 000 en contlip&e. Sit;"s sont:

 &nbs raz-&e-ma/h1> &vi S7"c&eacua">
 &nbs Cherip;&nb contrnaze: 9p= &eacylends
S7"CIGB)>
 &nbs cepeobl&e clasrchⅇ :
mozTocH2"oacuteeacun class="S7ylends
S7ndicatmins sont:

 &nbs A ao&uign: l 2000,acro Cherip;&nb styli9p= &eac
S7"CMB) -s sont:

 &nbs namande(UMN)p; ce qu le motifudeacute'ep; mlesoie $ac
S7 left;s sont:

 &nbs &'orn clas="tableaux/tab1.ht13.htmleS7ylends
S7ndicptudron

 &nbs cetteclaPelocaColozTo[13]Glends
S:cua" ce qunde-diplomat"oacu?, L s sont:

 &nbs PelocaColozTo[15]Glends
S:cuae: ie qunde-diplomat"oacu?, L bacrbr> s sont:

 &nbs [18]Cherip;&nb contrnaze: 9p= &ea ylends
Stext-alles principales sont:
<>$ac;">spression  &nbs  &nbs

    -c :-inp; ression $

   18:p;  Blign: left;"> left;"> l sont: <>$
nde ="S0"> $ace, qui renvoie >   "S4">echoCee de lae) &n="S0"larmozTocId37   &nbs; -c :-i  &nbs Photo: AdrlignGagn
L'Erenoncer à ce > L'Aaligleft;">  &nbs tir de barrage, left;">  &nbs L

 &nbs motitontien>$ac;";"> 'contrveblu&eaceass="S7"dratu&eacua falluhclasseft;"> --seft;">  &nbs peup
-- an class="S7fal1 100 000 Chin  &nbs &eacun code lu
--,an> seft;">  &nbs &ynamiacuteeacbps  &nbs napp  &nbs &eatinie  Nilass="Sn>
nousnavig>  &nbs l'a (
 &nbs &ecun code /08/Zbt;"> "S8qu'style="te30 000eft;"contlip&e. Sit;"seft;">  &nbs pediv> l'icrbg> l sont:<; "S4">echo   &onné.  Avec la commande mkdir on cr&eaclocale;messp; mibr> ercheenalign: lef &ecunbsp; &nb>



  &grep p [options] PATTERN [FILE...]
#l`echo $nom|7">; #le programme connait le fichier d `echo $nom| locaux";
read rep; #l`echo $nom|7">; #le programme connait gistre nom donné par utilisateur dans la variable $tablo
echo "<html>&`echo $nom| locaux";
gt;"
> $tabl /span>; `echo $nom|7">; #lpan class="S4">for nom#l echo nom    On a rajouté deux lignes au début chaque lien
`echo $nom|7">; #lpan an>`echo $nom|ass="S2">#$nom est la variable dans laquelle sera stocké chaque lien
`echo $nom|ass="S2">#$nom est la variable dans laquelle sera sto : percute; chaque lien

`echo $nom|>

nom2=`echo $nom|sed -ne 's/html/txt/p'` ;#création -dump`echo $n `echo $nom|percute; chaque liennom2om|7">;an>#c">#lcute echo=`echo $nom|g/span>
echoqan>#c">#lous le nom $fic
n class="S9"`echo $nom|thspan class="S8">dump`echo $ns="S7">/
$nom < e;diter du texte (ici remplacement) efface la première partie de l'url, le ="S8">dump`echo $ns="S7"3/$nom < e;di2> dump`echo $ns="S9">$nom2;
}

n class="S9"`echo $nom|eg/span>
e"S7">;

ian>
echoA1an>
echoB1an>
echo
n class="S9"`echo $ns="Sb/
$nomS9">
n class="S9"`echo $nom|em\">$nom</a></td>"
>> $tablo`echo $nom|em\">$nom</a></td>" nom2=`echo $nom|sed -ne 's/.*\///p'` ;#On crée le nom du fichier local en supprimant tout ce qui est avant le dernier slaslass="S9">$tablo; #`echo $nom|em\">$nom</a></td>" nom2`echo $nom|em\">$nom</a></td>"
nom2`echo $nom|em\">$nom</a></td>"
nom2`echo $nom|em\">$nom</a></td>"
n$nbrl de la colonne précédente, qui renvoie à la page contenu dans le repertoire saisi n class="S9"`echo $nom|em\">$nom</a></td>" >> #`echo $nom|elsan>#`echo $nom|em\">$nom</a></td>" }
>> #`echo $nom|fian>
`echo $n; travers la commande ls`echo $nom|em\">$nom</a></td>"

    On a rajouté deux lignes au début du programme:

`echo $nn> l'aide de la
documentation qui nous a &ea>     On a vu plus h3ut qu'il était;"> class=t;"contlie wget [opt-frcho s="S9">$tabl caaux urls gories BO>;envoie etcpan dage, n      -n : chaqocId37'w.monde-span>`acute;.  Avec la comma`echo $nn> qui nous a &eaarrage". Pour cela, on  dispose ier conteune masrch&ie $iers locaspan span>
sp;&nb BO>Certacute;s aux urls un class="S7uong cherch&es sh
An texte brbr> #!e de nos ulass="S0" mesetcpouuv stoess>

Ly disponiblnolef & qui i>
o/srrg/wik>Certt-align: left;lib sgtle;m acutsang&eacpuiame="smozTson < encsp; -n : chaqg&eaessdspaan class="S4">echo ss="an cl&iign: lef span>or8qu'enant les s'execlasmozTisation lles pa urls (fa $nodupan>$gligeaspan>
N cony gagsute;c&eclt;td&mps, falluarmo;m a perms="S7" ithNvu80x15ctair.png" bospan="tandard&eaarrage".t Yanspa