lundi 30 janvier 2012

Le site web

On s'approche au bout du tunnel! Le script est plus que fini (on a fait une dernière modification en ajoutant un délimiteur de paragraphe "§" entre chaque contexte pour l'analyse avec trameur) et les nuages sont faites. On a trouvé un modèle de site sur http://www.globaltemplates.com et on est actuellement en train de modifier le code pour l'adapter à nos besoins.

Voici une petite démo de notre site final : on présentera notre projet et notre aventure à la recherche du verbe "jouer" et ses traductions en anglais et en italien.
Il y aura une partie dédié aux nuages crées par Wordle et une partie dédié au script qui nous a permis d'automatiser la recherche et d'arriver au nuages par l'extraction du motif et ses contextes. Il y aura aussi une partie dédié à l'analyse linguistique...
En fait, parallèlement on a travaillé avec "Trameur" : on a rencontré des difficultés au tout début (il fallait faire de la pratique :-), mais finalement on a compris comment calculer la fréquence des mots "attirés" par le motif cherché, comment visualiser la concordance du motif et les contextes (gauche et droite) dans lesquelles on le retrouve. On a focalisé notre attention surtout sur des constructions particuliers du verbe choisi, qui nous semblaient significatives pour notre analyse. Juste pour donner un exemple, on a analysé la construction "jouer un rôle" en français et on a vu comment elle se réalise dans la traduction en italien. On a analysé des autres constructions significatives en anglais... mais tout ça sera une nouvelle surprise que vous verrez avec notre site! ;-)

dimanche 22 janvier 2012

Nuages de mots avec Wordle

On a résolu un petit problème de concatenation du contenu des fichiers .txt et on a terminé notre script ! Notre aventure est arrivée à une étape très importante ! :-)
Pour ce faire on a créé des fichiers qui s'appellent "Contextesglobaux" pour chaque langue prise en compte par notre analyse: français, anglais et italien, et pour les deux parties à analyser : critique de cinéma et critique de théâtre.
D'abord on a essayé de construire de nuages de mots avec Wordle, en ajoutant le contenu de chaque fichier appelé "Contextesglobaux" pour le verbe français "jouer" (et les verbes correspondant en anglais et italien). Dans le tableau noir à gauche, il y a le résultat pour ce qui concerne l'analyse de la critique de cinéma et dans le tableau ci-dessous, il y a le résultat pour ce qui concerne l'analyse de la critique de théâtre. On a remarqué plusieurs éléments utils pour notre analyse linguistique:

1) Pour ce qui concerne le verbe "jouer" en français (mais aussi bien "play" en anglais et "interpretare" en italien), il n'y a pas beaucoup de différences entre les nuages de mots qui composent les critique de cinéma et les nuages de mots  qui composent les critique de théâtre.
2) Toutefois, une différence très importante, c'est la liaison entre le verbe choisi (le motif) et les mots du contexte extrait. Par exemple, dans le contexte du verbe "jouer" dans les critiques de cinéma le mot "film" est très fréquemment lié au "jouer", par contre dans les critiques de théâtre  le mot "pièces" est plus fréquemment lié au "jouer").
3) Cette remarque nous conduit à penser que notre analyse ne doit pas unifier les contextes de cinéma et théâtre parce que, autrement, les différences significatives iraient disparaître.

Ici, dans notre blog, on a présenté juste des exemples d'analyse mais on développera tout ça dans le site web qu'on est en train de construire et qui contient une comparaison des nuages de mots dans les trois langues pour chaque type de critique. Le Trameur nous permettra de développer ces intuitions parce que il donne la possibilité de construire de nuages de mots contextualisées. Notre prochaine post sera alors dédié aux résultats de ce type d'analyse...

mercredi 4 janvier 2012

Vers la deuxième partie du projet


On se dirige vers la deuxième partie du projet, laquelle on va construire "des nuages et des arbres des mots". La première phase était la constitution de notre corpus. Le but sera celui de construire un site qui présente une analyse de notre corpus et contient un lien vers notre blog.

Avec Ardas et Prof. Daube, on a réglé les problèmes que nous restaient à résoudre, en ajoutant quelque ligne de code (en gras):

egrep -i "\bjou(e|ent|er|é|ait|aient)\b|\bpla(y|ys|yed)\b|\bac(t|ts|ted)\b|\brecit|gioc|interpret(a|ano|are|ato|ava|avano)\b" ./DUMP-TEXT/$j/$i-utf8.txt > ./CONTEXTES/$j/$i-motif.txt ;
                                                           echo "<html><head><title>motif $i</title><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/></head><body>" > ./CONTEXTES/$j/$i-motif.html;
                                                           egrep -i "\bjou(e|ent|er|é|ait|aient)\b|\bpla(y|ys|yed)\b|\bac(t|ts|ted)\b|\brecit|gioc|interpret(a|ano|are|ato|ava|avano)\b" ./DUMP-TEXT/$j/$i-utf8.txt >> ./CONTEXTES/$j/$i-motif.html ;
                                                           echo "</body></html>" >> ./CONTEXTES/$j/$i-motif.html;

Autrement dit, on a ajouté des balises .html aux fichiers.html créés dans le flux de sortie pour éviter le problème d’affichage créé par le navigateur utilisé. Il ne nous reste que créer un seul fichier qui concatène tous les fichiers .html pour pouvoir donner une représentation graphique de toutes les occurrences de mots qui nous intéressent (i.e. jouer, play, perform, giocare, recitare, interpretare...). Pour ce faire il faudra ajouter deux lignes de code, en utilisant la commande cat qui nous permet de concatener les résultats de l'extraction du motif:

