Les Scripts

Je vous propose tout d'abord de télécharger le script permettant de créer notre arborescence de travail :
Script d'arborescence

#!/bin/bash
# avant de lancer ce script on se place dans le dossier consacré au Projet Encadré

# par exemple, situons-nous dans le bureau
# cd /cygdrive/c/Desktop/
# mkdir ProjetEncadre
# cd ProjetEncadre
# On se situe donc dans le dossier ProjetEncadre
# on crée désormais l'arborescence de travail
mkdir ./CONTEXTES;
mkdir ./DUMP-TEXT;
mkdir ./PAGES-ASPIREES;
mkdir ./PROGRAMMES;
mkdir ./TABLEAUX;
mkdir ./URLS;
# on crée les sous-dossiers correspondants à chaque sens dans le dossier URLS
mkdir
./URLS/cheveux;
mkdir ./URLS/couper;
mkdir ./URLS/perspective;
mkdir ./URLS/trophee;
mkdir ./URLS/verre;
#Chaque sous-dossier sens contiendra les fichiers d'URLS. On aura 3 fichiers texte du type allemand.txt, anglais.txt, et francais.txt

Pour pouvoir travailler avec notre script, vous pouvez télécharger notre dossier URLS contenant toutes nos URLS.
Dossier URLS


Il s'agit ensuite de télécharger  le dossier mingrep et de le placer dans le dossier PROGRAMMES
Minigrep-Multilingue

Et voici notre script dans sa totalité, à placer également dans le dossier PROGRAMMES
Script final


#!/bin/bash
echo "Donnez le nom du répertoire contenant les fichiers des URLs :";
read url;
echo "Donnez le nom du fichier html où stocker les tableaux des liens : ";
read tablo;
echo "Soyez patients, je m'occupe de tout"; 

#Tout d'abord on insère le code html pour créer le début du tableau avec le code css pour le personnaliser

echo "<html><head><title>tableau de liens</title><style type=\"text/css\">table,th,td {border: 1px solid #333333; border-color: black; text-align: center;} th,td{color:#333333} a {color:#669999} </style></head><body>" > $tablo;

#La variable j permettra l'indication du n° de la page
j
=1;
nbdump
=0;

