© photo Jérémy St Peyre

Le script

Avant de nous plonger dans le script, quelques explications sur les commandes les plus importantes (nous ne détaillerons pas les commandes basiques de bash utilisées --ls, cd, mkdir, etc.) :

Les commandes-clefs

wget -O   
La commande wget va nous permettre d'aspirer localement des pages web, et l'option -O de rediriger la sortie de la commande dans le dossier souhaité, avec le nom souhaité.
ex : wget -O ./dossier/unsite1.html http://www.unsite.com

lynx -dump
lynx est un navigateur en ligne de commande, l'option -dump nous permet de n'afficher que la partie textuelle de l'URL pointée. (ci-dessous : avec redirection de la sortie dans un fichier texte)
ex : lynx -dump ./pages_aspirees/unsite.html > ./dump/unsite.txt

egrep
Cherche un motif donné dans le contenu d'un fichier. L'option -i permet de ne pas tenir compte de la casse, et l'option -o d'afficher en sortie uniquement le motif recherché.

ex : egrep -i -o "(roger|charlie|papa|tango)" mesmots.txt
[NB : cette commande a été utilisée par ceux qui n'ont pas eu besoin du mini-grep-multilingue, ce qui n'est pas mon cas, toutefois on trouvera une application de cette commande par ma pomme dans le "test d'encodage" au rayon Epaves]

Pour plus d'informations sur les commandes en bash : un tutoriel très clair.

haut de la page »»

Le script !

[Nota : nous conservons le code couleur de Notepad++, très lisible :

  • commentaires : ##Commentaire blablabla
  • commandes : echo
  • variables : $fichiertableau
  • valeur des incrémentations : 1]

Télécharger le script (sans les commentaires).

#!/bin/bash
## NB : Ce script s'exécute à partir du sommet de l'arborescence de fichiers (projet_Master1)

echo "Quel nom de fichier donner au tableau ?"; ## L'utilisateur entre le nom à donner au tableau
read fichiertableau ; ## A ce tableau est associée la variable $fichiertableau

## Création du tableau html et de ses des deux premières lignes dans le fichier
echo "<html><head><title>Tableau de resultats</title></head><body><table border=1>" > $fichiertableau;
echo "<TR><TH colspan =4><big>Français</big></TH><TH colspan =4><big>Japonais</big></TH></TR>
      <TR><TH>lien externe</TH><TH>lien local</TH><TH>texte</TH><TH>contexte</TH><TH>lien externe</TH><TH>lien local</TH><TH>texte</TH><TH>contexte</TH></TR>" >> $fichiertableau;

echo "Quel est le nom du dossier contenant les fichiers d'URL?"; ## L'utilisateur entre le nom du répertoire contenant les fichiers d'URL
read dossier ;    ## A ce répertoire est associée la variable $dossier   

#Création d'un compteur pour les différents sens (cad les 5 fichiers texte contenant les listes d'URL), incrémenté à 1
i=1   

# Pour chaque fichier trouvé dans le répertoire :
for fichierURL in `ls $dossier`
{
## Si c'est un fichier texte qui porte le nom "sens1,2,3,etc."
case "$fichierURL" in
"sens$i.txt")
       
## Créer une case " sens1,2,3..." dans le tableau html
echo "<TR bgcolor=\"#CCCC99\"><TD colspan=8 align=center><b>sens$i</b></TD></TR>" >> $fichiertableau

## Création d'un compteur qui va numéroter chaque ligne du fichier (il servira à nommer les fichiers créés à partir de chaque URL)
## NB : les URL françaises porteront des chiffres impairs, les URL japonaises des chiffres pairs
j=1
       
#Création du compteur langue qui va servir à discriminer le français et le japonais (1=francais, 2= japonais)
cptlg=1
       
