214 votes

Algorithme pour implémenter un nuage de mots comme Wordle

Contexte

Mes questions

  • Existe-t-il un algorithme disponible qui fait ce que fait Wordle ?
  • Si ce n'est pas le cas, quelles sont les alternatives qui produisent des résultats similaires ?

Pourquoi je demande

  • juste curieux
  • veulent apprendre

1 votes

Il existe une autre solution, basée sur le traitement d'images. ici . Pas très rapide, mais très flexible et bon pour l'expérimentation. (Il y a une implémentation complète donnée en Mathematica).

2 votes

J'ai créé mon propre algorithme (assez simple) et en a parlé sur son blog . Il est écrit en Python et devrait être facile à personnaliser. J'ai essayé de le rendre à moitié efficace. ! Entrez la description de l'image ici

4 votes

J'ai vraiment aimé la façon dont vous avez posé cette question ! +1

516voto

Jonathan Feinberg Points 24791

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

Comptez les mots, éliminez les mots ennuyeux et triez-les en fonction de leur nombre, en ordre décroissant. Conservez les N premiers mots pendant un certain N. Attribuez à chaque mot une taille de police proportionnelle à son nombre. Générer une forme Java2D pour chaque mot, en utilisant l'API Java2D.

Chaque mot "veut" être quelque part, par exemple "à une position x aléatoire dans le centre vertical". Par ordre décroissant de fréquence, faites-le 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 ça. Le site dur La partie la plus importante consiste à effectuer les tests d'intersection de manière efficace, ce pour quoi j'utilise la mise en cache du dernier résultat, des boîtes de délimitation hiérarchiques et un index spatial en forme de quadruple arbre (toutes ces choses peuvent être apprises en faisant des recherches assidues sur Google).

Edit : Comme Reto Aebersold l'a signalé, il existe maintenant un chapitre de livre, librement disponible, qui couvre ce même territoire : Belle visualisation, chapitre 3 : Wordle

24 votes

"Diligent Googling". J'aime ça :)

7 votes

Plus d'informations ici : statique.mrfeinberg.com/bv_ch03.pdf - Merci Jonathan.

0 votes

Merci pour l'info Jonathan - Je suis fasciné par les algorithmes très simples qui permettent de créer de superbes visualisations comme celle-ci.

38voto

johnpolacek Points 1341

Voici une très belle application javascript de Jason Davies qui utilise d3. Vous pouvez même utiliser des polices de caractères web avec lui.

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

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

0 votes

Il est très facile de copier les fichiers src=".js" et de les retélécharger pour les utiliser comme base de travail ou pour les utiliser tels quels. Merci d'avoir partagé cette idée et elle fonctionne très bien !

0 votes

Y a-t-il un moyen de changer la palette de couleurs pour quelque chose de plus esthétique ? J'ai essayé de modifier le fichier js de l'appel JSON de : colourlovers.com/api/palettes/aléatoire à colourlovers.com/api/palettes/top comme le recommande l'API des amoureux de la couleur, mais la palette est restée la même.

0 votes

Voici un exemple fonctionnel basé sur la démo mais avec un contrôle total sur les mots et les couleurs. Pour une palette de couleurs personnalisée, veuillez utiliser le code commenté à la place. jsbin.com/kiwojayoye/1/edit?html,js,output

32voto

Reto Aebersold Points 6144

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 il vous donne une idée de la façon dont cela pourrait être fait.

Vous pouvez trouver le projet ici .

0 votes

Merci pour le partage ! Je vais certainement regarder votre mise en œuvre.

0 votes

Le lien (labs.atizo.com) est à nouveau cassé. Vous devriez vraiment poster un ou deux échantillons d'images pour que nous puissions voir la comparaison.

0 votes

@RetoAebersold y a-t-il un moyen d'intégrer ce code avec flask ou le framework django ?

31voto

Mike Talbot Points 283

J'ai créé un composant Silverlight qui utilise l'algorithme que Jonathan suggère ici. Le code source et les projets d'exemple sont tous disponibles sur mon blog :

http://whydoidoit.com

Color word cloud

Mon nuage vous permet de colorer et de dimensionner les mots en fonction de différentes pondérations et il prend en charge la sélection de mots (à partir d'une coordonnée) et la mise en évidence des mots sélectionnés. Vous pouvez utiliser la source comme bon vous semble.

Example Word Cloud

3 votes

Votre blog semble être vide. Le lien est-il mort ?

1 votes

Voici l'instantané d'archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/ J'ai également trouvé le projet sur github github.com/whydoidoit/WordCloud

14voto

Dan Bernier Points 136

Je travaille sur WordCram une bibliothèque Processing permettant de créer des nuages de mots. Elle est assez fortement influencée par Wordle, et s'appuie sur le même PDF aeby dont le lien figure ci-dessus. Elle gère la détection des collisions pour vous, et vous laisse vous concentrer sur la façon dont vous voulez que vos mots soient disposés, colorés, tournés, etc.

0 votes

Votre service offre-t-il une API ?

0 votes

Désolé, WordCram n'a pas d'API. C'est une bibliothèque, pas un service.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X