#Pour chacun de nos sous-dossiers : trophee, perspective, cheveux, couper, verre, on fait une boucle
for sens in `ls -r $url`
{

    #Ici, le html crée le titre du tableau et ses colonnes
   
echo "<table  align=center cellspacing=\"0\"><CAPTION><i><font size=14 color=#E8E8E8>$sens</font><i></CAPTION><tr BGCOLOR=#B5B5B5><th>LANGUE</th><th>LIENS</th><th>PAGES ASPIREES</th><th>DUMP initial</th><th>DUMP utf-8</th><th>CONTEXTES utf-8</th><th>CONTEXTES html</th></tr>" >> $tablo;

    #Pour chaque fichier d'un sous-dossier (francais, anglais, allemand) on refait une boucle
   
for languetxt in `ls $url/$sens`
   
{

        #Le compteur l nous indique le nombre de lignes pour chaque langue, c'est-à-dire le nombre de liens que contienne chaque fichier         l=0;
       
for ligne in `cat $url/$sens/$languetxt`
           
{
           
let "l=l+1";
           
}

        #Et voici la variable "languetxt" sans l'extension ".txt", elle sert à récupérer le nom de la langue sans l'extension
        langue
=$(basename $languetxt .txt);
       

        #Nous modifions ici les instructions pour chaque motif au moyen d'une boucle par langue
       
if [[ $langue == "anglais" ]]
           
then
           
if [[ $sens == "cheveux" ]]
           
then
            motif
="haircut";
           
fi
           
if [[ $sens == "trophee" ]]
           
then
            motif
="cup";
           
fi
           
if [[ $sens == "perspective" ]]
           
then
            motif
="section";
           
fi
           
if [[ $sens == "verre" ]]
           
then
            motif
="goblet";
           
fi
           
if [[ $sens == "couper" ]]
           
then
            motif
="cut";
           
fi
       
fi 
       
if [[ $langue == "allemand" ]]
           
then
           
if [[ $sens == "cheveux" ]]
           
then   
            motif
="Haarschnitt";
           
fi
           
if [[ $sens == "trophee" ]]
           
then
            motif
="Pokal";
           
fi
           
if [[ $sens == "perspective" ]]
           
then
           
motif="Schnitt";
           
fi
           
if [[ $sens == "verre" ]]
           
then
            motif
="Kelch";
           
fi
           
if [[ $sens == "couper" ]]
           
then
            motif
="Schnitte";
           
fi
       
fi
       
if [[ $langue == "francais" ]]
           
then
           
motif="coupe"; 
       
fi
       
echo $motif;

        #La hauteur (verticale) d'une ligne langue de la colonne sens dépend du nombre d'occurences pour le sens x dans la langue y 
       
echo "<tr><td width=85px; rowspan=$l BGCOLOR=#B5B5B5><b>"$langue"<b></td>">> $tablo;

        #On crée le compteur p pour stocker les pages créées.
        p
=1;

        #Pour chaque lien, on refait une boucle afin de remplir les colonnes Pages Aspirées, Dump Initial, Dump UTF-8, Contextes UTF-8 et Contextes HTML
       
for ligne in `cat $url/$sens/$languetxt`
       
{
           
echo "==========TRAITEMENT : $sens$langue ";
#------- on CURL et on determine l'encodage-------------------
            curl -o
../PAGES-ASPIREES/$sens$langue$p.html $ligne;
            retourcurl
=$? ;

            # Ici on aspire les sites des urls les uns après les autres et on les enregistre dans le dossier "PAGES-ASPIREES"
           
echo "RETOUR CURL : $retourcurl";
           
if [[ $retourcurl == 0 ]]
           
then
           
encodage=$(file -i ../PAGES-ASPIREES/$sens$langue$p.html | cut -d= -f2);
           
echo "ENCODAGE initial : $encodage";

            #------- on continue en tenant compte de l'encodage fourni par la commande curl---------------------
               
if [[ $encodage == "utf-8" ]]
                   
then

                    # Ici on fait un dump du texte (qui permet de récupérer le texte brut des urls) et  on l'enregistre dans le dossier "DUMP-TEXT"
                    lynx
-dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/$sens$langue$p.html  > ../DUMP-TEXT/$sens$langue$p-utf8.txt ;
                   
egrep -i "\b$motif\b" ../DUMP-TEXT/$sens$langue$p-utf8.txt > ../CONTEXTES/$sens$langue$p-utf8.txt ;
                   
perl ../PROGRAMMES/minigrepmultilingue-v2.1/minigrepmultilingue.pl  "UTF-8" ../DUMP-TEXT/$sens$langue$p-utf8.txt ../PROGRAMMES/minigrepmultilingue-v2.1/$sens$langue.txt ;
                   
mv resultat-extraction.html ../CONTEXTES/$sens$langue$p-utf8.html ;

                    #Avec le html,on crée les cellules du tableau permettant de visualiser chaque page créée
                   
echo "<td width=\"85\"><a href=\"$ligne\">lien $j</a></td><td width=\"120\"><a href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page $j</a></td><td align=\"center\" width=\"105\"><FONT COLOR=\"#669999\">&nbsp;-&nbsp;</FONT></td><td align=\"center\" width=\"105\"><a href=\"../DUMP-TEXT/$sens$langue$p-utf8.txt\">dump $j (utf-8)</a></td><td align=\"center\" width=\"120\"><a href=\"../CONTEXTES/$sens$langue$p-utf8.txt\">contexte $j.txt</a></td><td align=\"center\" width=\"120\"><a href=\"../CONTEXTES/$sens$langue$p-utf8.html\">contexte $j.html</a></td></tr>" >> $tablo;
                   
cat ../CONTEXTES/$sens$langue$p-utf8.txt >> ../CONTEXTES/contextes_$sens$langue.txt ;
                   
cat ../DUMP-TEXT/$sens$langue$p-utf8.txt >> ../DUMP-TEXT/dump_$sens$langue.txt;
                   
let "nbdump+=1";

#-----------------------------------------------------
                   
# la page n'est pas en utf-8, on cherche un charset...
#-----------------------------------------------------
               
else
                   
echo "on cherche un charset dans la page aspiree...";
                   
if
                       
egrep -qi "(charset ?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ../PAGES-ASPIREES/$sens$langue$p.html ;
                       
then

#----------------------------------------------
                       
# on a peut-etre trouve un charset.....
                       
#----------------------------------------------
                       
echo "Presence d'un charset...";
                        encodage
=$(egrep -m 1 -o '(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)
(\w)?|(WINDOWS|windows)-1252|(WINDOWS|windows)-1256|((m|M)(a|A)(c|C)(R|r)
(O|o)(M|m)(a|A)(n|N))| us-ascii |US-ASCII | us-ASCII)' ../PAGES-ASPIREES/$sens$langue$p.html | sort -u)
;
                       
echo "charset extrait : $encodage ";
#-------------------------------------------------------------------
                       
# avant de continuer on va vérifier si le charset est connu de iconv
#-------------------------------------------------------------------
                        VERIFENCODAGEDANSICONV
=$(iconv -l | egrep -io $encodage | sort -u);
                       
if [[ $VERIFENCODAGEDANSICONV == "" ]]
                           
then
                           
#-------------------------------------------
                           
# le charset n'est pas connu de iconv : on fait rien....
                           
#-------------------------------------------
                           
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> inconnu par inconv, on ne fait rien"
                           
echo "<td align=\"center\" width=\"85\"><a href=\"$ligne\">lien $j</a></td><td align=\"center\" width=\"120\"><a href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page $j</a></td><td align=\"center\" width=\"105\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"105\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"120\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"120\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td></tr>" >> $tablo;
                       
else
#-------------------------------------------
                           
# le charset extrait est connu de iconv : on lynxe et on dump !!!
#-------------------------------------------
                       
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..."
                        lynx
-dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/$sens$langue$p.html  > ../DUMP-TEXT/$sens$langue$p.txt ;
                       
echo "ENCODAGE final : $encodage (avant conversion vers utf-8)";
                       
iconv -f $encodage -t utf-8 ../DUMP-TEXT/$sens$langue$p.txt > ../DUMP-TEXT/$sens$langue$p-utf8.txt
                       
egrep -i "\b$motif\b" ../DUMP-TEXT/$sens$langue$p-utf8.txt > ../CONTEXTES/$sens$langue$p-utf8.txt ;
                       
perl ../PROGRAMMES/minigrepmultilingue-v2.1/minigrepmultilingue.pl  "UTF-8" ../DUMP-TEXT/$sens$langue$p-utf8.txt ../PROGRAMMES/minigrepmultilingue-v2.1/$sens$langue.txt ;
                       
mv resultat-extraction.html ../CONTEXTES/$sens$langue$p-utf8.html ;
                       
echo "<td align=\"center\" width=\"85\"><a href=\"$ligne\">lien $j</a></td><td align=\"center\" width=\"120\"><a href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page $j</a></td><td align=\"center\" width=\"105\"><FONT COLOR=\"#669999\"><a href=\"../DUMP-TEXT/$sens$langue$p.txt\">dump initial $j</a><br/><small>($encodage)</small></FONT></td><td align=\"center\" width=\"105\"><a href=\"../DUMP-TEXT/$sens$langue$p-utf8.txt\">dump $j (utf-8)</a></td><td align=\"center\" width=\"120\"><a href=\"../CONTEXTES/$sens$langue$p-utf8.txt\">contexte $j.txt</a></td><td align=\"center\" width=\"120\"><a href=\"../CONTEXTES/$sens$langue$p-utf8.html\">contexte $j.html</a></td></tr>" >> $tablo;
                       
cat ../CONTEXTES/$sens$langue$p-utf8.txt >> ../CONTEXTES/contextes_$sens$langue.txt ;
                       
cat ../DUMP-TEXT/$sens$langue$p-utf8.txt >> ../DUMP-TEXT/dump_$sens$langue.txt;
                       
let "nbdump+=1";
                       
fi
               
else
               
echo "Pas de charset detecte : on ne fait rien pour le DUMP... ";
               
echo "<td align=\"center\" width=\"85\"><a href=\"$ligne\">lien $j</a></td><td align=\"center\" width=\"120\"><a href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page $j</a></td><td align=\"center\" width=\"105\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"105\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"120\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"120\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td></tr>" >> $tablo;
           
fi 
           
fi

            # fin du curl OK
           
else
               
echo "<td align=\"center\" width=\"85\"><a href=\"$ligne\">lien n°j</a></td><td align=\"center\" width=\"120\" bgcolor=\"red\">Page non aspiree...</td><td align=\"center\" width=\"105\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"105\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"120\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"120\" bgcolor=\"#669999\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td></tr>" >> $tablo;
           
fi

        # Le p est incrémenté de 1 et p revient à 1 quand la variable "languetxt" change de valeur
               
let "p=p+1";

        #Le j est incrémenté de 1 également
               
let "j=j+1";
       
}
   
}
echo "</table>" >> $tablo;

    #Ces deux sauts de ligne permettent de rendre plus visible la séparation entre les tableaux
echo "<br><br>">>$tablo;
} 

#On referme notre tableau et le script est fin prêt
echo "</body></html>" >> $tablo;