J'ai commencé à travailler sur le script Wordalizer en... septembre 2008 ! Jonathan Feinberg venait de lancer son époustouflant Wordle, une applet Java générant des nuages de mots typographiques d'une incroyable fraîcheur — tandis que les spécialistes des « technologies du langage » s'émerveillaient encore devant les simples tag clouds CSS. Quant à moi, j'imaginais naïvement que je pourrais reproduire toute la puissance de Wordle dans InDesign moyennant quelques bons coups de cravache sur le DOM ! Je n'avais pas encore mesuré la complexité et les enjeux de l'algorithme élaboré par Feinberg. C'est en lisant ce billet (et ses commentaires) sur le “Kelso’s Corner” blog que j'ai commencé à comprendre ma douleur. Feinberg explique: « It’s not quite ‘simple bounding box,’ which wouldn’t permit words inside words, or nestling up to ascenders and descenders. It’s full glyph intersection testing, but with a sprinkle of CS applied to make it work at interactive speeds. »

Wordalizer est un script générateur de « nuages de mots » pour InDesign CS4.

En effet ! Le défi est d'accélérer au maximum les tests de collisions afin de rendre le temps de travail supportable. Vous n'imaginez pas combien ce petit problème d'optimisation, dans l'environnement Java, devient un casse-tête insondable une fois transposé dans le contexte du scripting InDesign. Mes tentatives se sont longtemps heurtées au mur du temps d'exécution et c'est après des mois de surplace que j'ai finalement repris le script à partir de zéro. Malgré le secret industriel auquel est tenu Jonathan Feinberg (le code de Wordle appartient en partie à IBM), ce dernier a disséminé sur le Net quelques indices sur son approche algorithmique. Une clé essentielle en a été livrée au détour d'une question débattue sur StackOverflow: “Algorithm to implement something like Wordle”. J'ai également déniché un papier de synthèse très éclairant sur le site IBM Research: “Participatory Visualization with Wordle” (PDF) — document signé par Fernanda B. Viégas, Martin Wattenberg et Jonathan Feinberg.

Tous ces éléments m'ont permis d'élaborer une nouvelle stratégie pour conjurer les délais insoutenables d'InDesign en matière de calcul polygonal. Wordalizer implémente certaines des techniques révélées par Feinberg (indexation spatiale via un quadtree, décomposition des formes vectorisées en quadrillage hiérarchique, etc.). Bien sûr, mon outil ne peut pas rivaliser avec Wordle en termes de performances. Ce n'est qu'un script ! Mais je pense que la version d'essai vous amusera.

Boîte de dialogue de Wordalizer (Windows).

La capture ci-dessus montre la boîte de dialogue principale et ses paramètres. (Notez que la version d'essai inhibe la case à cocher « Éditer la liste pondérée » et ne permet pas à l'utilisateur de réutiliser, lors d'un ré-appel du script, la dernière extraction lexicale et les paramètres de production. Il faut donc recommencer l'analyse et refaire les réglages à chaque génération nuageuse.)

Voici, lorsqu'elle est disponible, la fenêtre d'édition d'une liste pondérée :

Fenêtre d'édition de la liste de termes pondérés.

Enfin, le nuage de mots résultant (basé sur Les Fleurs du mal) :

Extraction lexicale et nuage de mots produits par Wordalizer sur « Les Fleurs du mal ».

Avec un autre paramétrage :

Un autre paramétrage.

[MàJ] Dans sa version actuelle, Wordalizer supporte 6 langues. Placez comme d'habitude le fichier, WordalizerTry.js, dans votre dossier de Scripts InDesign. Il n'y aura plus qu'à cliquer pour vous plonger la tête dans les nuages.

Mise à jour: version 1.25 disponible !