Mardi 8 décembre 2009 2 08 /12 /Déc /2009 18:28
Oups, et une note en retard, une !
Nous avons finalement décidé de modifier le script pour qu'il ne génère plus qu'un seul tableau général, qui séparerait chaque langue, et chaque sens dans chaque langue. Du coup, il a fallu se triturer les méninges, et la solution qui nous a paru la plus simple a été d'utiliser le nom des dossiers de langues et des fichiers d'URLs, pour les intégrer dans des boucles IF.
Ainsi, le script sait quel motif chercher dans les dumps en fonction 1/ de la langue (qu'il récupère grâce au nom des dossiers) et 2/ du sens étudié (qu'il récupère grâce au nom des fichiers d'URLs). Du coup, plus besoin de faire 36 000 runs et plusieurs tableaux, le script nous fait du tout en un maintenant !
Grâce à monsieur Fleury, nous avons pu aussi résoudre le souci du sed qui remplaçait une forme donnée par la totalité de l'expression régulière utilisée dans la commande. Ouf !
Et puis le moment de la concaténation des fichiers dump.txt et contextes.txt est venu ! Ce qui nous a donné beaucoup de fil à retordre (où placer ces fichus $cat dans la boucle pour que le résultat soit celui attendu ?! ><), mais nous avons réussi ! Et pour ne pas simplifier les choses, nous avons décidé que le script devrait créer un fichier de concaténation des dumps et des contextes par sens et par langue, un fichier regroupant toutes les concaténations pour chaque langue, et un fichier général ! On ne sait pas encore si tous les fichiers nous serviront, mais au moins, ils sont là !

C'est tout, pour le moment !

Ah non, j'ai failli oublier deux choses :
- pour la joliesse de la chose, nous avons également utilisé la boucle IF qui attribue les motifs en fonction du sens et de la langue pour qu'elle y associe une définition (une par sens, la même pour toutes les langues, en fait), qui sera présente en entête des fichiers de contextes générés en HTML ;
- il a fallu également résoudre les vilains problèmes d'encodage... prise de tête prise de tête... étant donné que nous n'avions pas remarqué qu'il existait un magnifique script perl qui pouvait faire tout ça, nous avons cherché une solution "maison", qui fait un peu bricolage certes, mais qui fonctionne très bien ! En gros, une 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 réencode pas les 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) ; puis le programme iconv se charge d'interpréter les octets des dumps (en précisant au programme l'encodage source), et de les réencoder en UTF-8. Et ça fonctionne ! Seul souci : les pages HTML écrites par des souillons, qui n'ont aucun encodage de déclaré. Après une fastidieuse vérification manuelle, nous nous sommes rendu compte qu'à l'exception d'une page, toutes les autres étaient en fait des pages encodées en Latin1. Donc il a fallu ajouter un "comportement par défaut" à adopter si jamais aucun encodage n'est trouvé dans les pages aspirées : dans ce cas-là, le script considère que l'encodage des pages est Latin1 !

C'est tout pour de vrai !

---

#!/bin/bash

# On se place initialement dans le répertoire PROGRAMMES : /cygdrive/D/MASTER-TAL/Axel.Marjorie.Kun/PROGRAMMES
# Redirection d'un fichier run_*.txt : $ sh tab-liens3.sh < run_*.txt
# Le fichier run contient des données que l'on stocke dans plusieurs variables => le chemin du dossier contenant les URLs, le chemin du tableau à créer, le fichier contenant les définitions

read dossierurls;
# Si la commande read a fonctionné...
echo "Répertoire URLs lu"
read tablo;
# Si la commande read a fonctionné...
echo "Tableau créé";
read definition;
# Si la commande read a fonctionné...
echo "Définitions apprises !";
# On crée l'entête, le début du corps et du tableau de la future page html que l'on redirige vers la variable $tablo
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" >

<head>
    <title>Tableau des liens</title>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
       
    <style type=\"text/css\"> /* On crée une feuille de style CSS, ce sera plus facile pour la configuration du tableau */
            body /* !!! background-color ne fonctionne pas, aucune idée pourquoi -> déclarer cet attribut dans la balise body */
            {
                background: #FFCC99;
                width: 100%;
            }
       
            a:link /* Attributs des liens */
            {
                color: black;
                text-decoration: none;
            }
           
            a:visited /* Attributs des liens visités */
            {
                color: black;
                text-decoration: none;
            }
           
            a:hover /* Attributs des liens survolés */
            {
                color: red;
                text-decoration: none;
            }
       
            h1 /* Attributs des titres en balise h1 */
            {
                color: black;
                font-family: Calibri, arial, sans-serif;
                font-size: 3em;
                font-weight: bold;
                font-style: italic;
                line-height: 50pt;
                text-align: center;
            }
       
            table /* Le tableau en lui-même */
            {
                margin: auto;
                border:7px solid black;
                border-collapse:collapse;
                width: 80%;
            }

            th /* Les cellules d'en-tête */
            {
                background-color:#663300;
                border:7px solid black;
                color:white;
                font-size:1em;
                padding: 10px;
                font-family:Calibri, \"Arial Black\", Times, \"Times New Roman\", serif;
            }

            td /* Les cellules normales */
            {
                border:1.5px solid black;
                border-right:7px solid black;
                border-left:7px solid black;
                background-color:#CC6600;
                font-family: \"Arial\", \"Trebuchet MS\", Times, \"Times New Roman\", serif;
                text-align:center;
                padding: 5px;
                word-break: break-all;
            }
    </style> <!-- Fin de la feuille de style CSS -->
</head>" > $tablo;
echo "<body>
        <h1>Voici le tableau des liens</h1>" >> $tablo;
       
# Préparation des fichiers et dossiers pour les nuages => suppression des fichiers textes destinés aux nuages, s'il y en a (pour éviter que le script ne concatène à l'infini)
    rm -f -r ../NUAGES/

# Démarrage d'une numérotation qui compte chaque ligne dans chaque fichier d'URLs pour faciliter le nommage des URLs aspirées (colonne2) dans le tableau
i=1
# Pour chaque fichier présent dans le dossier courant (pour nous, c'est un répertoire par langue)
# On crée un tableau en html dont la mise en page a été définie dans la feuille de style au dessus

for dossierlangue in `ls $dossierurls`
{
    echo "
    <table>
    <thead>
        <tr>
            <th colspan=\"5\">$dossierlangue</th> <!-- Regroupement des différentes colonnes (5 au total) par langue -->
        </tr>
    </thead>" >> $tablo;


# On crée une arborescence des dossiers organisée par langue
# L'option -p permet que mkdir ne considère pas qu'il y a une erreur si les dossiers existent déjà

    mkdir -p ../PAGES-ASPIREES/$dossierlangue/ ;
    mkdir -p ../DUMP-TEXT/$dossierlangue/ ;
    mkdir -p ../CONTEXTES/$dossierlangue/ ;
   
    for fichiersens in `ls $dossierurls/$dossierlangue`
    {
# Démarrage d'une numérotation qui compte chaque ligne dans chaque fichier d'URLs pour faciliter le nommage des URLs (colonne1)  dans le tableau
        y=1
       
    mkdir -p ../DUMP-TEXT/$dossierlangue/$fichiersens/ ;
    mkdir -p ../CONTEXTES/$dossierlangue/$fichiersens/ ;
    mkdir -p ../CONTEXTES/$dossierlangue/$fichiersens/txt/ ;
# Puisque nous voulons afficher le motif proprement, on crée une page html ; nous avons besoin de garder le fichier en texte brut pour la création des nuages
    mkdir -p ../CONTEXTES/$dossierlangue/$fichiersens/html/ ;
   
# On crée les différentes colonnes
        echo "
        <thead>
            <tr>
                <th width=\"35%\">Fichier $fichiersens</th> <!-- Colonne pour les URLs -->
                <th>Pages aspirées</th> <!-- On rajoute une colonne pour les pages aspirées -->
                <th>Texte aspiré (UTF-8)</th> <!-- On rajoute une colonne pour les contenus textuels -->
                <th>Contextes .txt (UTF-8)</th> <!-- On rajoute une colonne pour les contextes (texte brut) -->
                <th>Contextes .html</th> <!-- On rajoute une colonne pour les contextes (version HTML) -->
            </tr>
        </thead>" >> $tablo;


        for url in `cat $dossierurls/$dossierlangue/$fichiersens`
        {
       
# Création des dossiers pour stocker les fichiers texte servant aux nuages
        mkdir -p ../NUAGES/
        mkdir -p ../NUAGES/$dossierlangue/
        mkdir -p ../NUAGES/$dossierlangue/$fichiersens/
       
# On aspire le contenu des URLs de chaque fichier, puis on les stocke dans le répertoire PAGES ASPIREES et on les nomme grâce à la numérotation i
    wget -O ../PAGES-ASPIREES/$dossierlangue/$i.html $url
# On tente d'extraire l'encodage de la page aspirée grâce à la commande egrep
# Si la page a bien été aspirée et qu'un encodage a été trouvé, on copie celui-ci dans la variable $encodage
# Si la page n'a pas été aspirée ou que l'encodage n'a pas été trouvé, on inscrit un encodage par défaut (ISO-8859-1, car c'est l'encodage le plus fréquent dans nos pages - vérifié) dans cette même variable

            if egrep -qi "(charset ?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ../PAGES-ASPIREES/$dossierlangue/$i.html ;
            then
                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|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' ../PAGES-ASPIREES/$dossierlangue/$i.html | sort -u) ;
            else
                encodage=$(echo ISO-8859-1);
            fi
           
# On récupère le texte de chaque page aspirée, on le convertit depuis son encodage d'origine en UTF-8, puis on le stocke dans le répertoire DUMP-TEXT et on le nomme grâce à la numérotation i
            lynx -dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/$dossierlangue/$i.html | iconv -f $encodage -t UTF-8 -c > ../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt
# Nuages : concaténation des fichiers DUMP dans le fichier texte réunissant dumps + contextes par langue et par sens
            cat ../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt >> ../NUAGES/$dossierlangue/$fichiersens/nuages$fichiersens.txt
           
# On sélectionne les motifs à chercher en fonction de la langue (exprimée dans la variable $dossierlangue) et en fonction du sens qui est étudié ; on stocke ce motif dans la variable $motif
# On associe à ce sens une définition, stockée dans la variable $def.

        # Pour les pages en chinois
            if [ $dossierlangue = "Chinois" ];
            then
                # Sens 1 (direction)
                if [[ "$fichiersens" == *1* ]];
                then
                    def=$(head -n1 $definition | tail -1)
                    motif="方向"
                # Sens 2 (signification)
                elif [[ "$fichiersens" == *2* ]];
                then
                    def=$(head -n2 $definition | tail -1)
                    motif="意思"
                # Sens 3 (capacité physique)
                elif [[ "$fichiersens" == *3* ]];
                then
                    def=$(head -n3 $definition | tail -1)
                    motif="感觉"
                # Sens 4 (capacité intellectuelle)
                elif [[ "$fichiersens" == *4* ]];
                then
                    def=$(head -n4 $definition | tail -1)
                    motif="意识"
                fi           
        # Pour les pages en allemand
            elif [ $dossierlangue = "Allemand" ];
            then
                # Sens 1
                if [[ "$fichiersens" == *1* ]];
                then
                    def=$(head -n1 $definition | tail -1)
                    motif="Richtung"
                # Sens 2
                elif [[ "$fichiersens" == *2* ]];
                then
                    def=$(head -n2 $definition | tail -1)
                    motif="(Bedeutung|Sinngehalt)"
                # Sens 3
                elif [[ "$fichiersens" == *3* ]]; 
                then
                    def=$(head -n3 $definition | tail -1)
                    motif="(Sinne?|Gef(ü|u)hl)"
                # Sens 4
                elif [[ "$fichiersens" == *4* ]];
                then
                    def=$(head -n4 $definition | tail -1)
                    motif="(Sinne?|Gesp(ü|u)r|Verst(a|ä)nd|Empfinden|Gef(ü|u)hl)"
                fi
        # Pour les pages en anglais
            elif [ $dossierlangue = "Anglais" ];
            then
                # Sens 1
                if [[ "$fichiersens" == *1* ]];
                then
                    def=$(head -n1 $definition | tail -1)
                    motif="(directions?(\b)|(\b)(\w)+-ways?(\b)|(\b)ways?(\b))"
                # Sens 2
                elif [[ "$fichiersens" == *2* ]];
                then
                    def=$(head -n2 $definition | tail -1)
                    motif="(meanings?|significations?|senses?(\b))"
                # Sens 3
                elif [[ "$fichiersens" == *3* ]]; 
                then
                    def=$(head -n3 $definition | tail -1)
                    motif="senses?(\b)"
                # Sens 4
                elif [[ "$fichiersens" == *4* ]];
                then
                    def=$(head -n4 $definition | tail -1)
                    motif="senses?(\b)"
                fi
        # Pour les pages en espagnol
            elif [ $dossierlangue = "Espagnol" ];
            then
                motif="(\b)sentidos?"
                # Sens 1
                if [[ "$fichiersens" == *1* ]];
                then
                    def=$(head -n1 $definition | tail -1)
                # Sens 2
                elif [[ "$fichiersens" == *2* ]];
                then
                    def=$(head -n2 $definition | tail -1)
                # Sens 3
                elif [[ "$fichiersens" == *3* ]]; 
                then
                    def=$(head -n3 $definition | tail -1)
                # Sens 4
                elif [[ "$fichiersens" == *4* ]];
                then
                    def=$(head -n4 $definition | tail -1)
                fi
        # Pour les pages en français
            elif [ $dossierlangue = "Francais" ];
            then
                motif="(\b)sens(\b)"
                if [[ "$fichiersens" == *1* ]];
                then
                    def=$(head -n1 $definition | tail -1)
                elif [[ "$fichiersens" == *2* ]];
                then
                    def=$(head -n2 $definition | tail -1)
                elif [[ "$fichiersens" == *3* ]]; 
                then
                    def=$(head -n3 $definition | tail -1)
                elif [[ "$fichiersens" == *4* ]];
                then
                    def=$(head -n4 $definition | tail -1)
                fi
        # Pour les pages en portugais
            elif [ $dossierlangue = "Portugais" ];
            then
                # Sens 1
                if [[ "$fichiersens" == *1* ]];
                then
                    def=$(head -n1 $definition | tail -1)
                    motif="(\b)sentidos?"
                # Sens 2
                elif [[ "$fichiersens" == *2* ]];
                then
                    def=$(head -n2 $definition | tail -1)
                    motif="(\b)sentidos?"
                # Sens 3
                elif [[ "$fichiersens" == *3* ]];
                then
                    def=$(head -n3 $definition | tail -1)
                    motif="(\b)sentidos?"
                # Sens 4
                elif [[ "$fichiersens" == *4* ]];
                then
                    def=$(head -n4 $definition | tail -1)
                    motif="(\b)sensos?"
                fi
            fi

           
           
# On commence à créer le fichier contextehtml$i.html, qui affichera (joliment !) les contextes
# L'encodage est UTF-8, ce qui ne posera pas de problème de compatiblité puisque le dump a été converti en UTF-8

            echo "<html>
            <head>
            <title>./CONTEXTES/$dossierlangue/$fichiersens/html/contextehtml$i.html</title>
            <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>
            <body>
            Fichier de travail : <span style=\"color: orange\"><b>../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt</b></span></br></br>
            Forme voulue : <span style=\"color: orange\"><b>$motif</b></span></br></br>
            Définition : <span style=\"color: orange\"><b>$def</b></span></br></br>
            </br>_________________________________________________________________________________________________
            </br>
            </br></br>" > ../CONTEXTES/$dossierlangue/$fichiersens/html/contextehtml$i.html

# On récupère le motif + 1 ligne avant + 1 ligne après, dans chaque fichier contenant le texte des pages
# On envoie le résultat de la commande egrep (motif + contexte) à la commande "sed", pour colorer et mettre en gras les motifs
# Puis on envoie le tout à une nouvelle commande "sed", qui ajoute des sauts de lignes
# Et on écrit le résultat dans le fichier contextehtml$i.html (à la suite de ce qu'on y avait déjà écrit)

            egrep -i -A 1 -B 1 "$motif" ../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt | sed -re 's#'"($motif)"'#<span style=\"color: orange\"><b>'"\1"'</b></span>#gi' | sed -e 's#$#</br>#g' >> ../CONTEXTES/$dossierlangue/$fichiersens/html/contextehtml$i.html ;
  
# On termine l'écriture du fichier en fermant les balises <body> et <html>
            echo "</body></html>" >> ../CONTEXTES/$dossierlangue/$fichiersens/html/contextehtml$i.html
   
# On stocke motif + contexte dans un fichier texte, qui nous servira pour les nuages de mots
            egrep -i -A 1 -B 1 "$motif" ../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt > ../CONTEXTES/$dossierlangue/$fichiersens/txt/contexte$i.txt
# Nuages : concaténation des fichiers de contextes dans le fichier texte réunissant dumps + contextes par langue et par sens
            cat ../CONTEXTES/$dossierlangue/$fichiersens/txt/contexte$i.txt >> ../NUAGES/$dossierlangue/$fichiersens/nuages$fichiersens.txt
            sed -i '/^$/d' ../NUAGES/$dossierlangue/$fichiersens/nuages$fichiersens.txt
            sed -ri 's/[[:punct:]]/ /gi' ../NUAGES/$dossierlangue/$fichiersens/nuages$fichiersens.txt

   
        if [ -s ../PAGES-ASPIREES/$dossierlangue/$i.html ] ;
        then
            if [ -s ../CONTEXTES/$dossierlangue/$fichiersens/txt/contexte$i.txt ] ;
            then
                echo "
                    <tbody>
                    <tr>
                        <td><a href=\"$url\" target=\"_blank\">Url $y</a></td>
                        <!-- On nomme les URLs de la colonne 1 grâce à la numérotation y et on crée des liens vers celles-ci -->
                        <td><a href=\"../PAGES-ASPIREES/$dossierlangue/$i.html\" target=\"_blank\">Cliquez-ici</a></td>
                        <!-- On crée des liens vers les URLs aspirées plus haut -->
                        <td><a href=\"../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt\" target=\"_blank\">Dump</a></td>
                        <!-- On crée des liens vers les contenus textuels récupérés pour chaque site -->
                        <td><a href=\"../CONTEXTES/$dossierlangue/$fichiersens/txt/contexte$i.txt\" target=\"_blank\">.txt</a></td>
                        <!-- On crée des liens vers les contextes en texte brut récupérés pour chaque site -->
                        <td><a href=\"../CONTEXTES/$dossierlangue/$fichiersens/html/contextehtml$i.html\" target=\"_blank\">Version HTML</a></td>
                        <!-- On crée des liens vers les contextes en texte brut récupérés pour chaque site -->
                    </tr>
                    </tbody>" >> $tablo;
            else
                echo "
                    <tbody>
                    <tr>
                        <td><a href=\"$url\" target=\"_blank\">Url $y</a></td>
                        <td><a href=\"../PAGES-ASPIREES/$dossierlangue/$i.html\" target=\"_blank\">Cliquez-ici</a></td>
                        <td><a href=\"../DUMP-TEXT/$dossierlangue/$fichiersens/$i.txt\" target=\"_blank\">Dump</a></td>
                        <td colspan=\"2\">Oups ! Fichiers vides ! Vérifier le Dump !</td>
                    </tr>
                    </tbody>" >> $tablo;
            fi
        else
            echo "
                <tbody>
                <tr>
                    <td><a href=\"$url\" target=\"_blank\">Url $y</a></td>
                    <td colspan=\"4\">Recupération de la page impossible</td>
                </tr>
                </tbody>" >> $tablo;
        fi
               
# Pour continuer la numérotation à chaque nouvelle ligne
            let "i+=1" ;
            let "y+=1" ;   
        }
# Nuages : concaténation de chaque fichier sens par langue, pour former un gros fichier regroupant contextes + dumps pour tous les sens pour chaque langue
        cat ../NUAGES/$dossierlangue/$fichiersens/nuages$fichiersens.txt >> ../NUAGES/$dossierlangue/nuages_general_pour_$dossierlangue.txt   
    }
    echo "</table><div style=\"height:50px;display:block;\"></div>" >> $tablo ;
# Nuages : concaténation globale de tous les fichiers ; toutes les langues sont ainsi mélangées
    cat ../NUAGES/$dossierlangue/nuages_general_pour_$dossierlangue.txt >> ../NUAGES/nuages_general.txt
}
echo "</body></html>" >> $tablo;
Par Axel-Kun-Marjo
Ecrire un commentaire - Voir les 0 commentaires
Mercredi 25 novembre 2009 3 25 /11 /Nov /2009 14:37
Comme chaque semaine, voici le nouveau script, fruit d'une journée intense de bidouillages dans Cygwin !
Les commentaires sont dans le script.

A la semaine prochaine !
^^

#!/bin/bash


# On se place initialement dans le répertoire PROGRAMMES : /cygdrive/D/MASTER-TAL/Axel.Marjorie.Kun/PROGRAMMES
# Redirection d'un fichier run_*.txt : $ sh tab-liens3.sh < run_*.txt
# Le fichier run contient des données que l'on stocke dans plusieurs variables => le chemin du dossier contenant les URLs, le chemin du tableau à créer, la langue des fichiers de l'input, et le motif à trouver dans les pages

read dossier;
# Si la commande read a fonctionné...
echo "Répertoire lu";
read tablo;
# Si la commande read a fonctionné...
echo "Tableau créé";
read langue;
# Si la commande read a fonctionné...
echo "Langue reconnue";
read motif;
# Si la commande read a fonctionné...
echo "Motif lu";


# On crée l'entête, le début du corps et du tableau de la future page html que l'on redirige vers la variable $tablo
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
 \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" >

<head>
    <title>Tableau des liens</title>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
       
    <style type=\"text/css\">
/* On crée une feuille de style CSS, ce sera plus facile pour la configuration du tableau */
            body /* !!! background-color ne fonctionne pas, aucune idée pourquoi -> déclarer cet attribut dans la balise body */
            {
                background-color: #FFCC99;
                width: 100%;
            }
       
            a:link /* Attributs des liens */
            {
                color: black;
                text-decoration: none;
            }
           
            a:visited /* Attributs des liens visités */
            {
                color: black;
                text-decoration: none;
            }
           
            a:hover /* Attributs des liens survolés */
            {
                color: red;
                text-decoration: none;
            }
       
            h1 /* Attributs des titres en balise h1 */
            {
                color: black;
                font-family: Calibri, arial, sans-serif;
                font-size: 3em;
                font-weight: bold;
                font-style: italic;
                line-height: 50pt;
                text-align: center;
            }
       
            table /* Le tableau en lui-même */
            {
                margin: auto;
                border:7px solid black;
                border-collapse:collapse;
                width: 80%;
            }

            th /* Les cellules d'en-tête */
            {
                background-color:#663300;
                border:7px solid black;
                color:white;
                font-size:1em;
                padding: 10px;
                font-family:Calibri, \"Arial Black\", Times, \"Times New Roman\", serif;
            }

            td /* Les cellules normales */
            {
                border:1.5px solid black;
                border-right:7px solid black;
                border-left:7px solid black;
                background-color:#CC6600;
                font-family: \"Arial\", \"Trebuchet MS\", Times, \"Times New Roman\", serif;
                text-align:center;
                padding: 5px;
                word-break: break-all;
            }
    </style>
<!-- Fin de la feuille de style CSS -->
</head>" > $tablo;

echo "<body bgcolor=\"#FFCC99\">
      <table>
        <h1>Voici le tableau des liens</h1>"
>> $tablo;


# Démarrage d'une numérotation qui compte chaque ligne dans chaque fichier d'URLs pour faciliter le nommage des URLs aspirées (colonne2) dans le tableau
i=1

# Pour chaque fichier présent dans le dossier courant (pour nous, c'est un répertoire par langue)
# On crée un tableau en html dont la mise en page a été définie dans la feuille de style au dessus

for fichier in `ls $dossier`
{

# Démarrage d'une numérotation qui compte chaque ligne dans chaque fichier d'URLs pour faciliter le nommage des URLs (colonne1)  dans le tableau
    y=1

    echo "
    <thead>
        <tr>
            <th>Fichier $fichier</th>
            <th>Pages aspirées</th>
<!-- On rajoute une colonne pour les pages aspirées -->
            <th>Dump texte</th> <!-- On rajoute une colonne pour les contenus textuels -->
            <th>Contextes .txt</th> <!-- On rajoute une colonne pour les contextes (texte brut) -->
            <th>Contextes .html</th> <!-- On rajoute une colonne pour les contextes (version HTML) -->
        </tr>
    </thead>"
>> $tablo;


# On crée une arborescence des dossiers organisée par langue
    mkdir ../PAGES-ASPIREES/$langue/ ;
    mkdir ../DUMP-TEXT/$langue/ ;
    mkdir ../CONTEXTES/$langue/ ;
# Puisque nous voulons afficher le motif proprement, on crée une page html ; nous avons besoin de garder le fichier en texte brut pour la création des nuages
    mkdir ../CONTEXTES/$langue/html/ ;
  

    for nom in `cat $dossier/$fichier`
        {

# On aspire le contenu des URLs de chaque fichier, puis on les stocke dans le répertoire PAGES ASPIREES et on les nomme grâce à la numérotation i
    wget -O ../PAGES-ASPIREES/$langue/$i.html $nom

# On récupère le texte de chaque site, puis on le stocke dans le répertoire DUMP-TEXT et on les nomme grâce à la numérotation i
    lynx -dump -nolist $nom > ../DUMP-TEXT/$langue/$i.txt

# On récupère le motif + 1 ligne avant + 1 ligne après, dans chaque fichier contenant le texte des pages, puis on stocke le tout dans le répertoire CONTEXTE/langue et on nomme le tout grâce à la numérotation i
    egrep -i -A 1 -B 1 "$motif\b" ../DUMP-TEXT/$langue/$i.txt > ../CONTEXTES/$langue/contexte$i.txt ;

# Pour que l'affichage des contextes soit plus agréable, on va créer une page HTML (contextehtml$i.html)
# Tout d'abord, on utilise la commande sed pour chercher et remplacer le motif par le même motif, accompagné d'une balise html permettant de le colorer en orange
# On spécifie un nouveau fichier pour l'output => html$i.html (l'input étant le fichier contexte$i.txt)

    sed -e "s/$motif\b/<FONT COLOR=orange>$motif<\/FONT>/ig" ../CONTEXTES/$langue/contexte$i.txt > ../CONTEXTES/$langue/html/html$i.html ;

# On utilise toujours la même commande pour ajouter une balise html </br> à la fin des lignes, afin de matérialiser les sauts de lignes dans le fichier HTML
# On spécifie un nouveau fichier pour l'output => bubu$i.html (l'input étant le fichier html$i.html)

    sed -e "s/$/<\/br>/" ../CONTEXTES/$langue/html/html$i.html > ../CONTEXTES/$langue/html/bubu$i.html ;

# Enfin, on crée le fichier HTML final qui affichera les résultats => contextehtml$i.html
# Il contient (après concaténation avec la commande cat) les balises d'en-tête du code HTML (préalablement stockées dans le fichier entete.html), le contenu du fichier bubu$i.html, le pied de page du code HTML (du fichier pied.html)

    cat entete.html ../CONTEXTES/$langue/html/bubu$i.html pied.html > ../CONTEXTES/$langue/html/contextehtml$i.html ;

# Enfin, on supprime les fichiers temporaires qui ne nous servent plus ! Ouf !
    rm ../CONTEXTES/$langue/html/html$i.html ;
    rm ../CONTEXTES/$langue/html/bubu$i.html ;
 
 

    echo "
    <tbody>
        <tr>
            <td><a href=\"$nom\" target=\"_blank\">Url $y</a></td>

            <!-- On nomme les URLs de la colonne 1 grâce à la numérotation y et on crée des liens vers celles-ci -->
            <td><a href=\"../PAGES-ASPIREES/$langue/$i.html\" target=\"_blank\">Cliquez-ici</a></td>
            <!-- On crée des liens vers les URLs aspirées plus haut -->
            <td><a href=\"../DUMP-TEXT/$langue/$i.txt\" target=\"_blank\">Contenu textuel</a></td>
            <!-- On crée des liens vers les contenus textuels récupérés pour chaque site -->
            <td><a href=\"../CONTEXTES/$langue/contexte$i.txt\" target=\"_blank\">Texte brut</a></td>
            <!-- On crée des liens vers les contextes en texte brut récupérés pour chaque site -->
            <td><a href=\"../CONTEXTES/$langue/html/contextehtml$i.html\" target=\"_blank\">Version HTML</a></td>
            <!-- On crée des liens vers les contextes en texte brut récupérés pour chaque site -->
        </tr>
    </tbody>"
>> $tablo;


# Pour continuer la numérotation à chaque nouvelle ligne
    let "i+=1" ;
    let "y+=1" ;
        }
}
echo "</table></body></html>" >> $tablo;

---

En image :




Ce qu'il nous reste à faire :

- modifier le script pour qu'il prenne tous les répertoires classés par langue (et donc faire un seul run) : ajouter une nouvelle boucle et déplacer les compteurs

- trouver le moyen de mettre tous les motifs dans un fichier texte que l'on enverrait à la commande egrep (ajout d'une boucle également ?) ; autre solution envisagée : utiliser une structure if...then...fi pour chaque langue avec les motifs associés.

- résoudre le problème des expressions régulières avec egrep et sed (qui n'ont pas l'air de vouloir les reconnaître!)

- peaufiner nos expressions régulières (!) : nous ne pensons prendre que le mot 'sens' lui-même, car il pourrait y avoir des problèmes de contexte compte tenu du fait que des mots comme 'sensibilité', 'sensation', etc. peuvent se retrouver dans n'importe quel texte et qu'ils biaiseraient nos résultats...

- anticiper le problème potentiel d'encodage que pourrait causer le chinois... et pas que le chinois en fait !

récupérer l'encodage de la page Web d'origine et le transmettre à la page contextes$i.html ? => cmd egrep

- espérer que pour certains problèmes récurrents, ce soient nos pc qui déconnent et que tout fonctionnera très bien à l'ILPGA ! (beaucoup de pages qui ne veulent pas être aspirées (ERROR 404 et tout le tralala), mais le problème c'est qu'il y en a beaucoup et que ça marchait très bien à l'ILPGA... puis aussi les "mauvais titre" des pages de Wikipédia...)