cat ./CONTEXTES/$j/$i-motif.txt >> ./PROGRAMMES/fichierglobal.txt
cat ./CONTEXTES/$j/$i-motif.html >> ./PROGRAMMES/fichierglobal.html

En fait, dans la deuxième phase, on va construire des nuages, c'est-à-dire des graphes ou des représentations graphiques des mots cherchés. Au tout début, on utilisera une application qui s'appelle Wordle (http://www.wordle.net/). Wordle peut nous donner une cartographie des mots choisis et de ses co-occurrences. Il va aussi supprimer les mots communs en français, comme par exemple "de", "des", "le", "la", "les", "un", "une", etc.  (c'est-à-dire les "mots vides", qui vont contituer un "antidictionnaire"). 

Puis, on utilisera autre application, qui s'appelle Trameur (http://www.tal.univ-paris3.fr/trameur/) et nous permettra de construire des nuages de mots, c’est-à-dire des trames des mots qui ne nous donnent pas seulement la forme graphique du mot cherché, mais aussi sa fréquence lexicale et le contexte où le mot apparaît. Le programme segmente le texte donné en mots et il construit un dictionnaire (avec une lemmatisation). Le texte est un flux textuel de mots (avec quatre types d’information : leur forme graphique, leur lemme, leurs catégories et leur fréquence).

On pourra aller plus loin avec une exploration encore plus précise : des graphes de mots qui nous donnent une liste de co-occurrentes des mots qui nous intéressent, i.e. les mots qui, par un calcul statistique, sont plus fréquemment dans le même contexte. On ira calculer la fréquence des mots autour du mot choisi (ex. "jouer"), pour voir quelles sont les mots le plus présentes et on pourra visualiser les mots "attirés" par le mot choisi. Le programme nous permet une analyse de la fréquence du mot, de sa co-fréquence avec les co-occurrentes et les contextes où le mot apparaît. On pourrait aussi demander quelles sont les mots les plus fréquents quand il y a des co-occurrentes : il nous donnera le chemin qui explique la concaténation des co-occurrences des mots choisis. Le but est de proposer une analyse linguistique intéressante à "jouer" en plusieurs langues, grâce à ces outils…

dimanche 1 janvier 2012

Un très joli tableau à 9 colonnes!

Nouvel an, nouvel tableau! ;-)
Notre aventure continue et on se dirige vers la fin de la première partie du projet.

Dans ces jours de vacance on a crée les fichiers .html qui manquaient dans la huitième colonne (et qu'on a appelé motif.html), en ajoutant les lignes de commande qu'on avait écrit dans le post précédente.

On a aussi réussi à régler les problèmes d'accès aux fichiers .txt et .html à partir des tableaux. Le problème était dû au fait que je ne m'étais pas placée dans le bon endroit pour lancer le programme, donc par conséquence tous les répertoires crées par le programme étaient à l'intérieur du seul répertoire "Programmes" et le programme ne pouvait pas trouver le chemin vers les fichiers...

Pour extraire les motifs cherchés dans les trois langues (français, anglais, italien), on a du ajuster l'expression régulière pour deux raisons :

1) au tout début on avait mal fermé les balises et le terminal nous donnait comme type d'erreur: "grep: Echec du pairage de ) ou de \)". Pour résoudre le problème, j'ai cherché sur le web et j'ai trouvé la réponse dans un forum des informaticiens (http://forum.hardware.fr/hfr/OSAlternatifs/Codes-scripts/erreur-tests-sujet_67610_1.htm)

2) puis la machine acceptait comme motif des mots comme "Jour", qu'on ne veut pas. Le problème  était dû au fait qu'on avait utilisé les parenthèses carrées (qui sélectionnent les caractères) à la place des parenthèses rondes (qui sélectionnent une suite des caractères).

Donc l'expression régulière qu'on a utilisé est:

"\bjou(e|ent|er|é|ait|aient)\b|\bpla(y|ys|yed)\b|\bac(t|ts|ted)\b|\brecit(a|ano|are|ato|ava|avano)\b|\bgioc(a|ano|are|ato|ava|avano)\b|\binterpret(a|ano|are|ato|ava|avano)\b"

et finalement on l'a simplifié comme ça :

"\bjou(e|ent|er|é|ait|aient)\b|\bpla(y|ys|yed)\b|\bac(t|ts|ted)\b|\brecit|gioc|interpret(a|ano|are|ato|ava|avano)\b" 

On pourrait encore affiner notre analyse, par exemple incluant des locutions comme "jouer un rôle", "to play a role", "interpretare un ruolo"... Mais on verra...

Voici le résultat pour ce qui concerne notre tableau final à 9 colonnes :


Deux problèmes nous restent encore à resoudre:

1) Il y a encore un problème avec le comptage de nos liens, on a essayé de changer la commande pour la variable "i" qui compte les fichiers (par contre, la variable "j" qui compte les répertoires est ok), mais on n'a pas trouvé une bonne solution...

2) Il y a 7 URLs avec 0 occurrences des motifs cherchés (plus ou moins 2 liens par langue). Le problème est crée par le fait que la page correspondant (en format .txt et en utf-8.txt) contient des (non)mots comme "joué", donc la commande egrep ne peut pas reconnaître le bon motif... ça veut dire qu'il y a encore des problèmes d'encodage à régler...

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: