vendredi 30 décembre 2011

Contextes

Notre script est bientôt fini, mais il nous reste une étape importante: l'extraction de notre mot dans les trois langues avec le nombre et le contexte de l'occurrence. Pour cela on utilisera la commande egrep plus une belle expression régulière qu'on placera après les commandes lynx et iconv. Maintenant qu'on sait où écrire la commande, qu'est ce qu'on écrit?

Puisqu'on travaille avec le français, l'italien et l'anglais on n'aura pas besoin du programme minigrep disponible sur le site du cours. De plus, on n'a pas réussi à installer ce programme à cause d'une erreur du type 'permission denied' et la commande sudo ne nous ont pas aidé, mais c'est peut-être parce que le terminal ne reconnaissait pas le mot de passe de Francesca.

Voici les nouvelles lignes de commande:

egrep -i "\bjouer\b|\bplay\b|\brecitare\b" ./DUMP-TXT/$j/$i-utf8.txt > ./CONTEXTES/$j/$i-motif.txt ;

nbOccur=??;
nbOccur=$(egrep -o -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt | wc -l );

-i pour ne pas prendre en compte la case
-l pour extraire la ligne avec l'occurrence du motif
wc sert à compter le nombre d'occurence
pour l'instant on veut juste tester une expression simple, donc on extrait le verbe à l'infinitif. Eventuellement l'expression (à vérifier) sera:
"\bjou[e|ent|er|é|ait|aient]\b|\bplay(s)?|ed\b|\bact(?)| (ed)?\b | \b|\brecit[a|ano|are|ato|ava|avano]\b|\b|\bgioc[a|ano|are|ato|ava|avano]\b|
\binterpret[a|ano|are|ato|ava|avano]\b"

Notre script préliminaire avec les nouvelles additions fait en partie ce qu'on lui demande à faire. Mais, il y a des lignes à modifier.

Quelques problèmes:
On a crée les fichiers txt mais ce script n'a pas crée les fichiers html. Peut-être en répetant la commande ça marchera:

egrep -i "\bjouer\b|\bplay\b|\brecitare\b" ./CONTEXTES/$j/$i-motif.txt > ./CONTEXTES/$j/$i-motif.html;



nbOccur=??;
nbOccur=$(egrep -o -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt | wc -l );

Avec notre script, on n'arrive pas à accéder les liens .txt (ni les .html d'ailleurs) à partir des tableaux.

Avec certains liens le seul contexte extrait est: 'jouer au poker avec bruno' ce qui n'est pas le contexte recherché, de plus, cette publicité ne s'affiche pas quand on vérifie la page web.

On a toujours un problème avec le comptage de nos liens. La moitié commence bien par 1 et l'autre moitié par 2 au lieu de 1, mais correspond à la première lien URL .

En résumé, il y a plusieurs modifications à faire, mais on avance.

mercredi 14 décembre 2011

Des solutions à quelques problèmes

Dans notre cours aujourd'hui avec un peu de réflexion de ma part et guidé par les professeurs, nos problèmes ont été résolu. D'autres ont été détécté, mais également résolus.

Le problème des liens doublés était à cause de deux fi mal placés du coup la condition if n'était pas fermé et le lien html refaisait la boucle. Le premier fi mal placé coorespondait à
s'il la page a été bien aspirée, on continue--- if [ "$retourcurl" = "0" ]
sinon on ne fait rien----------------------------else echo pas d'aspiration, pas de lynx)
fin de la condition ------------------------------fi
Le deuxième fi mal placé coorespondait à
s'il le charset de la page a été détécté----if [ "$encodage" = "utf-8" ]
if ["$VERIFENCODAGE" != "" ]
sinon on ne fait rien------------------------else echo encodage non-détécté
fin de la condition-------------------------fi

Pour vérifier que tous les if, then, else et fi sont bien placés, j'ai ouvert un nouveau fichier qui ne contient que la squelette de notre boucle.

Un autre problème s'affichait pendant l'exécution: le fichier $j/$i-utf8.txt dans le DUMP TEXT n'existait pas. En effet, on avait demandé à inconv de chercher le contenu dans ce fichier et le mettre dans DUMP-TEXT/$j/$i.txt au lieu de l'écrire à l'invers. Voici le bon ordre:

lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$j/$i.html > ./DUMP-TEXT/$j/$i.txt ;
iconv -f $encodage -t utf-8 ./DUMP-TEXT/$j/$i.txt > ./DUMP-TEXT/$j/$i-utf
8.txt ;