Au boulot !
Par Axel-Kun-Marjo
Ecrire un commentaire - Voir les 0 commentaires
Mercredi 18 novembre 2009 3 18 /11 /Nov /2009 12:00
Voilà le script modifié pour créer une deuxième colonne contenant des liens qui redirigent vers le contenu des URLs aspirées localement.

Les explications se trouvent dans le script... Bonne lecture :)

#!/bin/bash

# On se place initialement dans le répertoire PROGRAMMES : /cygdrive/D/MASTER-TAL/Axel.Marjorie.Kun/PROGRAMMES
# Redirection d'un fichier run_*.txt : $ sh tab-liens3.sh < run_*.txt

read dossier;
# Si la commande read a fonctionné...
echo "Répertoire lu";
read tablo;
# Si la commande read a fonctionné...
echo "Tableau créé";
# On crée l'entête, le début du corps et du tableau de la future page html que l'on redirige vers la variable $tablo
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
 \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" >

<head>
    <title>Tableau des liens</title>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
       
    <style type=\"text/css\"> /* On crée une feuille de style CSS, ce sera plus facile pour la configuration du tableau */
            body /* !!! background-color ne fonctionne pas, aucune idée pourquoi -> déclarer cet attribut dans la balise body */
            {
                background-color: #FFCC99;
                width: 100%;
            }
       
            a:link /* Attributs des liens */
            {
                color: black;
                text-decoration: none;
            }
           
            a:visited /* Attributs des liens visités */
            {
                color: black;
                text-decoration: none;
            }
           
            a:hover /* Attributs des liens survolés */
            {
                color: red;
                text-decoration: none;
            }
       
            h1 /* Attributs des titres en balise h1 */
            {
                color: black;
                font-family: Calibri, arial, sans-serif;
                font-size: 3em;
                font-weight: bold;
                font-style: italic;
                line-height: 50pt;
                text-align: center;
            }
       
            table /* Le tableau en lui-même */
            {
                margin: auto;
                border:7px solid black;
                border-collapse:collapse;
                width: 80%;
            }

            th /* Les cellules d'en-tête */
            {
                background-color:#663300;
                border:7px solid black;
                color:white;
                font-size:1em;
                padding: 10px;
                font-family:Calibri, \"Arial Black\", Times, \"Times New Roman\", serif;
            }

            td /* Les cellules normales */
            {
                border:1.5px solid black;
                border-right:7px solid black;
                border-left:7px solid black;
                background-color:#CC6600;
                font-family: \"Arial\", \"Trebuchet MS\", Times, \"Times New Roman\", serif;
                text-align:center;
                padding: 5px;
                word-break: break-all;
            }
    </style> <!-- Fin de la feuille de style CSS -->
