Mercredi 8 février 2012 3 08 /02 /Fév /2012 02:33

Pour pouvoir utiliser le script il faut le placer dans le dossier PROGRAMME
il faut également dans ce dossier programme :
un fichier vide.txt (qui est un fichier texte vide qui permet de réinitialiser des fichiers globaux)
un fichier concordancier.pl et un fichier motif.txt pour pouvoir utiliser le perl
un ficher que j'ai appeler d.txt qui contient trois ligne : l'endroit ou se situent les urls dans l'arboressance, là ou il faut créer le tableau et le motif
pour lancer le script dans le terminal il faut se placer dans PROGRAMME et faire : bash final.sh < d.txt



Ce qui suit est le script (je tiens a préciser que j'ai du réécrire quelques lignes de derniere minutes ayant oublier le fichier final.sh sur un ordinateur a nogent j'ai réécrit les lignes concernant le compteur sans pouvoir les tester)


#!/bin/bash


read REP;
read tablo;
read motif;
echo "<html><head><meta http-equiv=\"Content-Type\" content=\text/html; charset=utf-8\"/><title>tableaux de liens</title></head><body>" > $tablo;
echo "<p align=\"center\"><hr color=\"blue\" width=\"50%\"/></p>" >> $tablo;
#Variable pour compter les tableaux
i=1; 
#création du fichier dump global
mkdir -p ../DUMP-TEXT/DUMP-GLOBAL;

