24 octobre 2006

Nuages de mots artisanaux

J'avais besoin il y a peu de temps d'un programme de construction de nuages de mots à la Nébuloscope pour visualiser les mots les plus fréquents dans des conversations de messagerie instantanée. C'est désormais chose faite avec Freecorp TagCloud Builder.

Ce petit programme gratuit consiste à charger une liste de mots avec leur nombre d'occurences dans un texte, fournie par exemple par l'utilitaire gratuit Dico de Jean Véronis. Après le réglage éventuel de quelques paramètres, le programme fournit une page html contenant le nuage de mots correspondant. J'ai naturellement choisi le style de nuages le plus joli que je connaisse... celui du Nébuloscope bien sûr (le code HTML des résultats du Nébuloscope est librement copiable, ça tombe bien ;)) ! Je trouve d'ailleurs très étonnant le succès des "tags clouds" ayant des styles beaucoup plus ternes, monochromes sur le site del.icio.us par exemple.

Passons un peu à la description des fonctionnalités du programme avant d'évoquer un problème technique. Le résultat du programme Dico appliqué sur un texte est une liste de mots au format texte détaillé ci-dessous :
N'importe quoi sur la première ligne
mot_le_plus_fréquent Nombre_d'occurences
deuxième_mot_le_plus_fréquent Nombre_d'occurences
...
(l'espace entre un mot et son nombre d'occurences étant en fait une tabulation)

Par exemple pour les mots les plus fréquents dans les avis cinéma de Monique Pantel (critique ciné dans l'émission On va se gêner de Laurent Ruquier sur Europe 1) :
Forme Fréquence
FILM 689
BEAU 149
PETIT 144
VOIR 142

Vous devez alors choisir le nombre de mots que vous voulez afficher dans le nuage (100 par défaut) et la largeur du nuage (300 pixels par défaut). D'autre part, les mots seront cliquables, un clic conduit sur une recherche Google de ce mot sur le site de votre choix, que vous pouvez configurer : c'est celui de la Wikipedia par défaut. La page web contenant le nuage est enregistrée par défaut dans le nom de fichier source, suffixé d'un ".html", et son code source s'affiche sur la fenêtre du programme, vous pouvez le copier/coller librement où vous voulez.

Un dernier paramètre est réglable, l'échelle. Ce réglage constitue le principal ennui technique des nuages de mots. Jean Véronis a apparemment réussi à le régler de façon admirable puisque les nuages font toujours bien apparaître en rouge/orange les mots les plus fréquents : ni trop ni pas assez. Il s'agit en effet de choisir à quelles plages de fréquences des mots on associe telle ou telle taille ou couleur dans le nuage. Supposons qu'on veut faire le nuage des 100 mots les plus présents, le plus présent l'étant 90 fois et le moins présent 40 fois. Sachant qu'il y a 10 variations possibles de taille/couleur, une stratégie pourrait consister à découper en 10 parties égales l'intervalle [40,89] des nombres d'occurences des 100 termes les plus présents. On écrirait donc en rouge et gras tous les mots présents entre 85 et 89 fois. En gris tout petit les mots présents entre 40 et 44 fois.

Mais rappelons-nous : les mots dans un texte sont généralement présents selon la loi de Zipf : peu de mots très présents, beaucoup de mots peu présents. D'un autre côté notre nuage doit aussi refléter cet effet, sans l'exagérer. Mais voilà ce qui se passe sur les avis de Monique Pantel si l'on choisit cette solution (image de gauche) :
Il faut donc renforcer un peu le poids des termes peu présents. J'ai donc essayé de considérer non pas les intervalles, mais les intervalles "passés à la racine", ce qui donne l'image de droite. Mieux, mais encore pas ça.

Quand on "passe les intervalles au log", on obtient un résultat à peu près satisfaisant qui montre bien l'enthousiasme de Monique pour certains films :
Ca reste toutefois peu robuste, et je réfléchis donc à une solution alternative, qui découperait l'intervalle des nombres d'occurences de façon "intelligente" par un algorithme de clustering des nombres d'occurences en 10 classes.

Voilà pour finir le nuage des 300 mots les plus fréquents dans les critiques de Monique Pantel de ces deux dernières années grâce à Dico et Freecorp TagCloud Builder !

2 commentaires:

Dado a dit…

Un autre intérêt, c'est qu'on n'a plus besoin de lire ses articles. Il suffit de connaître le résumé moyen :

"J'ai vraiment aimé aller voir ce film génial. C'est l'histoire d'une petite fille qui a peur du monde et des gens. Pendant ce temps, son père et sa mère font l'amour. Ca vaut le coup, c'est beau, l'histoire est vraiment arrivée dans la vie, la fin est magnifique et c'est très bien joué."

;)

Est-ce qu'il est possible d'appliquer cela au contenu d'un site web ou doit-on avoir les textes au format txt par exemple ?

FreeCorp a dit…

Héhé, excellent le "résumé moyen". J'ai lu un peu vite ton commentaire et j'ai cru que tu me citais une critique tout à fait authentique. Je me demande aussi si de même des livres seraient résumables en utilisant juste (ou principalement) les mots les plus fréquents...

Et pour les contenus de site web, c'est le programme Dico qui fait l'analyse des nombres d'occurences, et en effet il travaille seulement avec des textes au format txt (et TagCloud Builder se restreint même à l'encodage ANSI, il aime pas l'UTF8). Mais bon, il est possible de récupérer des sites en totalité avec des crawlers, puis extraire du HTML seulement la partie texte. Je dis possible, pas facile : il faut par exemple enlever le code correspondant aux menus, qui bruite tout, sinon (c'est aussi un problème que j'ai avec les logs GAIM, certains passages de conversation issus de copier/coller font exploser "artificiellement" certains nombres d'occurences).