</head>" > $tablo;
echo "<body bgcolor=\"#FFCC99\">
      <table>
        <h1>Voici le tableau des liens</h1>" >> $tablo;
# Démarrage d'une numérotation qui compte chaque ligne dans chaque fichier d'URLs pour faciliter le nommage des URLs aspirées (colonne2) dans le tableau
i=1
# Pour chaque fichier présent dans le dossier courant (pour nous, c'est un répertoire par langue)
# On crée un tableau en html dont la mise en page a été définie dans la feuille de style au dessus

for fichier in `ls $dossier`
{
# Démarrage d'une numérotation qui compte chaque ligne dans chaque fichier d'URLs pour faciliter le nommage des URLs (colonne1)  dans le tableau
    y=1
    echo "
    <thead>
        <tr>
            <th>Fichier $fichier</th>
            <th>Pages aspirées</th> <!-- On rajoute une colonne pour les pages aspirées -->
        </tr>
    </thead>" >> $tablo;
    for nom in `cat $dossier/$fichier`
        {
# On aspire le contenu des URLs de chaque fichier, puis on les stocke dans le répertoire PAGES ASPIREES et on les nomme grâce à la numérotation i
    wget -O ../PAGES-ASPIREES/$i.html $nom
    echo "
    <tbody>
        <tr>
            <td><a href=\"$nom\" target=\"_blank\">Url $y</a></td>
            <!-- On nomme les URLs de la colonne 1 grâce à la numérotation y et on crée des liens vers celles-ci -->
            <td><a href=\"../PAGES-ASPIREES/$i.html\" target=\"_blank\">Cliquez-ici</a></td>
            <!-- On crée des liens vers les URLs aspirées plus haut -->
        </tr>
    </tbody>" >> $tablo;
# Pour continuer la numérotation à chaque nouvelle ligne
    let "i+=1" ;
    let "y+=1" ;
        }
}
echo "</table></body></html>" >> $tablo;