#on ecrase et remplace le contenu de global.txt par "" rien.
cat ./vide.txt > ../DUMP-TEXT/DUMP-GLOBAL/global.txt;
cat ./vide.txt > ../CONTEXTES/global$i.txt;
for fic in `ls $REP` #boucle exterieur (pour les tableaux)
    do
    #on remonte l'arborescence et on crée un dossier par tableau dans le dossier PAGES-ASPIREES
    mkdir -p ../PAGES-ASPIREES/$i;
    mkdir -p ../DUMP-TEXT/$i;
    mkdir -p ../CONTEXTES/$i;

    #entete et titre du tableau
    echo "<table align=\"center\" border=\"1\"><tr><td colspan=\"9\" align=\"center\" bgcolor=\"black\"><font color=\"white\"><b>Tableau n°$i</b></font></td></tr>" >> $tablo;
    echo "<tr><td>numéro</td><td align=\"center\">URL et lien hypertext</td><td align=\"center\">Pages aspirées</td><td align=\"center\">retour curl</td><td align=\"center\">DUMP</td><td align=\"center\">Encodage initial</td><td align=\"center\">DUMP utf-8</td><td align=\"center\">Contextes</td><td align=\"center\">compteur</td></tr>">>$tablo;
   
    # Variable i pour compter les URLs
    j=1;
    total=0;
    for nom in `cat $REP/$fic` # boucle interieur (pour les URLS)
        do

        curl $nom -o "../PAGES-ASPIREES/$i/$j.html";
        retourcurl=$?;
 
        if [ "$retourcurl" -eq 0 ] #si on a reussi a aspirer la page avec curl
            then
            encodage=$(file -i ../PAGES-ASPIREES/$i/$j.html | cut -d= -f2);
            echo         "##################################################";
            echo
            echo                 "fichier/$i/$j.html encodage = $encodage";
            echo
            controlcurl=$(egrep -io "Bad Request|Service Unaviable|404 Not Found|Not Acceptable|The document has moved" ../PAGES-ASPIREES/$i/$j.html);
            if [ "$controlcurl" = "" ] #si la page est valide
            then
                if [ "$encodage" = "utf-8" ] #si c est de l utf8
                    then
                    lynx -dump -nolist $nom > ../DUMP-TEXT/$i/$j.txt;
                    lynx -dump -nolist $nom > ../DUMP-TEXT/$i/$j-utf-8.txt;
                    #il y a bien creation du fichier.txt mais pas/peu de fichier ayant contenu mauvais motif ? commande incorrecte ?
                    egrep -i "\b$motif\b" ../DUMP-TEXT/$i/$j-utf-8.txt > ../CONTEXTES/$i/$j.txt;
                    cpt=??;                       
                    cpt=$(egrep -o -i "\b$motif\b" ../DUMP-TEXT/$j/$i-utf8.txt | wc -l );
                    total=`expr $total + $cpt`
                    #la creation des fichier avec la commande perl se fait bien mais les fichiers cree sont vide.    
                    perl ./concordancier.pl "UTF-8" ../DUMP-TEXT/$i/$j.txt ./motif.txt > ../CONTEXTES/$j-$i.txt;
                    echo "<tr><td align=\"center\" width=\"50\">$j</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$i/$j.html\">$j.html</a></td><td align=\"center\">$retourcurl</td><td align=\"center\"><a href=\"../DUMP-TEXT/$i/$j.txt\">$j.txt</a></td><td align=\"center\">$encodage</td><td align=\"center\"><a href=\"../DUMP-TEXT/$i/$j-utf-8.txt\">$j-utf-8.txt</a></td><td align=\"center\"><a href=\"../CONTEXTES/$i/$j.txt\">Contextes$j</a></td><td align=\"center\">$cpt</td></tr>" >> $tablo;
                    cat ../DUMP-TEXT/$i/$j.txt >> ../DUMP-TEXT/DUMP-GLOBAL/global.txt;
                    cat ../DUMP-TEXT/$i/$j-utf-8.txt >> ../DUMP-TEXT/DUMP-GLOBAL/global$i-utf-8.txt;
                    cat ../CONTEXTES/$i/$j.txt >> ../CONTEXTES/global$i.txt;
                    echo         "##################################################";
                else #si l encodage n est pas en utf8 alors
                    controlencodage=`iconv -l | egrep -io $encodage | sort -u`;
                   
                    echo                 "fichier/$i/$j.html controlencodage = $controlencodage";
                    echo
                    echo         "##################################################";
                    if [ "$controlencodage" != "" ] #si on retrouve un encodage
                        then
                        lynx -dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/$i/$j.html > ../DUMP-TEXT/$i/$j.txt;
                        iconv -f $encodage -t utf-8 ../DUMP-TEXT/$i/$j.txt > ../DUMP-TEXT/$i/$j-utf-8.txt;
                        verifencodage=$(file -i ../DUMP-TEXT/$i/$j-utf-8.txt | cut -d= -f2);
                        #meme chose que precedement. les commandes s effectuent bien mais la plus part des fichier cree sont vide
                        egrep -i "\b$motif\b" ../DUMP-TEXT/$i/$j-utf-8.txt > ../CONTEXTES/$i/$j.txt;
                        cpt=??;
                        cpt=$(egrep -o -i "\b$motif\b" ../DUMP-TEXT/$j/$i-utf8.txt | wc -l );
                        total=`expr $total + $cpt`
                        perl ./concordancier.pl "UTF-8" ../DUMP-TEXT/$i/$j.txt ./motif.txt > ../CONTEXTES/$i-$j.txt;
                        echo
                        echo
                        echo
                        echo
                        echo
                        echo    #verification sur la console.
                        echo    "le nouvel encodage est $verifencodage";
                        echo
                        echo
                        echo
                        echo
                        echo
                        echo
                        echo "<tr><td align=\"center\" width=\"50\">$j</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$i/$j.html\">$j.html</a></td><td align=\"center\">$retourcurl</td><td align=\"center\"><a href=\"../DUMP-TEXT/$i/$j.txt\">$j.txt</a></td><td align=\"center\">$encodage</td><td align=\"center\"><a href=\"../DUMP-TEXT/$i/$j-utf-8.txt\">$j-utf-8.txt</a></td><td align=\"center\"><a href=\"../CONTEXTES/$i/$j.txt\">Contextes$j</a></td><td align=\"center\">$cpt</td></tr>" >> $tablo;
                        cat ../DUMP-TEXT/$i/$j.txt >> ../DUMP-TEXT/DUMP-GLOBAL/global.txt;
                        cat ../DUMP-TEXT/$i/$j-utf-8.txt >> ../DUMP-TEXT/DUMP-GLOBAL/global$i-utf-8.txt;
                        cat ../CONTEXTES/$i/$j.txt >> ../CONTEXTES/global$i.txt;
                    else #si iconv ne reconnais pas alors :
                        echo "<tr><td align=\"center\" width=\"50\">$j</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$i/$j.html\">$j.html</a></td><td align=\"center\">$retourcurl</td><td align=\"center\">-</td><td align=\"center\">encodage non reconnu par iconv</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td></tr>" >> $tablo;           
                    fi #fin de si ca n est pas reconnu
                fi #fin de si c'etait de utf8
            fi #fin de verif si ce n etait pas une page d erreur
        else #si c est pas reconnu par curl alors
            echo "<tr><td align=\"center\" width=\"50\">$j</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$i/$j.html\">$j.html</a></td><td align=\"center\">$retourcurl</td><td align=\"center\">-</td><td align=\"center\">mauvais retour curl</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td></tr>" >> $tablo;   

        fi #fin de si c est pas reconnu par curl
        j=$((j+1));
        done #fin boucle interieur
 
    #vas ecrire une derniere ligne pour le dump global
    echo "<tr><td align=\"center\" colspan=\"4\"></td><td><a href=\"../DUMP-TEXT/DUMP-GLOBAL/global.txt\">global.txt</a></td><td></td><td><a href=\"../DUMP-TEXT/DUMP-GLOBAL/global$i-utf-8.txt\">global$i-utf-8.txt</a></td><td><a href=\"../CONTEXTES/global$i.txt\">contexte$i.txt</a></td><td align=\"center\">total = $total</td></tr>" >> $tablo;
    echo "</table>" >> $tablo; #fin du tableau
    i=$((i+=1));

    done #fin boucle exterieur