for ligne in `cat ./$dossier/$fichierURL` ## Pour chaque ligne trouvée dans le fichier :
{
           
## Si le compteur $cptlg a la valeur 2 (ce n'est pas le cas au premier tour de boucle : on passe à la seconde boucle if)
if [ "$cptlg" -eq "2" ]
    then
    ## Création du lien vers l'URL pointée dans le tableau html
    echo
"<TD align=center><a href=\"$ligne\">URL$j</a></TD>" >> $fichiertableau
               
    ## Au premier tour de la boucle for : création des suites de répertoires :                           pages_aspirees/JP/sens1 ; (dump/JP/sens1) ; JP/sens1 (dans le repertoire "contextes")
    ## A chaque nouveau tour de la boucle for : création de répertoires sens2, sens3, etc.
    mkdir -p ./pages_aspirees/JP/sens$i
    #mkdir -p ./dump/JP/sens
$i
    
mkdir -p ./contextes/JP/sens$i
               
    ## Aspiration de l'URL pointée par la variable $ligne en local, redirection du résultat dans un     sous-rep du rep "pages_aspirees", sous un nom "chiffrepair.html"
    ## Création dans le tableau html du lien vers l'URL aspirée
    wget -O ./pages_aspirees/JP/sens
$i/$j.html $ligne
    
echo "<TD align=center><a href=\"../pages_aspirees/JP/sens$i/$j.html\">locale$j</a></TD>"         >> $fichiertableau
               
    ## Théoriquement : dump du texte de la page aspirée (cette commande est passée en commentaire,       [v. Bugs])
    ## Création du lien dans le tableau html
    #lynx -dump ./pages_aspirees/JP/sens
$i/$j.html > ./dump/JP/sens$i/$j.txt
    
echo "<TD align=center><a href=\"../dump/JP/sens$i/$j.txt\">dump$j</a></TD>" >> $fichiertableau
               
    ## Lancement du mini-grep-multilingue : avec le codage UTF-8, sur le fichier dump qui vient         d'être créé, à partir du motif japonais
    ## Copie du résultat dans un sous-rep du rep "contextes" avec un nouveau nom de fichier numéroté
    ## Création du lien dans le tableau html
    perl ./programmes/minigrep/mini-grep-multilingue.pl "UTF-8" ./dump/JP/sens
$i/$j.txt ./contextes     /motif_jp.txt
    cp resultat-extraction.html ./contextes/JP/sens
$i/resultat-extraction$j.html
    echo "<TD align=center><a href=\"../contextes/JP/sens$i/resultat-extraction$j.html\">contexte$j     </a></TD></TR>" >>
$fichiertableau
               
    ## Incrémentation du compteur $cptlg à 3 ---> passage à la troisième boucle if
     cptlg=3
fi
           
## Si le compteur $cptlg a la valeur 1 :
if [ "$cptlg" -eq "1" ]
    then
              
    ##
Création du lien vers l'URL pointée dans le tableau html
    echo "<TR><TD align=center><a href=\"$ligne\">URL$j</a></TD>" >> $fichiertableau
               
    ## Au premier tour de la boucle for : création des suites de répertoires :                           pages_aspirees/FR/sens1 ; dump/FR/sens1 ; FR/sens1 (dans le repertoire "contextes")
    ## A chaque nouveau tour de la boucle for : création de répertoires sens2, sens3, etc.
    
mkdir -p ./pages_aspirees/FR/sens$i
    
mkdir -p ./dump/FR/sens$i
    
mkdir -p ./contextes/FR/sens$i
               
    ## Aspiration de l'URL pointée par la variable $ligne en local, redirection du résultat dans un     sous-rep du rep "pages_aspirees", sous un nom "chiffreimpair.html"
    ## Création dans le tableau html du lien vers l'URL aspirée
    wget -O ./pages_aspirees/FR/sens
$i/$j.html $ligne
    
echo "<TD align=center><a href=\"../pages_aspirees/FR/sens$i/$j.html\">locale$j</a></TD>"         >> $fichiertableau
               
    ## Dump du texte de la page page aspirée, redirection du résultat dans un sous-rep du rep           "dump", sous un nom "chiffreimpair.txt"
    ## Création dans le tableau html du lien vers le fichier texte
    lynx -dump ./pages_aspirees/FR/sens
$i/$j.html > ./dump/FR/sens$i/$j.txt
    
echo "<TD align=center><a href=\"../dump/FR/sens$i/$j.txt\">dump$j</a></TD>" >> $fichiertableau
               
    ## Lancement du script mini-grep-multilingue : avec le codage ISO-8859-1, sur le fichier dump       qui vient d'être créé, à partir du motif français
    ## Copie du résultat dans un sous-rep du rep "contextes" avec un nouveau nom de fichier numéroté
    ## Création du lien dans le tableau html
    perl ./programmes/minigrep/mini-grep-multilingue.pl "ISO-8859-1" ./dump/FR/sens
$i/$j.txt             ./contextes/motif_fr.txt
    cp resultat-extraction.html ./contextes/FR/sens
$i/resultat-extraction$j.html
    
echo "<TD align=center><a href=\"../contextes/FR/sens$i/resultat-extraction$j.html\">contexte$j     </a></TD>" >> $fichiertableau
   

    ## Incrémentation du compteur langue : 2 ---> passage à la première boucle if

    let "cptlg+=1" 
fi   
                   
let "j+=1"
           
## Si $cptlg a la valeur 3
if [ "$cptlg" -eq "3" ]
   
## Réincrémentation du compteur $cptlg à 1 ---> passage à l'URL française suivante
    then cptlg=1
fi

}
let "i+=1" ## Incrémentation du compteur des sens ---> passage au fichier d'URL suivant
;;
esac
}
## Fermeture du tableau et du fichier html
echo "</table></body></html>" >> $fichiertableau ;

haut de la page »»