Et bien entendu, un petit aperçu :


Par Axel-Kun-Marjo
Ecrire un commentaire - Voir les 0 commentaires
Lundi 9 novembre 2009 1 09 /11 /Nov /2009 00:50
Bonjour !

Voici une version modifiée du script, qui intègre une feuille de style CSS pour un rendu du tableau un peu plus joli : )
Les couleurs ne sont pas encore définitives, mais la feuille de style est là pour qu'on puisse modifier tout ça facilement.
Le script génère des tableaux qui fonctionnent bien (d'après nos tests) sous IE, Safari, Chrome et Firefox (encore qqs soucis d'affichage cependant sous Firefox => des lignes qui apparaissent en trop parfois, et un problème avec la largeur du tableau pour les liens allemands).

Il ne reste plus qu'à décider de l'habillage définitif du tableau ! :P

--- --- ---

Script :


#!/bin/bash

# Redirection d'un fichier run_*.txt : $ sh tab-liens3.sh < run_*.txt
read dossier;
# Si la commande read a fonctionné...
echo "Répertoire lu";
read tablo;
# Si la commande read a fonctionné...
echo "Tableau créé";

# On crée l'entête de la future page html que l'on redirige vers la variable $tablo

echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
 \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" >

<head>
    <title>Tableau des liens</title>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
       
    <style type=\"text/css\">
    /* On crée une feuille de style CSS, ce sera plus facile pour la configuration du tableau */

            body /* !!! background-color ne fonctionne pas, aucune idée pourquoi -> déclarer cet attribut dans la balise body */
            {
                background-color: #FFCC99;
                width: 100%;
            }
       
            a:link /* Attributs des liens */
            {
                color: black;
                text-decoration: none;
            }
           
            a:visited /* Attributs des liens visités */
            {
                color: black;
                text-decoration: none;
            }
           
            a:hover /* Attributs des liens survolés */
            {
                color: red;
                text-decoration: none;
            }
       
            h1 /* Attributs des titres en balise h1 */
            {
                color: black;
                font-family: Calibri, arial, sans-serif;
                font-size: 3em;
                font-weight: bold;
                font-style: italic;
                line-height: 50pt;
                text-align: center;
            }
       
            table /* Le tableau en lui-même */
            {
                margin: auto;
                border:7px solid black;
                border-collapse:collapse;
                width: 80%;
            }

            th /* Les cellules d'en-tête */
            {
                background-color:#663300;
                border:7px solid black;
                color:white;
                font-size:1.5em;
                padding: 10px;
                font-family:Calibri, \"Arial Black\", Times, \"Times New Roman\", serif;
            }

            td /* Les cellules normales */
            {
                border:1.5px solid black;
                background-color:#CC6600;
                font-family: \"Arial\", \"Trebuchet MS\", Times, \"Times New Roman\", serif;
                text-align:center;
                padding: 5px;
                word-break: break-all;
            }
    </style>
    <!-- Fin de la feuille de style CSS -->

