Un heureux évènement approche.

nddddIl s’agit là du dernier article de notre blog.

C’est le moment des finitions sur le site, des petites corrections finales, mais aussi du bilan.

Pour résumer notre ressentiment sur ce projet:

Etape 1 : trouver son groupe, et ses langues en fonction du groupe. (difficulté 0)

Etape 2 : trouver les URL’s (difficulté 0,5 : cela prend simplement du temps, mais cela ne nous a pas posé de problème majeur)

Etape 3: Le script

  • le html (difficulté 1, il faut simplement s’y mettre)
  • les pages aspirées (difficultés 1,5 nous n’avons pas eu de problème majeur avec wget)
  • Les dumps, contextes et index (difficulté 2, des difficultés principalement dues aux redirection de flux à ce moment là)
  • les expressions régulières (difficulté 4 en fonction de la Regex voulue…)
  • les conversions (difficulté 4, c’est le moment où ça fait des nœuds)

Etape 4 : le Trameur (difficulté 2, un grand merci aux étudiants de l’année précédente)

Etape 5 : Les nuages de mots (difficulté 0.5 , c’est à ce moment que l’on se rend compte qu’il est impératif de nettoyer les fichiers dump)

Etape 6 : La conception du site (difficulté 3, un plongeon dans l’autonomie, la débrouille, et l’autodidaxie).

Notre conclusion, notre expérience:

Au sein de notre groupe composé de trois « joyeux lurons », nous étions deux (grands) débutants. La première chose que l’on a apprise, c’est qu’avant même de pratiquer, il faut oser.

Le plus difficile, c’est le début. Le tout début, je précise, c’est-à-dire le moment où vous travaillez sous environnement Unix pour la première fois de votre vie et que vous passez dix minutes à chercher comment fermer une fenêtre. Le début comprend aussi les dix premières lignes de code, qui étaient majoritairement du html, des chevrons qui se baladent et s’entrechoquent, se boudent et s’unissent pour faire finalement un beau tableau. Le début c’est aussi les premiers messages d’erreurs du terminal qui provoque une inévitable hyperventilation : c’est la panique totale. Le début c’est quand vous insultez votre machine, parce que vous n’aviez pas encore compris que si cela ne fonctionne pas, c’est vous qui êtes à l’origine des erreurs. Bref, c’était pas glorieux.

Après avoir osé, c’est de la pratique. Une fois que l’on savait se balader via notre terminal, que l’on maitrisait les commandes basiques, et que l’on savait où chercher les informations pour faire (à peu près) ce que l’on voulait, ça allait mieux. Il nous est très souvent arrivé d’être confrontés à un problème, de passer des heures à le régler pour au final se dire « ah mais, on en a parlé en cours ». Parce que les cours sont une masse d’informations très utiles que notre cerveau ne peut pas emmagasiner autrement qu’en activant la mémoire procédurale. Un exemple concret : une partie d’un cours avait été consacrée à la théorie autour de la redirection de flux, un cours clair et limpide. Néanmoins, la majeure partie de nos erreurs étaient justement dues à cela, les points, les chevrons, ces petites choses là, dont on ne comprend réellement l’importance qu’à force de se tromper.

Un grand merci à M.Fleury, M.Daube et M. Belmouhoub .

Publicités

Nettoyage des fichiers – Round 2

Nous avions présenté notre solution pas très glamour pour nettoyer les fichiers des boutons sous forme + # *, une solution qui créait des fichiers intermédiaires à chaque étape, nous nous sommes retrouvés avec 800 fichiers dans le répertoire « pages_dump »…

Alors on présente la nouvelle solution du jour qui, pour commencer, ne génère pas autant de fichiers, et, pour finir permet de prendre en compte aussi la puce  » o  » qui nous donnait du fil à retordre, puisqu’il fallait supprimer les lignes commençant par ces puces  » o « , mais sans les lignes commençant par « on… » « others… » « ostra… ». :

