mercredi 24 novembre 2010

A la recherche de l'utf-8

le script présenté ci-dessous permet de trouver le charset d'origine de chaque url.. Une fois l'encodage trouvé, s'il n'est pas en utf-8 nous devons tout d'abord le changer afin que toutes les urls soient en utf-8 grâce à la commande inconv. Et une fois le problème d'encodage réglé nous pouvons dumper les pages aspirées :

#!/bin/bash
echo "Donnez le nom du dossier contenant les fichiers de liens http : ";
read dossier;
echo "Donnez le nom du fichier html où stocker ces liens dans des tableaux : ";
read tablo;


echo "<html><head><title>tableau de liens</title></head><body>" >> $tablo;

i=1;


for fichier in `ls $dossier`
{
    echo "<table border=1>" >> $tablo;
   
    echo "<tr><td align="center" bgcolor=\"silver\" colspan=\"7\"><b>Fichier $fichier</b></td></tr>" >> $tablo;
    echo "<tr><td>Numéros</td><td>URLs</td><td>Pages aspirées</td><td>Dump initial</td><td>Dump utf-8</td><td>Contextes utf-8</td><td>Contextes html</td>" >> $tablo;   
   
   

   
   
    for nom in `cat $dossier/$fichier`
    {
    wget -O ../PAGES-ASPIREES/$i.html $nom
    retourwget=$? ;
        echo "RETOUR WGET : $retourwget";
        if [[ $retourwget == 0 ]]
        then
            encodage=$(file -i ../PAGES-ASPIREES/$i.html);
            echo "ENCODAGE initial : $encodage";
       
            if [[ $encodage == "utf-8" ]]
            then
               lynx -dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/$i.html  > ../DUMP-TXT/$i-utf8.txt ;
            else
               echo "on cherche un charset dans la page aspiree...";
               if egrep -qi "(charset ?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ../PAGES-ASPIREES/$i.html ;
                  then
                      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)' ../PAGES-ASPIREES/$i.html | sort -u) ;
                      echo "charset extrait : $encodage ";
           
                      VERIFENCODAGEDANSICONV=$(iconv -l | egrep -io $encodage | sort -u);
                      if [[ $VERIFENCODAGEDANSICONV == "" ]]
                        then
                            echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> inconnu par inconv, on ne fait rien"
                            echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">lien n°$i</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$i.html\">$i.html</a></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td></tr>" >> $tablo;
                        else
                            echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..."
                            lynx -dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/$i.html  > ../DUMP-TXT/$i.txt ;
           
                            echo "ENCODAGE final : $encodage (avant conversion vers utf-8)";
                            iconv -f $encodage -t utf-8 ../DUMP-TXT/$i.txt > ../DUMP-TXT/$i-utf8.txt
                            echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">lien n°$i</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$i.html\">$i.html</a></td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$i.txt\">$i.txt</a><br/><small>($encodage)</small></td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$i-utf8.html\">$i-utf8.html</a></td></tr>" >> $tablo;
                        fi
       
                   else
                      echo "Pas de charset detecte : on ne fait rien pour le DUMP... ";
                      echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">lien n°$i</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$i.html\">$i.html</a></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td></tr>" >> $tablo;
                   fi 
            fi
        else
           echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">lien n°$i</a></td><td align=\"center\" width=\"100\" bgcolor=\"red\">Page non aspiree...</td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td><td align=\"center\" width=\"100\" bgcolor=\"aqua\"><small>Encodage<br/>non d&eacute;tect&eacute;</small></td></tr>" >> $tablo;
        fi
    let "i+=1";
   
    }
   

    let "i+=1";
    let "j+=1";
}

    echo "</table>" >> $tablo;
    echo "<br>" >> $tablo;


echo "</body></html>" >> $tablo;


Problème!!!!!!!!!!! 

Certaines pages dont l'encodage n'est soit disant pas détecté ne sont pas dumpées.. Or lorsqu'on regarde le code source des pages html, on retrouve différents charset : utf-8; ISO 8859-* qui ne sont pas pris en compte par notre script....  WHYYYYYYYYYYYYYYYYYYYYYY????????

mercredi 17 novembre 2010

Création du Tableau à 4 colonnes ( version automatique )

La semaine dernière nous vous faisions part de notre difficulté à aspirer les pages et à "dumper" sans écraser les fichiers.. Nous nous sommes simplifié la tâche en supprimant les sous-dossiers dans URLS..

voici donc le script du tableau à 4 colonnes :

#!/bin/bash
echo "Donnez le nom du dossier contenant les fichiers de liens http : ";
read dossier;
echo "Donnez le nom du fichier html où stocker ces liens dans des tableaux : ";
read tablo;