</head>" > $tablo;

echo "<body bgcolor=\"#FFCC99\">
      <table>
        <h1>Voici le tableau des liens</h1>" >> $tablo;

# Pour chaque fichier présent dans le dossier courant (pour nous, c'est un répertoire par langue)
# on crée un tableau en html


for fichier in `ls $dossier`
{
    echo "
    <thead>
        <tr>
            <th>Fichier $fichier</th>
        </tr>
    </thead>" >> $tablo;

 # et on crée une ligne pour chaque URL que l'on ajoute par concaténation à la variable $tablo, et ce pour chaque fichier d'URLs (regroupées par sens)

    for nom in `cat $dossier/$fichier`
        {
    echo "
    <tbody>
        <tr>
            <td><a href=\"$nom\" target=\"_blank\">$nom</a></td>
        </tr>
    </tbody>" >> $tablo;
        }
}

# on ferme le tableau et le corps du fichier html
echo "</table></body></html>" >> $tablo;

--- --- ---

Ce qui donne quelque chose comme ça :


Quelques explications sur le CSS et le HTML de la part d'un débutant, pour les débutants :

- Entre les balises
<style type=\"text/css\"> et </style> (situées dans le <head>, avant la balise <body> donc) on place la feuille de style CSS, qui est formée (en gros) de (1) l'intitulé de la balise html dont on veut modifier le comportement ; (2) les attributs que l'on veut appliquer à ce qui sera contenu (texte, tableau, image, etc) entre les deux balises.
          ex :                                  table
                     {
                          attribut1: caractéristique;
                          attribut2: caractéristique;
                     }