echo "<p align=\"center\"><hr color=\"blue\" width=\"50%\"/></p>" >> $tablo;
echo "</body></html>" >> $tablo;

Par ARTHUR BOYER
Ecrire un commentaire - Voir les 0 commentaires
Mercredi 8 février 2012 3 08 /02 /Fév /2012 02:21

 

 

exemple avec wordle

wordlear1

 

 

wordlear2.png

 

 

wordlefr1.png

 

 

wordlefr2.png

wordlefr3.png

 

 

 

exemple avec taxego


taxegoar-afriq

 

 

taxegoar2-main

taxegofr2.png

taxegofr1.png
taxegofr3.png

Par ARTHUR BOYER
Ecrire un commentaire - Voir les 0 commentaires
Mercredi 8 février 2012 3 08 /02 /Fév /2012 00:51

taxegoar-afriq.png

Le travail est fait mais pas le texte...

 

taxegoar2-main.png

 

Par lemotsecours
Ecrire un commentaire - Voir les 0 commentaires
Mardi 7 février 2012 2 07 /02 /Fév /2012 19:18

Grace au script que m'a passé Said (et sur une interface ubuntu) le curl marche. La création de pages aspirées se fait bien et le retour curl est à 0 (donc il s'est bien passé sur les échantillons de sites sur lesquels j'ai testé le programme)

La commande lynx
Pour chaque tableau on crée un fichier dans le répertoire DUMP-TEXT (dans la boucle extérieure)
L'ajout de la ligne

lynx -dump -nolist $nom > ../DUMP-LIST/$i/$j.txt
crée bien un fichier texte dans DUMP-TEXT pour chaque url et contient bien le ce qu'il y a sur les pages web.

capture d'écran1


capture d'écran4

Cette vérification faite je rajoute la colonne dump text.
<td><a href \"../DUMP-TEXT/$i/$j.txt\">$j.txt</a></td>

capture d'écran3
capture-d-ecran2.png

nb : j'ai essayé de faire une lecture automatique des fichiers lire pour les urls et la création du tableau, ça marche mais ça me met redirection ambigue (je laisse pour l'instant mais je risque de changer plus tard)

