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;
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;