echo "<html><head><title>tableau de liens</title></head><body>" > $tablo;

i=1
for fichier in `ls $dossier`
{
    echo "<table border=1>" >> $tablo;
   
    echo "<tr><td align="center" bgcolor=\"silver\" colspan=\"4\"><b>Fichier $fichier</b></td></tr>" >> $tablo;
    echo "<tr><td>Numéros</td><td>URLs</td><td>Pages aspirées</td><td>Dump initial</td>" >> $tablo;   
    for nom in `cat $dossier/$fichier`
    {
    wget -O ../PAGES-ASPIREES/$i.html $nom
   
    lynx -dump $nom > ../DUMP-TEXT/$i.txt
   
   
    echo "<tr><td>$i</td><td><a href=\"$nom\">$nom</a></td><td><a href=\"../PAGES-ASPIREES/$i.html\">Page n°$i</a></td><td><a href=\"../DUMP-TEXT/$i.txt\">Dump initial n°$i</a></td></tr>" >> $tablo;
    let "i+=1" ;
    }

    echo "</table>" >> $tablo;
    echo "<br>" >> $tablo;

}
echo "</body></html>" >> $tablo;


Prochaine étape : trouver l'encodage des pages en hébreu, en espagnol, et en français...

mercredi 10 novembre 2010

Une Première petite victoire

Après avoir créer nos différentes arborescences..nous avons voulu écrire un script où chaque fichier serait installé à sa place.. : 



Là le script ci dessous va aspirer et  prendre  le contenu textuel du mot parole en espagnol pour chaque lien :

#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom de fichier html où stocker ces liens : ";
read tablo;
echo $tablo ;
echo "<html><head><title>tableau de liens</title></head><body><table border=1>" > $tablo;

echo "<tr><td>Numéros</td><td>URLs</td><td>Pages aspirées</td><td>Dump encodage original</td>" >> $tablo;
i=1
for nom in `cat $fic`
{
sens= "echo $nom |cut -d\- -f1" ;
langue= "basename "$nom" |cut -d\- -f2";

wget -O ../PAGES-ASPIREES/Pparole-es/$i.html $nom
lynx -dump $nom > ../DUMP-TEXT/Dorigparole-es/$i.txt

echo "<tr><td>$i</td><td><a href=\"$nom\">lien $i</a></td><td><a href=\"../PAGES-ASPIREES/Pparole-es/$i.html\">$i.html</a></td><td><a href=\"../DUMP-TEXT/Dorigparole-es/$i.txt\">$i.txt</a></td></tr>" >> $tablo;
let "i+=1" ;
}
echo "</table></body></html>" >> $tablo;

Il a fallu nous placer dans le bon dossier... Bon ok.. tout n'est pas automatique.. mais nous progressons :)



Solution provisoire pour la création de sous dossiers

Nous avons créé une arborescence de sous dossiers dans DUMP-TEXT et dans PAGES-ASPIREES.grâce à la commande mkdir comme nous l'avions appris au début du semestre :

Pour l'arborescence du dossier PAGES-ASPIREES :

#!/bin/bash
# avant de lancer ce script on se place dans le repertoire du projet

# cd /cygdrive/d/MASTER-TAL/PROJET\ PAROLE
# on peut desormais creer l'arborescence de travail
mkdir PAGES-ASPIREES/Pparole-es;
mkdir PAGES-ASPIREES/Pparole-heb;
mkdir PAGES-ASPIREES/Pparole-fr;
mkdir PAGES-ASPIREES/Ptenirsaparole-es;
mkdir PAGES-ASPIREES/Ptenirsaparole-heb;
mkdir PAGES-ASPIREES/Ptenirsaparole-fr;
mkdir PAGES-ASPIREES/Pdonnersaparole-esp;
mkdir PAGES-ASPIREES/Pdonnersaparole-heb;
mkdir PAGES-ASPIREES/Pdonnersaparole-fr;

# le dossier URLS contiendra les pages aspirées des fichiers



Pour l'arborescence du dossier DUMP-TEXT :

!/bin/bash
# avant de lancer ce script on se place dans le repertoire du projet

# cd /cygdrive/d/MASTER-TAL/PROJET\ PAROLE
 # on peut desormais creer l'arborescence de travail du DUMP avec l'encodage d'origine