sed 's/^[ \t| \s]*//;/^\(#\|*\|+\|o \)/d' essai.txt | awk '!a[$0]++' > essai2.txt

Maintenant que nous avons nettoyé nos fichiers des boutons, il n’y a plus qu’à recommencer le trameur.

Le Trameur

Première étape, on y intègre la nouvelle base, un des fichier global-dump.

1tramnellebase

L’onglet Cooc :

Nous avons d’abord opté pour y intégrer une stop-list (dans ProgramFiles) de la langue concernée, il y a possibilité pour la langue donnée, de choisir la version étendue.

2tramstoplist

On peut faire une recherche via une expression régulière (c’est notre choix), on peut aussi entre l’occurrence choisie sans expression régulière (décocher la case RegExp). Il est par ailleurs possible de régler la co-fréquence et le seuil, qui sont liés:

3tramparametrage

Sous forme de liste :

5tramliste

Il peut être utile d’exporter cette liste (voir la flèche). A partir de cette liste, il est possible de sélectionner une forme cooccurrente qui nous intéresse pour voir le contexte :

 

6tramconcordance

Et enfin, le trameur peut aussi générer les résultats sur une page html via l’onglet rapport :

 

Les Graphes:

Français :

4tramgraphefr2

Anglais :

9tramgrapheanglais

Espagnol:

10tramgrapheesp

 

Pour finir avec quelques définitions (issues du manuel du Trameur):

« Une coocurrence désigne l’apparition de deux mots en même temps et dans le même contexte. »

« Le seuil :(stat)quantité arbitrairement fixée au début d’une expérience visant à sélectionner parmi un grand nombre de résultats, ceux pour lesquels les valeurs d’un indice numérique dépassent ce seuil (de fréquence, en probabilité, etc.). « 

(toute petite parenthèse)

Nous avons eu un message d’erreur sur le trameur lorsque nous voulions entrer les global dump de l’espagnol. M. Fleury nous a fait remarquer que le trameur nous indiquait un code qui correspondait à un emoticone.

erreur-globaldump-es

Nous avons donc été à la recherche des caractères en question pour les supprimer (… manuellement, en attendant de trouver une meilleure solution pour nettoyer cela automatiquement, on y travaille)

emoticon

Un peu curieux, tout de même, on regarde d’un peu plus près ces caractères avec GHex :

hexas

Avec le code hexadécimal, nous avons retrouvé ce fameux emoticone ici:

9f9299

Par ailleurs, wikipédia est tout à fait en mesure de nous donner les émoticones correspondants aux codes Unicode.

 

Nettoyage de printemps

Pendant l’utilisation du trameur, nous est apparu un problème, ou des problèmes…

Tout d’abord, les répétitions. A chaque message que les personnes postent sur les forums, il se peut (et cela arrive souvent) que le message précédent soit cités (et recités). Il se peut aussi qu’à chaque message il y ait une répétition générée par le site même (nous l’avions dans l’article précédent avec le terme « abus »). Le trameur faisant bien son travail, il compte ces répétitions comme des occurrences, au final, nous nous retrouvons avec un corpus quelque peu faussé…

Autre chose polluait notre corpus, les boutons, les titres, les rubriques, qui apparaissaient sur les pages dumpées commençant par des  + des * ou des # .

Pour lutter contre tout ces petits tracas, on propose un solution  (qui n’est pas des plus glamour et légère peut-être):

scriptawksed

