Cloture du projet
Mercredi 26 décembre
Après la construction du site pour la présentation des résultats finaux, le projet touche à sa fin.
Site visible ICI
Mercredi 26 décembre
Après la construction du site pour la présentation des résultats finaux, le projet touche à sa fin.
Site visible ICI
Dimanche 15 décembre
Ca y est. Le script est enfin terminé...
Tous les petits problèmes ont été résolus :
- pour les pages que le programme semblait "oublier", c'était tout simplement notre motif d'egrep qui ne prenait pas certains mots en compte (lorsqu'ils étaient précédés ou suivis d'une virgule, par exemple).
Nous avons donc améliorer notre motif et cela nous donne :
egrep "(^|\.|,|;| )$traduction(s| |\.|;|,|$)"
C'est à dire que le programme cherche le mot de la variable
en début de ligne, en fin de ligne,
précédé ou suivi d'un point
précédé ou suivi d'une virgule
précédé ou suivi d'un espace
suivi d'un s.
- Un nouveau problème s'est cependant ajouté :
Nous avons voulu que le mot cherché apparaisse en rouge dans la colonne du contexte, mais avec une ligne de commande toute simple : sed "s/$traduction/<FONT COLOR=red>$traduction/g", le résultat n'était pas satisfaisant : si le programme rencontré la même chaine de caractères à l'intérieur d'un mot, il l'appliquait quand même, et il ne tenait absolument pas compte ni des mots en majuscules ni des s pluriels.
Pour le premier souci, une solution proposée a été de créer une nouvelle ligne de commande :
tr 'A-Z' 'a-z' qui transforme toutes les majuscules en minuscules;
Pour le deuxième, on a utilisé la commande
perl -pe
"s
/ motif à remplacer : (^|[^a-zA-Z0-9-])$traduction(s?)([^a-z])
/ par :<FONTCOLOR=red>\1$traduction\2\3<\/FONT>
/ig"
qui, comme c'est une commande perl, permet d'utiliser les expressions régulières dans la substitution.
on a donc le mot cherché, au pluriel ou non, en début de ligne, non précédé d'une lettre, d'un chiffre ou d'un tiret et non suivi d'une lettre. Afin que l'environnement du mot soit conservé après substitution, on met les expressions régulières entre parenthèses ce qui permet au programme de les considérer comme des variables que l'on réécrit dans le motif changé sous la forme \num .
Et juste un petit mot sur la syntaxe d'une commande de substitution : c'est la même chose que pour sed, mais ici, on a ajouté i qui permet de ne pas tenir compte de la casse. Cela nous évite donc au final d'utiliser la commande tr (présentée précédemment).
- pour les autres problèmes, cela ne dépend pas de nous, puisque c'est soit des problèmes d'aspiration des pages, soit que la page n'existe plus (ou est devenue payante, notamment pour les articles).
Nous avons cependant décidé de garder les URL's, et d'ajouter dans notre script une ligne qui vérifie si les principales commandes ont pu être appliquées (wget, lynx, ...) en vérifiant la taille en octet du fichier crée.
Cela nous permet ainsi, de traiter les pages qui pour l'instant fonctionnent encore mais pourraient aussi ne plus exister par la suite.
Lundi 10 décembre
On constate encore quelques petites problèmes quant à l'aspiration des pages web, et a leur enregistrement dans un fichier texte.
Pour ce dernier problème, nous n'avons pas encore trouvé de quoi il s'agissait.
Affaire à suivre !
Lundi 4 décembre
A partir de ce que l'on a dit précédemment,
on imagine assez facilement ce qu'on va devoir ajouter à notre programme :
1. Une condition if, qui va nous permettre de séparer #mot_ou_traduction et les URL's,
A partir de là, deux cas :
si la ligne commence par #, alors on prend le mot comme variable,
sinon, on traite la ligne d'URL, c'est à dire qu'on applique ce qu'on a dans notre programme pour l'instant (wget, ...) et on ajoute egrep avec comme motif : la variable précédente (à noter que la variable précéde toujours les URLs dans lesquelles on la retrouve) + le traitement html,
2. Il ne faut pas oublier que l'on avait au début de notre programme une petite boucle FOR qui nous permettait de compter le nombre de lignes du fichier, afin d'avoir le nombre de lignes à donner au tableau. Il nous faut donc ici, modifier un peu cette boucle et ajouter une condition : on ajoutera 1 au compteur quand la ligne commence par http, c'est à dire quand c'est une URL.
Petit problème rencontré pour le 1.:
à partir d'un fichier texte de la forme
#runway
http://.....
#landing strip
http://
lorsqu'on lui demande d'afficher les lignes une par une, il écrit pour la 3ème ligne,
#landing
strip,
c'est à dire qu'il fait comme si l'espace entre les deux était un retour chariot.
en fait,
Comme nous l'a expliqué Mr Fleury,
Quand on fait dans le script un for ligne in `cat $fichierURL
Dans un premier temps, la commande cat va afficher le contenu du fichier :
#runway
http://....
http://....
#landing strip
http://
Etc.
Ensuite la boucle for consiste à traiter chacun des éléments de la pseudo-liste que l’on peut associer à la sortie précédente et les associer dans un premier temps à la variable ligne.
Cette pseudo liste est en fait constitué par le découpage de cette longue chaîne de caractère en prenant comme séparateur le caractère espace. Cette liste ressemble donc à ceci :
(#runway, http://..., http://...,#landing, strip, http://..., etc)
Et on voit bien qu’il va y avoir un pb !
solution : relier landing et strip par - , l'ensemble traité sera donc #landing-strip, pour avoir une variable du mot que l'on veut repérer ensuite dans la page dumpée, on utilisera 2fois la commande sed associée à une substitution
"s/ce_que_l'on_veut_enlever/ce_par_quoi_on_veut_le_remplacer/g"
ce qui nous donne les deux commandes suivantes :
sed -e "s/#//g" tempo.txt
sed -e "s/-/ /g"
Dimanche 3 décembre
On a encore une dernière colonne à réaliser dans les tableaux : il s'agit de récupérer les lignes des fichiers dumpés contenant le mot PISTE ou ses équivalents en anglais.
A partir de là, nouvelle question : comment indiquer au programme les mots que l'on veut retrouver?
Première solution (très simple) envisagée : entrer directement au clavier les mots souhaités.
Problème : cela va nous obliger à rentrer un certain nombre de mots pour l'anglais, puisqu'on a jusqu'à trois traductions anglaises pour un sens.
Nous avons donc opté pour une deuxième solution qui consisterait à ajouter, dans nos fichiers d'URLs de départ, une ligne contenant le mot, et surmontant les URL's concernés.
Nous avons décidé de commencer la ligne par un '#' afin de la distinguer plus facilement.
Cela nous donnera donc
Jeudi 29 novembre
Le voici le voilà !
Après une petite semaine d'interruption passé sur la Génération automatique de textes : THE script est enfin arrivé !
Avec ajout de la fonction dump, qui récupère le texte des pages aspirées et l'enregistre dans un fichier texte.
On ajoute donc la commande :
lynx -dump URL > URL.txt
Résultats
Le script : aspir_htmlv3
Le tableau : jkfhejhejkezkjl
Dimanche 25 novembre
Voici le nouveau script
Il n'y a rien de très nouveau, puisqu'il s'agissait surtout de faire fonctionner l'ancien script avec la nouvelle arborescence,
On notera donc quelques changements, mais pas de nouvelles notions depuis le dernier script.
A noter simplement, l'utilisation de la commande basename
qui se présente sous la forme basename nom_du_fichier extension_à_éliminer
et qui nous permet ici de créer un dossier pour chaque langue dans pagesaspirees, en récupérant le nom des dossiers à partir des fichiers .txt du dossier PISTE.
Dans l'invite de commande, durant l'aspiration des pages, nous avons pu observer le "travail" effectué par le script, et ainsi noter que certaines pages n'arrivent pas à être aspirées du premier coup (ligne jaune). Dans ce cas, le script essaye une deuxième fois (en l'occurence, cela a fonctionné la deuxième fois : lignes rouges). Et comme nous avons gardé l'option -t2 qui limite à deux le nombre d'essai, il s'arrête ensuite là.
D'autre part, certaines pages ne sont pas aspirées et l'invite de commande nous indique une erreur (cadre jaune). A comparer avec les indications de l'invite lorsque la pages est aspirée (cadre rouge)
voici donc le script :aspir_htmlv3
et le résultat : tableau
Dimanche 18 novembre
Comme nous l'avons dit dans l'article précédent, le résultat de notre script ne nous satisfait pas totalement. En effet, nous avons obtenu un tableau par sens et par langue, ce qui rend la page html relativement longue. De plus, et c'est surtout cela qui nous embêtait, notre script traite d'abord tous les sens en anglais, puis en francais. D'un point de vue linguistique, il nous semble pertinent de pouvoir comparer d'un coup d'oeil le contexte à la fois en francais et en anglais. Nous avons donc décidé de changer un peu le script.
Cependant, nous nous sommes vite rendues compte que notre organisation d'alors (un dossier par langue contenant des sous-dossiers par sens) n'était pas la plus simple et la plus pratique pour le résultat que nous voulions obtenir.
Nous avons donc décidé de changer notre organisation, et de créer sept sous-dossiers, un pour chaque sens, dans le dossier PISTE, puis d'y insérer les fichiers texte contenant les URL's, un en français et un en anglais.
Cela nous donne l'arborescence suivante :
Jeudi 15 novembre
Nous avons donc maintenant :
En concaténant ces deux scripts nous devrions donc pouvoir :
On utilise les mêmes commandes Unix que pour le programme aspirer.sh.
Par rapport au premier script de tableau, on doit ajouter un deuxième compteur pour les pages aspirées en veillant à le nommer autrement afin qu'il n'entre pas en conflit avec le premier.
On obtient un script Bash qui commence a devenir un peu compliqué : aspirerv2.sh
Le résultat est le suivant : aspirerv2
(Bien entendu, les liens vers les pages aspirées ne fonctionnent pas ici. Et l'extension .html du nom de fichier a été rajouté à la main, canalblog ne permettant pas l'hébergement de fichier sans extension.)
Inconvénient : Du fait que le script aspire systématiquement toutes les pages URL, son éxécution prend facilement deux à trois minutes à chaque fois, ce qui peut s'avérer un peu long lorsque l'on tente des modifications du code. Mais dans l'ensemble, il nous évite un grand nombre de manipulations répétitives, et permet d'effectuer toutes les opérations avec une seule application.
A noter que le script devrait subir des modifications prochainement par rapport à la présentation des tableaux qui ne nous convient pas pour le moment.