Algorithme pour implémenter un nuage de mots comme Wordle

Le contexte

  • Jetez un oeil à Wordle: http://www.wordle.net/
  • C’est beaucoup mieux que tout autre générateur de nuage de mots que j’ai vu
  • Remarque: la source n’est pas disponible – lisez la FAQ: http://www.wordle.net/faq#code

Mes questions

  • Existe-t-il un algorithme disponible pour Wordle?
  • Si non, quelles sont les alternatives qui produisent des productions similaires?

Pourquoi je demande

  • juste curieux
  • vouloir apprendre

Je suis le créateur de Wordle. Voici comment Wordle fonctionne:

Compter les mots, jeter les mots ennuyeux et sortinger par le compte, en descendant. Conservez les N premiers mots pour certains N. Atsortingbuez à chaque mot une taille de police proportionnelle à son nombre. Générez une forme Java2D pour chaque mot, à l’aide de l’API Java2D.

Chaque mot “veut” être quelque part, comme “à une certaine position x au centre vertical”. En ordre de fréquence décroissant, faites ceci pour chaque mot:

place the word where it wants to be while it intersects any of the previously placed words move it one step along an ever-increasing spiral 

C’est tout. La partie la plus difficile consiste à effectuer des tests d’intersection efficaces, pour lesquels j’utilise la mise en cache des derniers hits, des boîtes de délimitation hiérarchiques et un index spatial quadtree (qui sont des éléments dont vous pouvez vous familiariser avec Google).

Edit: Comme Reto Aebersold l’a souligné, il y a maintenant un chapitre de livre, disponible gratuitement, qui couvre ce même territoire: Beautiful Visualization, Chapter 3: Wordle

Voici un très beau javascript de Jason Davies qui utilise d3. Vous pouvez même utiliser des webfonts avec.

Démo: http://www.jasondavies.com/wordcloud/

Github: https://github.com/jasondavies/d3-cloud

J’ai implémenté un algorithme tel que décrit par Jonathan Feinberg en utilisant python pour créer un nuage de tags. Il est loin des beaux nuages ​​de wordle.net mais cela vous donne une idée de la manière dont cela pourrait être fait.

Vous pouvez trouver le projet ici .

J’ai créé un composant Silverlight qui utilise l’algorithme proposé par Jonathan ici. Le code source et les exemples de projets sont tous disponibles sur mon blog:

http://whydoidoit.com

Nuage de mots de couleur

Mon nuage vous permet de colorier et de dimensionner des mots en fonction de différentes pondérations. Il prend en charge la sélection de mots (à partir d’une coordonnée) et la mise en surbrillance de mots sélectionnés. La source est à vous d’utiliser comme bon vous semble.

Exemple de nuage de mots

Je travaille sur WordCram , une bibliothèque de traitement pour créer des nuages ​​de mots. Il est assez fortement influencé par Wordle et est informé par le même PDF aeby lié à ci-dessus. Il gère la détection de collision pour vous et vous permet de vous concentrer sur la manière dont vous souhaitez que vos mots soient disposés, colorés, pivotés, etc.

http://code.google.com/apis/visualization/documentation/gallery.html

Découvrez la visualisation de nuage de mots. Pas aussi chic que wordle.net mais vraiment facile à append à votre site.

Je cherchais une visualisation semblable à celle d’un wordle qui permettrait d’affecter la couleur, la position initiale et la taille d’une chaîne liée à d’autres données, telles que la pertinence dans un texte – n’a rien trouvé, mais grâce aux informations que j’ai trouvées ici (Surtout l’explication de Jonathan et le lien avec aeby), je pourrais enfin implémenter ‘ Cloudio ‘, qui se rapproche relativement du monde (du moins je le pense …) et offre les fonctionnalités que je cherchais.

Il est implémenté avec SWT et JFace, et j’ai essayé de l’intégrer au modèle MVC de JFace, de sorte que vous puissiez définir des fournisseurs de contenu et d’étiquettes pour modifier la disposition d’un nuage et l’append à d’autres plug-ins Eclipse ou RCP. applications. Vous pouvez également modifier la façon dont la position initiale d’une chaîne est calculée, de sorte qu’il ne soit pas difficile de l’utiliser pour la visualisation de cluster ou autre. Il est encore mal documenté et limité à certains égards (et j’ai effectué le téléchargement initial il y a quelques heures, il pourrait donc restr un peu bogué), mais si vous êtes intéressé, voici le lien:

Et voici un lien vers des nuages ​​créés, au cas où vous voudriez une impression rapide: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Cheers, Stephan

Voici mon implémentation de Wordle comme le cloud. Il utilise le même algorithme en spirale et la structure de données QuadTree.

http://sourcecodecloud.codeplex.com

ou

http://www.codeproject.com/Articles/224231/Word-Cloud-Tag-Cloud-Generator-Control-for-NET-Win

Lion and Lamb est une application iOS open-source qui crée des nuages ​​de mots en utilisant les mots les plus fréquents d’un livre choisi de la Bible.

Il est basé sur l’algorithme décrit par Jonathan Feinberg. Le test de hit utilise un arbre quadruple, mais les boîtes englobantes sont basées sur le rectangle englobant du glyphe. Je veux décomposer le glyphe en de nombreux petits recteurs englobants pour permettre le placement des mots dans le cadre de sélection d’un glyphe.

GitHub: https://github.com/PetahChristian/LionAndLamb

Un nuage de mots du livre biblique de l'Apocalypse

J’ai un générateur Tag Cloud ici, que j’appelle Disorganizer 🙂

Sources TagCloudService et le contrôle de balisage de razor et un WinForm à des fins de test que vous pouvez mettre dans votre blog, profil, etc. Il utilise beaucoup l’espace de noms C # 4.0 et System.Drawing.

Je l’ai créé car avec les autres générateurs de nuage, vous ne pouvez pas cliquer sur les balises pour naviguer et ne pas créer d’animations en vol stationnaire, pour montrer qu’elles sont cliquables. Comme il est nécessaire de montrer l’animation en vol stationnaire en HTML (je le fais avec des balises superposées et positionnées de manière absolue), je n’ai pas développé l’affichage de mots sans angle – ils sont verticaux ou horizontaux.

Attention: les liens ci-dessus peuvent ne plus être valables dans quelques mois, je prévois de les délier lentement du projet environnant dans un projet séparé.

Vous pouvez voir une démo de travail sur cet exemple de blog , mais elle est incomplète et sur un site incomplet. Contactez-moi si quelqu’un veut consortingbuer, je continuerai à le séparer dès que possible.

Le générateur TagCloud Zoomable , qui extrait les mots-clés d’une source donnée (fichier texte et autres sources) et affiche TagCloud comme interface utilisateur de zoom (ZUI)