- Une feuille de style présente pas mal d'intérêts : (1) clarté du code HTML, puisque tout ce qui concerne l'apparence de la page est défini en début de code, et de façon très ordonnée ; (2) les attributs sont définis globalement pour toute une balise, ce qui évite d'avoir à les répéter à chaque nouvelle cellule du tableau par exemple (au lieu d'écrire du <td style="blablablablabla"> à chaque fois, il suffit d'écrire <td> et le navigateur appliquera le style défini plus haut dans le CSS, et ce à chaque fois qu'il rencontrera la balise <td>) ; (3) je ne sais pas si ça servira, m'enfin l'autre intérêt est qu'on peut écrire la feuille de style dans une page indépendante > du coup, si on a 50 pages HTML qui font référence à cette unique feuille de style, toute modification dans la feuille s'appliquera automatiquement aux 50 pages ! Moins on fait d'efforts, mieux c'est !

- Quelques liens utiles pour s'initier au HTML et au CSS (en plus de ceux donnés sur le site PluriTAL) :
       http://fr.wikibooks.org/wiki/Le_langage_HTML/Introduction => user et abuser de la section consacrée aux tableaux, pour comprendre la différence entre <td>, <tr>, <th>, et les possibilités de mise en forme des tableaux.
       http://www.siteduzero.com/tutoriel-3-13584-les-tableaux.html#ss_part_1 => un tuto super clair !
       http://www.alsacreations.com/tutoriels/