mkdir DUMP-TEXT/Dorigparole-es;
mkdir DUMP-TEXT/Dorigparole-heb;
mkdir DUMP-TEXT/Dorigparole-fr;
mkdir DUMP-TEXT/Dorigtenirsaparole-es;
mkdir DUMP-TEXT/Dorigtenirsaparole-heb;
mkdir DUMP-TEXT/Dorigtenirsaparole-fr;
mkdir DUMP-TEXT/Dorigdonnersaparole-esp;
mkdir DUMP-TEXT/Dorigdonnersaparole-heb;
mkdir DUMP-TEXT/Dorigdonnersaparole-fr;

# le dossier Dorig... contiendra les fichiers avec leur contenu textuel



Malgré cette création automatique de sous dossiers, nous espérons que les fichiers se placeront correctement dans leur dossier correspondant et donc empêcher un écrasement de tous les fichiers..

Mais essayons d'écrire un script qui ne nous écrase pas nos fichiers... Au boulot..

Créer des sous dossiers

Dès qu'on solutionne un problème, un autre arrive .. Eh oui on aimerait organiser les fichiers "pages aspirées" et les fichiers "dump" dans des sous-dossiers séparant chaque sens de chaque langue... Rachid Belmouhoub nous a donné un début de piste :

sens= "echo $nom |cut -d\- -f1" ;
langue= "basename "$nom" |cut -d\- -f2";


A nous de trouver comment les créer et les organiser...

Tableau à 4 colonnes

Maintenant nous voulons un tableau avec 4 colonnes : la numérotation / les urls / les pages Aspirées/ Dump (contenu textuel ) :

#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom de fichier html où stocker ces liens : ";
read tablo;
echo $tablo ;
echo "<html><head><title>tableau de liens</title></head><body><table border=1>" > $tablo;

echo "<tr><td>Numéros</td><td>URLs</td><td>Pages aspirées</td><td>Dump encodage original</td>" >> $tablo;
i=1
for nom in `cat $fic`
{

wget -O ../PAGES-ASPIREES/$i.html $nom
lynx -dump $nom > ../DUMP-TEXT/$i.txt
echo "<tr><td>$i</td><td><a href=\"$nom\">lien $i</a></td><td><a href=\"../PAGES-ASPIREES/$i.html\">$i.html</a></td><td><a href=\"../DUMP-TEXT/$i.txt\">$i.txt</a></td></tr>" >> $tablo;
let "i+=1" ;
}
echo "</table></body></html>" >> $tablo;




En parcourant les autres blogs et notamment un,nous avons pu améliorer le  tableau en faisant une en-tête pour chaque colonne :

echo "<tr><td>Numéros</td><td>URLs</td><td>Pages aspirées</td><td>Dump encodage original</td>" >> $tablo;

Un Grand Merci à ce groupe... 

La commande basename

la commande basename permet d'extraire le nom d'un fichier sans son extension : 

"basename "$nom" 

mercredi 3 novembre 2010

Difficulté rencontrée

Un problème est survenu quand nous avons voulu créer un fichier contenant tous les tableaux créés.. En effet, un certain nombre de liens de pages aspirées se répètent dans chaque tableau annulant les autres..

Nous savons qu'il faut utiliser la commande basename mais comment ???

Nos cerveaux sont en ébullition pour trouver la solution..
 

Création du tableau à 3 colonnes

Maintenant il nous faut créer une nouvelle colonne qui permettra de regrouper les différentes pages aspirées..

Pour aspirer le contenu de chaque url ( c'est-à-dire stocker localement le contenu de chaque lien ) on utilisera la commande wget -O et nous les insérerons dans une nouvelle colonne : 

#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom de fichier html où stocker ces liens : ";
read tablo;
echo $tablo ;
echo "<html><head><title>tableau de liens</title></head><body><table border=1>" > $tablo;
i=1
for nom in `cat $fic`
{
wget -O ../PAGES-ASPIREES/$i.html $nom
echo "<tr><td>$i</td><td><a href=\"$nom\">$nom</a></td><td><a href=\"../PAGES-ASPIREES/$i.html\">$i.html</a></td></tr>" >> $tablo;
let "i+=1" ;
}
echo "</table></body></html>" >> $tablo;

Réponse suite à notre recherche

La semaine dernière nous cherchions à créer une colonne avec une numérotation automatique des lignes suivant le nombre d'urls, voici la réponse :

#!/bin/bash
echo "Donnez le nom du fichier contenant les liens http : ";
read fic;
echo "Donnez le nom du fichier html où stocker ces liens : ";
read tablo;
echo "<html><head><title>tableau de liens</title></head><body><table border=\"1\">" > $tablo;
i=1;
for nom in `cat $fic`
{
echo "<tr><td>"$i"</td><td><a href=\"$nom\">$nom</a></td></tr>" >> $tablo;
let "i+=1";
}

echo "</table></body></html>" >> $tablo;