Avec awk, on supprime toutes les lignes qui sont identiques (comme par exemple  » signaler un abus  »
Avec le premier sed, on supprimer toutes les tabulations et les espaces au début de chaque ligne,Avec le deuxième sed, on supprime chaque ligne qui commencent (uniquement commencent) par un bouton du type + * #.

Vous l’aurez remarqué, nous avons dû crééer des fichiers intermédiaires entre chacune de ces étapes, d’où la lourdeur…

MAIS… on peut voir la différence entre tout d’abord les fichiers non nettoyés :

brutawksed

Et les fichiers dumps nettoyés :

nettoye

Il reste néanmoins des éléments « polluants », mais les boutons et répétitions étaient notre principal problème. On va pouvoir utiliser les fichiers dumps nettoyés pour le trameur désormais.

Essais.(à modifier)

Petits entraînements préliminaires : Le (fameux) Trameur, et les nuages.

Pour le Trameur:

Etape numéro 1, la nouvelle base:

tramfr1

L’étape numéro 2 : les « cooc »

Dans l’onglet Cooccurrences, nous allons faire une grande partie du travail. Tout d’abord et avant tout on active la stop-list ( pour éliminer les mots grammaticaux):

tramfr2

On sélectionne les cooccurrents du terme « implant »:

gdtramfr2

Quelque chose éveille ma curiosité, le terme « abus ». Si ce graphe indique de manière systématique les occurrences, il reste indispensable de ne pas se contenter des chiffres et de creuser un peu plus. Et puis à ce stade, nous pouvons nous amuser avec le trameur.

Pensant que j’allais tomber sur des bribes de pamphlets dénonçant une pratique abusive de l’implant cochléaire, je voulais voir le contexte phrastique. Cela tombe bien, c’est une des nombreuses fonctionnalités du Trameur. Ainsi, nous pouvons le faire par l’onglet concordance et les sous onglets « contexte-partie » ainsi que « tri-concordance ».

gdtramfr3..gdtramfr4

…En réalité, à part quelques occurrences relatives à des « abus médicaux », la majorité sont dues au même message automatique généré par les forums.

Du côté des nuages, je m’amuse aussi.

Petit essai sur Worditout:

nuageworditour

Autre petit essai sur le site Tagul, qui offre tout de même un large choix de possibilités. La possibilité aussi de trier les mots grammaticaux pour éviter un maximum leur apparition:

nuagestagul.png

.

Après beaucoup de torsions neuronales, et une intervention musclée de monsieur Fleury sur notre script, on commence à avoir un résultat pas trop mauvais.

Tout d’abord, on ne vous avait pas présenté notre expression régulière, qui prend on compte de terme dans les trois langues, et leurs dérivations, ainsi que leur abréviation.

expregu

Que l’on a testé directement sur le terminal avant de la mettre dans le script:

expreg

Autre chose que l’on a trouvé utile voire nécessaire, un fichier de log, quand une fois l’exécution du script terminée et que l’on ne peut pas voir, sur le terminal, le début. On met donc cela au début du script pour générer un fichier qui indique tout ce que le terminal affiche:

exec &> sortie.log

Un morceau de notre code:

0701307012

070140701507016

Vous pouvez le constater, on a préféré traiter d’abord rechercher le charset dans la page source, et en cas d’urgence, filtrer l’encodage avec fil puis iconv.

Enfin, notre tableau:

07017

 

Les contextes Dump (nous avons choisi de garder une ligne au dessus et une ligne au dessous.07018

Les index (que l’on va tenter de classer par fréquence par la suite):

07019

 

Les global-Dump :070110

Nous avons renoncé à faire les contextes html dans la mesure où le mini grep ne fonctionnait pas sur la machine, et que, étant donné nos langues, les contextes dumps étaient suffisants.

Il nous reste donc à peaufiner tout cela, continuer le site qui a été commencé, et, maintenant que nous avons les données nécessaires, nous attaquer au trameur.

Et pendant ce temps…

… dans le royaume du HTML – pendant que notre joyeuse équipe se battait et débattait avec l’affreux script bash semant de terrifiantes erreurs partout où il passait – la création de la page web avançait, peu à peu.

A ses modestes débuts, elle n’était qu’un simple brouillon de la page d’accueil, très simplement codée et franchement pas très sexy.

006

008

Mais bien vite et grâce à la magie du CSS, nous avons pu mettre un peu d’ordre et d’esthétisme là dedans. Obtenant, déjà, quelque chose d’un peu plus agréable pour l’utilisateur.

007

Puis, après plusieurs jours d’encodage, de modification, d’aller sur les jolis sites du World Wide Web pour leur piquer leur code source, nous avons obtenu un bien plus joli résultat. D’accord, on ne peut toujours QUE visiter la page d’accueil mais grâce à un approfondissement de HTML, de CSS et grâce aussi à Javascript, nous avons maintenant un entête défilant, des hyperliens vers chacune des pages théoriques du site, la possibilité de choisir parmi trois langues et une version de la page optimisée pour les malvoyants, ainsi que de jolies images et des gifs animés en langue signée faits-maison. Bref, que du chemin parcouru, que des heures à se crever les yeux et le chignon, que des lignes de code à revoir et corriger: quelles belles vacances de Noël! Vivement la rentrée qu’on puisse se reposer un peu.

011site

.

Après quelques difficultés avec notre script, nous avons opté pour un changement d’architecture (bon, quand je dis « nous », c’est pour souligner la cohésion du groupe, en vrai, c’est en grande partie Gaël qui a sauvé la mise).

L’architecture du script a été profondément modifiée. En effet, on va chercher directement le charset dans le code source plutôt que de passer par la commande file qui a ses limites, comme nous le faisions dans l’article précédent. Nous utiliserons cette dernière en dernier recours. Nous avons par ailleurs ajouté les index, autrement dit, un fichier txt indiquant la fréquence de chaque occurrences. Au passage, le terrain est préparé pour les contextes, ainsi que pour les « global dump », regroupant tous les dump par langue.

architexturescript

Et ça donne quelque chose comme cela :

botablo

Un beau tableau. Qui cache des choses:

Exemple de l’index n°1-4, qui a plutôt fonctionné:

index4

A la différence de l’index 1-9 :

index9

En réalité, pour toutes les pages qui ont subi une conversion, le même message d’erreur apparaît pour l’index.

Il nous faut donc encore corriger ce petit couac, nettoyer les fichiers qui sont ultra pollués par la nature même de notre corpus (les forums) avant de travailler sur les contextes…

 

**Autre petite chose un peu étrange, systématiquement, un message d’erreur apparaît sur le terminal pendant l’exécution pour le 1-3 :

erreurlynx

L’url fonctionne bien, le code source affiche bien « charset=utf-8 », la page aspirée et le dump s’affichent pourtant correctement.

 

Les histoires d’encodage.

Il y a quelques semaines, nous avions commencé à nous occuper des encodages, et bien évidemment, les entrer dans le tableau, avec d’une part une colonne stipulant l’encodage de départ, et l’encodage de sortie. L’encodage de sortie, c’est simple, c’est de l’UTF-8. Il faut donc tout convertir en UTF-8.

Tout d’abord, on commence avec la colonne encodage de départ, pour la colonne, c’est du html, pour l’encodage, c’est la commande file.

Les résultats sous forme de tableau:

finalscript2

Avec le script suivant:

IMAG1164

Donc, le programme va chercher l’encodage avec la commande file. Lorsque la commande file répond de l’UTF-8, c’est simple, cela indique « utf-8 » dans le tableau. Pour ceux qui ne sont pas en utf-8, la commande file peut nous donner autre chose (comme par exemple iso-8859-1), et quelque fois des indications sur l’encodage sans nous donner l’encodage exact (comme par exemple « unknown-8-bits »). Dans ce cas, nous allons directement chercher le charset dans la page source avec la commande egrep.

Mais…

probleme-iconv

on peut remarquer que iconv a des difficultés. Nous n’avons pas encore fait la colonne d’encodage de sortie, mais nous avons ici, que nous aurons quelques soucis.

On modifie légèrement le script :

IMAG1166

Et l’on se rend compte qu’on ne l’a peut-être pas modifié si légèrement que l’on pensait…

IMAG1165

D’ailleurs le terminal nous le signale :

IMAG1167

Là, on sait que iconv ne fonctionne pas comme on le veut quelque part…

On s’accorde un moment de réflexion pour revoir le script et les objectifs.