--- --- ---

Amis PluriTALiens, nous espérons que ces quelques lignes vous seront utiles !
N'hésitez pas à commenter et à faire part de vos expériences !

A la prochaine.
Par Axel-Kun-Marjo
Ecrire un commentaire - Voir les 3 commentaires
Mercredi 4 novembre 2009 3 04 /11 /Nov /2009 11:31
A partir du cours de ce matin, nous avons rédigé un script permettant de créer un tableau rassemblant les urls (contenues dans les fichiers texte) par langue.
Le script accepte en entrée le répertoire d'urls de chaque langue et crée un tableau à une seule colonne, où les urls sont rassemblées par sens.

Pour cela, nous avons amélioré le script de base :

- tout d'abord, nous avons créé un fichier run_*.txt (* correspond à la langue traitée) qui contient les chemins des répertoires (pour la première ligne, le chemin du répertoire contenant les fichiers d'URLs, et pour la 2ème le chemin du répertoire TABLEAU avec le nom du fichier html à créer)

- puis nous avons ajouté dans la boucle 'for' la commande html permettant d'insérer un lien HTML cliquable :
<a href="url" target="_blank">nom_url</a>

- après, nous avons ajouté une autre boucle qui lit tous les fichiers dans un dossier pour simplifier notre travail :
    for fichier in `ls $dossier`
       {
       }