A la fin du cours j'ai constaté un dernier problème qu'on a pas encore étudié. Sur 3 tableaux, le premier lien n'a pas été traité et le tableau commence par le 2ème. Pourquoi serait-il?

mardi 13 décembre 2011

Notre cher script

Objectif : Lire un (ou plusieurs) fichier(s) contenant une liste d'URL, produire un fichier HTML contenant un (ou plusieurs) tableau(x) (à 3 colonnes chacun) regroupant (1) ces URLs, (2) les pages aspirées correspondantes, (3) les DUMPS des pages aspirées obtenus avec lynx. Etablir les liens vers les 3 ressources (URL, page locale, dump)

Pendant plusieurs semaines maintenant on a soigné, modifié et manipulé notre script afin d'avoir un tableau avec les colonnes suivantes: n° URL, URL, Pages Aspirées, Retour CURL, DUMP encodage initial et DUMP encodage UTF-8. On a rencontré des problèmes plus complexes qu'avant et les résoudre n'a pas toujours été evident.

Problème 1: Un problème de négligence à propos d'affichage avec echo. On avait affiché que l'encodage était non-détécté alors qu'on l'avait bien détécté.
Problème 2: Francesca travaille sur Linux mais moi, je travaille sur mac et je n'arrive pas à installer lynx sur ma machine. Je l'ai télécharger et dans le console j'ai écrit: sudo apt-get install lynx, mais sans résultat positif.
Problème 3: Nos liens sont testés plusieurs fois au lieu d'une seule fois. Certains sont testés une fois, d'autres 2 et encore d'autres 3. On a eliminé les fichiers cachés, mais le problème n'a pas été résolu. A quoi est lié ce problème? Comment le résoudre?

Voici notre script:

Et voici le résultat:

mercredi 7 décembre 2011

Extraction du contexte et comptage du mot "jouer"

On devra encore un peu ajuster notre script, mais on peut quand même continuer notre aventure. Le but de la prochaine phase est de ajouter trois colonnes à notre tableau. La première colonne contient l’extraction du contexte autour du mot qu’on a choisi (« jouer » et sa traduction en anglais et en italien) en format .txt et la deuxième colonne contient la même chose en format .html. La dernière colonne va contenir le contage du mot choisi. La commande egrep est la commande de filtrage qui permet à la machine de faire une recherche d’une chaîne de caractères dans un fichier. La syntaxe de la commande est : 

egrep -options
chaîne_de_caractères  nom_du_fichier

Pour identifier dans les contextes le mot « jouer », on aura besoin d’utiliser les expressions régulières ! Les expressions régulières, même si difficiles à déchiffrer, sont très utiles parce que servent pour décrire de manière générique des chaînes de caractères pour les traiter. Par exemple, on a déjà utilisé une expression régulière quand on a localisé dans la page html la chaîne de caractères « charset ». Grâce à une expression régulière, on va construire un « modèle » : le programme cherche le modèle et il trouve toutes les chaînes de caractères qui ressemblent au modèle choisi. Par exemple, le modéle \ble\b pour trouver l’article « le » ou le motif « le ».

Comment implémenter les expressions régulières ? En utilisant des caractères spéciaux, des opérateurs:
[ ] représente un caractère (Ex. R [iau]ng = ring, rang, rung)
| permet de marquer une alternative (Ex. Francesca|Ardas – Francesca, Ardas)
( ) pour délimiter la portée de l’opérateur | (Ex. in (any|every) – in any, in every)
[0-9] un caractère entre 0 et 9
^ négation d’une chaîne de caractères: comme ça on désigne un caractère qu’on ne veut pas (Ex. [^Dd] = ni D ni d). On peut l’utiliser pour supprimer de balises html, comme par exemple dans :
Sed –e s/<[^<>]*>//

Puis on a des caractères qui permettent de quantifier des expressions :
? option par rapport à l’expression qui le précède
* ce qui précède: il n’y a pas ou il y a pour n occurrences
+ au moins une occurrence
. permet de représenter n’importe quel caractère sauf le retour à la ligne

Et des opérateurs de frontière :
^ début de chaîne de caractères
$ fin de chaîne de caractères
Donc ^$ est une de chaîne de caractères vide
\w n’importe quel caractère alphanumérique
\b frontière de mot

Le paranthesage nous permet d’organiser la portée d’un opérateur. Toutefois, il y a un ordre d’importance, une hiérarchie à respecter :
fermeture  (*) > concaténation > union