Notre travail est basé sur quelques scripts, mais certains n'étaient utiles que pendant le travail.
Les scripts marchent à partir de quelques données en entrée et sont dépendants de la configuration de fichiers et données.
Voici l'arborescence obligatoire pour le script :
Le chemin absolu des fichiers du script se trouve dans le fichier rm_don.txt, qui est lui même répertorié dans le dossier PROGRAMMES, tous les scripts prennent la variable dossier dans ce fichier.
****************************************************************************
le nettoyeur | le script principal | le script général | le script pour concaténer | mode d'emploi
****************************************************************************
C'est le premier script, utilisé pour nettoyer les dossiers des fichiers créés pendant les lancements précedents : il se situe dans le répertoire racine de l'utilisateur de cygwin (pour plus de facilité : dès qu'on fait fonctionner cygwin, on le lance sans devoir changer le répertoire courant).
#!/bin/bash | |
#les deux fichiers rm.sh et rm_don.txt doivent être mis dans le répertoire de travail de cygwin : c/cygwin/home/'utilisateur' où utilisateur=ce qui est affiché dans cygwin (pour le connaître, faire pwd juste au début de travail) | |
echo "es-tu sur? o/n" | # précaution, il demande confirmation à l'utilisateur |
O="o"; | # variable qui sera utilisée pour connaître le répertoire de l'utilisateur |
read choix; | # lire la décision de l'utilisateur |
if [ $choix = $O ]; then | # si l'utilisateur tape "o" pour confirmer l'envie de supprimer les fichiers, on vide progressivement tous les dossiers qui ont été auparavant remplis par le script |
{ | |
read rep < rm_don.txt; | |
#!/bin/bash | #le répertoire de travail se trouve dans le fichier |
# après, les opérations sont récursives : on ouvre le dossier, on supprime tout dedans et on affiche le message (pour que l'utilisateur sache qu'il se passe quelque chose) | |
cd $rep/TABLEAUX/; | |
rm -f -r * | # commande supprimant les fichiers. Option -f pour forcer la suppression même si le répertoire est vide, option -r pour supprimer aussi les répertoires. |
echo "# -------------------------TABLEAUX vide" | |
cd $rep/DUMP-TEXT/; | |
cd ./FR/ | |
rm -f -r *; | |
cd ../EN/; | |
rm -f -r *; | |
cd ../PL/; | |
rm -f -r *; | |
echo "#-------------------------DUMP-TEXT vide" | |
cd $rep/PAGES-ASPIREES/; | |
cd ./FR/; | |
rm -f -r *; | |
cd ../EN/ | |
rm -f -r *; | |
cd ../PL/ | |
rm -f -r *; | |
echo "#-------------------------PAGES-ASPIREES vide" | |
cd $rep/CONTEXTES/; | |
cd ./PL | |
rm -f -r *; | |
cd ../FR | |
rm -f -r *; | |
cd ../EN | |
rm -f -r *; | |
echo "#------------------------------CONTEXTES vide" | |
echo "# -----------------------------------FINI!;" | |
} | |
else echo "bye"; | # ce qui se passe si l'utilisateur tape quelque chose d'autre que le "o" : programme fini. |
fi; | |
exit; |
et le modèle du fichier d'entrée
****************************************************************************
#!/bin/bash | |
#!/bin/bash | |
read chemin; | |
read fic; | # fichier contenant les liens français : "; |
read fic1; | # fichier contenant les liens anglais: "; |
read fic2; | # fichier contenant les liens polonais : "; |
read tablo; | # fichier html ou stocker les liens : "; |
read sens; |
--------------------------------------------------------
#création des dossiers selon les sens répertoriés:
--------------------------------------------------------
mkdir $chemin/PAGES-ASPIREES/FR/$sens/;
mkdir $chemin/DUMP-TEXT/FR/$sens/;
mkdir $chemin/CONTEXTES/FR/$sens/;
mkdir $chemin/PAGES-ASPIREES/EN/$sens/;
mkdir $chemin/DUMP-TEXT/EN/$sens/;
mkdir $chemin/CONTEXTES/EN/$sens/;
mkdir $chemin/PAGES-ASPIREES/PL/$sens/;
mkdir $chemin/DUMP-TEXT/PL/$sens/;
mkdir $chemin/CONTEXTES/PL/$sens/;
--------------------------------------------------------
#on crée le site web qui contiendra les tableaux. On va écrire progressivement les lignes dans le fichier html (variable tablo)
--------------------------------------------------------
<.table><.tr><.td><.p>echo "<.html><.head><.meta http-equiv=\"Content-Type\" content=\"text/.html; charset=ISO 8859-2\"/><.title>tableau sens<./.title><./.head><.body>" > $tablo;<./.td><.td><./.td><./.tr><./.table>
--------------------------------------------------------
# création de la première partie du tableau, pour le français:
1. on écrit les lignes permettant de créer le tableau, avec tous les paramètres de largeur, couleur etc.
--------------------------------------------------------
echo "<.table border=\"4\" align=center><.h2> FRANCAIS <./.h2><./.td><./.tr>" >> $tablo;
--------------------------------------------------------
2. on initialise notre compteur et on crée une boucle : pour chaque ligne dans le fichier contenant des URLS (et donc pour chaque adresse web d'une langue donnée) on fait un certain nombre d'opérations :
--------------------------------------------------------
i=1
for nom in `cat $fic`;
{
--------------------------------------------------------
wget: on aspire les pages web et on les stocke dans les PAGES-ASPIREES. Option -O pour stocker le site dans un fichier.
lynx: regarde le site aspiré et en extrait le texte seul en l'écrivant dans un fichier texte. Option -dump pour stocker dans un fichier; -nolist pour ne pas écrire les liens contenus dans le site.
--------------------------------------------------------
wget -O $chemin/PAGES-ASPIREES/FR/$sens/$i.html $nom
lynx -dump -nolist $nom > $chemin/DUMP-TEXT/FR/$sens/$i.txt
--------------------------------------------------------
lire le motif (il dépend du sens, le script va chercher le motif en boucle: si la boucle tourne pour la 4ème fois, il cherchera le sens 4 dans un fichier.
egrep: extraire les lignes contenant le motif et les stocker dans un fichier texte. Option -i pour ne pas tenir compte de la casse dans le motif
--------------------------------------------------------
read motif < $chemin/PROGRAMMES/MOTIF/fr$sens.txt;
egrep -i "\b$motif\b" $chemin/DUMP-TEXT/FR/$sens/$i.txt > $chemin/CONTEXTES/FR/$sens/$i.txt
--------------------------------------------------------
à la fin de la boucle, on remplit une ligne du tableau, en mettant les liens vers les fichiers créés et on augmente le compteur.
--------------------------------------------------------
echo "<.tr><.td><.a href = \"$nom\">url $i<./.a><./.td><.td><.a href=\"../PAGES-ASPIREES/FR/$sens/$i.html\">page aspirée $i<./.a><./.td><.td> let "i+=1" ;
}
--------------------------------------------------------
la boucle est finie
la deuxième boucle fait exactement la même chose mais pour les URLS des sites en anglais
-------------------------------------------------------- echo "<.tr><.td colspan =\"4\" align=center><.h2> ANGLAIS <./.h2><./.td><./.tr>" >> $tablo;
a=1
for nom in `cat $fic1`
{
read motif < $chemin/PROGRAMMES/MOTIF/en$sens.txt;
wget -O $chemin/PAGES-ASPIREES/EN/$sens/$a.html $nom
lynx -dump -nolist $nom > $chemin/DUMP-TEXT/EN/$sens/$a.txt
egrep -i "\b$motif\b" $chemin/DUMP-TEXT/EN/$sens/$a.txt > $chemin/CONTEXTES/EN/$sens/$a.txt
echo "<.tr><.td><.a href = \"$nom\">url $a<./.a><./.td><.td><.a href=\"../PAGES-ASPIREES/EN/$sens/$a.html\">page aspirée $a<./.a><./.td><.td> let "a+=1" ;
}
--------------------------------------------------------
la 3eme boucle est un peu différente compte tenu de l'encodage du polonais qui pose des problèmes. Jusqu'au commentaire suivant tout se passe de la même manière
-------------------------------------------------------- echo "<.tr><.td colspan=\"4\" align=center><.h2> POLONAIS <./.h2><./.td><./.tr>" >> $tablo;
b=1
for nom in `cat $fic2`;
{
read motif < $chemin/PROGRAMMES/MOTIF/pl$sens.txt;
wget -O $chemin/PAGES-ASPIREES/PL/$sens/$b.html $nom;
--------------------------------------------------------
Lynx prend par défaut l'encodage du système, il faut le forcer à encoder les fichiers en sortie en UTF-8, d'où l'option -display_charset=UTF-8
-------------------------------------------------------- lynx -dump -nolist -display_charset=UTF-8 $nom > $chemin/DUMP-TEXT/PL/$sens/$b.txt;
--------------------------------------------------------
Pour obtenir les motifs en UTF-8 et pour avoir un rendu correct du site en sortie, on utilise le script écrit en perl par Pierre Marshal et M. Fleury. On a fait quelques modifications sur ce script, pour les voir, rendez vous sur le blog ).
Les commentaires sur le fonctionnement de ce script et le script sont visibles ici: site plurital.
Pour installer le minigrep --> page de Pierre
-------------------------------------------------------- perl $chemin/minigrep/minigrepmultilingue2.pl "UTF-8" $chemin/DUMP-TEXT/PL/$sens/$b.txt $chemin/PROGRAMMES/MOTIF/pl$sens.txt $chemin/CONTEXTES/PL/$sens/$b.html;
--------------------------------------------------------
la sortie de perl étant en .html et non en .txt, c'est le seul changement.
-------------------------------------------------------- echo "<.tr><.td> let "b+=1";
}
echo "<./.table><.br>" >> $tablo;
#fin du tableau
--------------------------------------------------------
et on finit la page html.
-------------------------------------------------------- echo "<./.body><./.html>" >> $tablo;
****************************************************************************
Le script principal traite plusieurs URLs en 3 langues, en créant une page html avec 3 tableaux.
Comme on a répertorié 7 sens du mot mémoire sur lequel on travaille, on a besoin de lancer le script 7 fois pour obtenir 7 pages html.
Le script va prendre alors les données de différents sources, en fonction du sens.
pour cela, un petit script tout simple : sh fait-tableau-v6_charset_minigrep.sh < donnees1.txt
sh fait-tableau-v6_charset_minigrep.sh < donnees2.txt
sh fait-tableau-v6_charset_minigrep.sh < donnees3.txt
sh fait-tableau-v6_charset_minigrep.sh < donnees4.txt
sh fait-tableau-v6_charset_minigrep.sh < donnees5.txt
sh fait-tableau-v6_charset_minigrep.sh < donnees6.txt
sh fait-tableau-v6_charset_minigrep.sh < donnees7.txt
il fait fonctionner le script principal en l'alimentant des données dont il a besoin en entrée :
variables : chemin, fic, fic1, fic2, tablo et sens doivent être écrits dans les fichiers de données. ****************************************************************************
On nous a demandé de faire des nuages de mots. On a décidé de le faire avec l'outil donnant les résultats les plus agréables à voir, WORDLE.
En entrée, le programme demande du texte pour en faire des statistiques et dessiner les nuages.
On a automatisé le travail au maximum en concaténant le contenu des fichiers contextes dans un même fichier.
-------------------------------------------------------- #!/bin/bash
# fic=fichier contextes .txt
read chemin < rm_don.txt; #rep de travail
--------------------------------------------------------
on écrit un fichier contenant les numéros des sens (chez nous, il ressemble à:
1
2
3
4
5
6
7
pour chaque sens, une boucle fonctionne:
-------------------------------------------------------- for sens in `cat donneesCAT.txt`;
{ i=1
for fichier in `ls $chemin/CONTEXTES/FR/$sens`
--------------------------------------------------------
il lit tous les fichiers français du sens donné et en écrit à la suite les contextes dans un fichier txt. La ligne d'echo permet de voir combien de fichiers ont été concaténés.
-------------------------------------------------------- {
cat $chemin/CONTEXTES/FR/$sens/$i.txt >> $chemin/CONCATENATION/FR/sens$sens.txt; # concatène tous les fichiers francais de meme sens
#echo "******************************" >> $chemin/CONCATENATION/FR/sens$sens.txt;
let i+=1;
}
}
--------------------------------------------------------
information pour l'utilisateur: "ne t'inquiète pas, je travaille":)
et les mêmes boucles pour l'anglais.
-------------------------------------------------------- echo "patience...";
for sens in `cat donneesCAT.txt`; #liste des sens, entree manuellement
{
i=1
for fichier in `ls $chemin/CONTEXTES/EN/$sens`
{
cat $chemin/CONTEXTES/EN/$sens/$i.txt >> $chemin/CONCATENATION/EN/sens$sens.txt; # concatene tous les fichiers anglais de meme sens
#echo "******************************" >> $chemin/CONCATENATION/EN/sens$sens.txt;
let i+=1;
}
}
echo "encore un peu...";
for sens in `cat donneesCAT.txt`; #liste des sens, entree manuellement
--------------------------------------------------------
pour le polonais on n'a pas de fichiers texte mais des html, ce qui fait qu'on doit concaténer les fichiers html et les nettoyer en enlevant les balises et en-têtes avant de faire des nuages:
-------------------------------------------------------- {
t=1
for page in `ls $chemin/CONTEXTES/PL/$sens`
{
cat $chemin/CONTEXTES/PL/$sens/$t.html >> $chemin/CONCATENATION/PL/sens$sens.html; # concatene tous les fichiers polonais de meme sens
#echo "******************************" >> $chemin/CONCATENATION/PL/sens$sens.html;
let t+=1;
}
}
echo "fini";
--------------------------------------------------------
après, il faut donc ouvrir tous les fichiers en NOTEPAD++ (et seulement ces 7 fichiers) et faire le ménage dedans.
J'ai utilisé les expressions régulières et fonction "remplacer tout dans les fichiers ouverts".
-------------------------------------------------------- ****************************************************************************
il faut donc
1. s'assurer que les dossiers sont vides:
2. changer le répertoire pour le répertoire de travail
3. lancer le script general:
il travaille, on le voit:
ici, c'est le minigrep qui travaille:
etc.
une fois que c'est fini, on lance le script de concaténation :
les nuages peuvent être réalisées en utilisant Wordle
2.3 script général
2.4 script pour concaténer
Pour lancer le script,