Je vais essayer de créer tout de suite le dump general.
Au début de mon script je crée un dossier DUMP-GLOBAL, et dans la boucle interieure je crée un fichier global.txt qui vas se remplir sans écraser (cat avec les doubles chevron >>) avec le contenu des fichier.txt ($j) de chaque tableau ($i).
à la fin de chaque tableaux (donc avant la fin de la boucle extérieure) je vais rajouter une ligne (<tr></tr>) contant ce dump. Ce que j'ai fais pour réussir c'est que j'ai crée une case vide allan jusqu'à la 4ème case (colspan=\"4\") pour que la case du dump soit juste en dessous de la colonne correspondante (la 5ème).
Problème le fichier global.txt se rempli de plus en plus selon le nombre de fois que le programme est lancé. Il suffit de mettre cette ligne avant la boucle extérieure pour réinitialiser le fichier.
cat "" > ../DUMP-TEXT/ DUMP-GLOBAL/global.txt
avec le chevron simple on écrase tout ce qu'il y avait avant dans le fichier.txt pour le remplacer par "" rien.

capture d'écran7dumpglob

 

capture d'écran8dumpglob

NB : J'ai corrigé cette partie pour le faire avec un  fichier vide (cat vide.txt >../DUMP-TEXT/ DUMP-GLOBAL/global.txt;) ça marche mieux comme ça.

exemple (surprenant de wordle avec le dumpgeneral)
Sans titre

________________________________________________________________

Il faut maintenant écrire les lignes vérifiant si les pages sont au format utf8 et si ce n'est pas le cas essayer les convertir.

Un espace de trop et c'est foutu, après trois heures a recherché une erreur d'écriture j'ai fait de la mise en page et je me suis aperçut d'un espace de trop entre un argument et un chemin, en le retirant mon script marche et réussi à détécter l'encodage !

Faux >>    encodage=$(file -i  ../PAGES-INSPIREES/$i/$j.html | cut -d= -f2);
Correct>> encodage=$(file -i ../PAGES-INSPIREES/$i/$j.html | cut -d= -f2);

subtil n'est ce pas ?

capture d'écran9encodage

 

Une fois l'encodage détecter j'essai de faire une condition pour ne sélectionner que les fichiers au format utf-8 dans le DUMP (en faisant les conditions une à une j'ai moins de change de me tromper)

if [ "$encodage" = "utf-8" ]
    then
    lynx -dump -nolist $nom > ../DUMP-TEXT/$i/$j.txt;
fi

ça marche le dump global est reduit et le dump des fichiers non utf-8 n'existent plus. Je vais changer le nom du fichier txt crée pour la nouvelle colonne DUMP utf-8 et conserver le lynx pour le dump de tous les fichiers (colonne DUMP).
Et je rajoute tout de suite (de la meme manière que pour le dump global.txt) le dump global-utf-8.txt

je fais ainsi quatre conditions
1) le retour curl est bon, on continu sinon on s'arrete
2) on verifi si le lien est valide sinon on s'arrete
3) si c'est de l'utf8 pas besoin de convertir juste de réécrire sinon ça n'est pas de l'utf-8 on controle l'encodage avec iconv
4) si c'est reconnu par iconv on converti sinon on s'arrete


Après quelques heures passé a essayer de faire la conversion d'encodage (problème de chemin relatif) j'ai presque réussi : iconv réussi à reconnaitre et à convertir de iso latin 1 mais pas de l'us-ascii (ce qui n'est pas très grave vu que l'ascii fait partie de utf8 aux meme position)

pour aller plus vite je tests le script sur un petit échantillon (3 urls par tableau)
capture d'écran10utf8

capture d'écran11if

capture d'écran12if

Pour extraire le contexte j'ai utilisé la commande egrep avec l'option -i pour ignorer la casse.

egrep -i "\b$motif\b" ../DUMP-TEXT/$i/$j-utf-8.txt > ../CONTEXTES/$i/$j.txt;
Je commence ma ligne par egrep, l'option puis l'expression régulière à rechercher (ici le motif) le fichier à analyser puis une redirection de flux pour ranger le résultat dans un fichier.txt


(ça ne marche pas du premier coup)
capture21


exemple de wordle a ce moment la : on peux voir que ça n'a pas tout converti en utf-8
Sans titre3
après quelques modifications du script c'est toujours pas ça
Sans titre4