- enfin nous avons ajouté une deuxième boucle à l'intérieur de la boucle précédente pour que toutes les URLs de chaque fichier contenu dans le répertoire soient regroupées sur la même page html :
for nom in `cat $dossier/$fichier`
        {
        }


Voici à quoi il ressemble :
#!/bin/bash

# Redirection dans le shell d'un fichier run_*.txt : $ sh tab-liens3.sh < run_*.txt
read dossier;
# Si la commande read a fonctionné...
echo "Répertoire lu";
read tablo;
# Si la commande read a fonctionné...
echo "Tableau créé";

# On crée l'entête, le début du corps et du tableau de la future page html que l'on redirige vers la variable $tablo
echo "<html><head><title>Tableau des liens</title></head>" > $tablo;
echo "<body style=\"background-color: green;\"><center><p align=\"justify\"><font style=\"font-family:arial;\" color=\"purple\" ><h1>Voici le tableau des liens</h1></font></p><table border=\"1\" bgcolor=\"silver\" width=\"30%\">" >> $tablo;
# Pour chaque fichier présent dans le dossier courant (pour nous, c'est un répertoire par langue)
# on crée un tableau en html

for fichier in `ls $dossier`
{
    echo "<tr><td align=\"center\" bgcolor=\"silver\" colspan=\"3\"><b style=\"font-family:arial;\">Fichier $fichier</b></td></tr>" >> $tablo;
    # et on crée une ligne pour chaque URL que l'on ajoute par concaténation à la variable $tablo, et ce pour chaque fichier d'URLs (regroupées par sens)
    for nom in `cat $dossier/$fichier`
        {
        echo "<tr><td><font style=\"font-family:arial;\"><a href=\"$nom\" target=\"_blank\">$nom</a></font></td></tr>" >> $tablo;
        }
}

# on ferme le tableau et le corps du fichier html
echo "</table></body></html>" >> $tablo;




... ce qui donne le résultat suivant :



Il nous reste plus qu'à peaufiner la mise en forme du tableau (oui oui, il n'est pas encore très sympathique à regarder!).

La suite au prochain numéro !
Par Axel-Kun-Marjo
Ecrire un commentaire - Voir les 1 commentaires

Présentation

Recherche

Calendrier

Janvier 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