mais après quelque autres modification du script ça marche mieux
art1
script2-copie-1

wordlear1

j'ai rajouté cette extraction de contexte dans les cas ou 1) c'était en utf 8 et ou 2) c'était convertible en utf 8.

Le résultat n'est pas très saillant. Dans la plupart des fichiers de contexte crée il n'y a rien. J'obtiens néanmoins un fichier de contexte global par tableau qui me permet de commencer à faire les nuages de mots. (toujours avec un cat et une redirection sans écrasement à la fin condition et un effacement du contenu précédent en début de script avec un cat dossiervide.txt > lefichierglobal.txt )

j'ai maintenant des problèmes de présentation sur deux tableaux de 3 urls pas de problème, sur un seul tableau d'une 50ène d'urls pas de problème, sur deux tableaux de 50 urls il se met à sauter des urls !! j'ai regarder dans le terminal ces urls retiré et ce ne sont que des fichiers qui devaient etre converti en utf-8. Après quelques heures passé a regarder les scripts des autres, essayer differentes façons d'ecrire la boucle je n'ai pas réussi à résoudre ce problème d'affichage (oui c'est bien un problème d'affichage les fichiers ont bien été crée)


(ici les ligne 16, 26 & 30 sont absente par exemple)
art3

étant donné que je traité l'arabe j'ai voulu etre plus précis en créant un filtrage avec le minigrep malheureusement l'installation n'a pas marché.
Le make & make test marchait pourtant mais le make install n'a pas fonctioné.
J'ai réussi a faire ma commande perl avec un concordandier.pl trouvé sur le meme site de plurital. Malheureusement ça me crée que des fichiers vide, je ne sais pas si ça a avoir avec le fait que l'installation n'ai pas fonctionné.

art2


Pour compter le nombre d'occurrence il suffit de réécrire la ligne de egrep et de ranger le résultat dans une variable (ici je l'ai appelé cpt) que l'on vas ressortir dans la dernière colonne du tableau.

Pour faire le total du nombre d'occurrence il faut crée une variable total=0; dans la boucle extérieure comme ça, ça se remet à zéro pour chaque tableau. Puis après chaque compteur on en profite pour faire l'addition des occurrences
total=`expr $total + $cpt`;
expr permet de faire la somme arithmetique de deux arguments ARG1 + ARG2

voila la forme finale du tableau :

final

Par ARTHUR BOYER
Ecrire un commentaire - Voir les 0 commentaires
Mardi 7 février 2012 2 07 /02 /Fév /2012 02:11

     Oups, nous sommes en retard...


     Nous avons décidé ce matin lundi travailler ensemble à Nogent et à la maison jusqu'au demain matin de pour terminer notre devoir. Nous avons modifié le grand script pour qu'il ne génère plus qu'un seul tableau général, avec des colonnes supplémentaires : une colonne de contextes pour le texte brut, une colonne contextes html pour le texte html, et un colonne du compteur pour nombre d'occurrences. Le script doit savoir quel motif chercher dans les dumps en fonction

de la langue, qu'il récupère grâce au nom des dossiers, et qu'il récupère grâce au nom des fichiers d'URL. Le script doit créer un fichier de concaténation des dumps et des contextes par langue, un fichier regroupant toutes les concaténations pour chaque langue, et un fichier général .

      La commande egrep est chargée de récupérer l'encodage des pages aspirées. Cet encodage est transmis à Lynx via l'option --display_charset pour qu'il ne modifi pas l'encodage des fichiers dumps (étant donné qu'on a constaté que l'option --display_charset=UTF-8 ne réencodait pas les fichiers dumps en UTF-8) .


     Enfin grâce à Monsieur Fleury, nous avons pu aussi résoudre d'un certain nombre de problèmes durant la réalisation du projet

Voici le script et le tableau

 

 

 

 

 

script1-copie-1.png

 

script2.png

 

script3.png

 

script4.png

Par lemotsecours
Ecrire un commentaire - Voir les 0 commentaires

Créer un Blog

Recherche

Calendrier

Mai 2012
L M M J V S D
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
<< < > >>

Liens

Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus