web-dev-qa-db-fra.com

Algorithme pour implémenter un nuage Word comme Wordle

Le contexte

Mes questions

  • Y at-il un algorithme disponible qui fait ce que Wordle fait?
  • Si non, quelles sont les alternatives qui produisent des types de sortie similaires?

Pourquoi je demande

  • juste curieux
  • vouloir apprendre
196
namenlos

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

Comptez les mots, jetez les mots ennuyeux et triez-les par ordre décroissant. Conservez les N premiers mots pour quelques N. Attribuez à 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, par exemple "à une position x aléatoire dans le centre vertical". En ordre décroissant de fréquence, 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 ça. La partie difficile consiste à tester efficacement l'intersection, pour laquelle j'utilise la mise en cache du dernier accès, des cadres de sélection hiérarchiques et un index spatial à quatre arbres (tous vous pouvez en apprendre plus sur Google avec des recherches diligentes).

Edit: Comme Reto Aebersold l’a souligné, il existe maintenant un chapitre de livre, disponible gratuitement, qui couvre le même territoire: Belle visualisation, chapitre 3: Wordle

460
Jonathan Feinberg

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 superbes nuages ​​de wordle.net mais il vous donne une idée de ce que cela pourrait être. terminé.

Vous pouvez trouver le projet ici .

32
Reto Aebersold

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

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

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

31
johnpolacek

J'ai créé un composant Silverlight qui utilise l'algorithme suggéré par Jonathan. Le code source et les exemples de projets 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. Il prend en charge la sélection de Word (à partir d'une coordonnée) et la mise en surbrillance de Word sélectionnée. La source est à vous d'utiliser comme bon vous semble.

Example Word Cloud

31
Mike Talbot

Je travaille sur WordCram , une bibliothèque de traitement pour créer des nuages ​​Word. Il est assez fortement influencé par Wordle et est informé par le même PDF aeby lié à ce qui précède. Il gère la détection des collisions pour vous et vous permet de vous concentrer sur la manière dont vous voulez que vos mots soient disposés, colorés et colorés. , tourné, etc.

14
Dan Bernier

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

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

10
Wavel

Je cherchais une visualisation semblable à un wordle qui permettrait d'attribuer 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 - rien n'a été trouvé, mais grâce aux informations que j'ai trouvées ici (Surtout l'explication de Jonathan et le lien d'aeby), je pourrais enfin implémenter ' Cloudio ', qui est relativement proche de wordle (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 dans le 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'ajouter à d'autres plug-ins Eclipse ou RCP. applications. Vous pouvez également modifier le mode de calcul de la position initiale d'une chaîne, de sorte qu'il ne soit pas difficile de l'utiliser pour la visualisation de la grappe ou autre. Il est encore mal documenté et limité à certains égards (et j'avais déjà téléchargé le fichier il y a quelques heures, donc il est peut-être encore un peu bogué), mais si cela vous intéresse, voici le lien:

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

A bientôt, Stephan

8
sschwieb

Voir ici mon implémentation de Wordle comme nuage. 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

8
George Mamaladze

J'ai un générateur Tag Cloud ici, que j'appelle Désorganizer :)

Sources TagCloudService et le contrôle du balisage du rasoir et a WinForm à des fins de test que vous pouvez mettre dans votre blog, votre profil, etc., avec un petit wrapper autour il. Il utilise fortement les espaces de noms C # 4.0 et System.Drawing.

Je l'ai créé parce qu'avec les autres générateurs de nuages, vous ne pouvez pas cliquer sur les balises pour naviguer et ne pouvez pas créer d'animations en survol, pour montrer qu'elles sont cliquables. Depuis que montrer l’animation de survol en HTML est nécessaire pour moi (je le fais avec des superpositions superposées, en position absolue <a> tags) Je n'ai pas développé d'affichage Word à angle quelconque - ils sont soit verticaux, soit horizontaux.

Avertissement: Les liens ci-dessus risquent de ne plus être valables dans quelques mois. Je préviens de le détacher lentement du projet environnant dans un projet séparé.

Vous pouvez voir une démo en fonctionnement sur cet exemple de blog , mais elle est incomplète et sur un site incomplet. Contactez-moi si quelqu'un veut contribuer, je le séparerai dès que possible.

4
Zasz

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 de la Bible choisi.

Il est basé sur l'algorithme décrit par Jonathan Feinberg. Les tests d'impact utilisent un arbre quadruple, mais les boîtes englobantes sont basées sur le rectangle englobant du glyphe. Je souhaite décomposer le glyphe en plusieurs petits symboles pour permettre le placement de Word dans le cadre de sélection d'un glyphe.

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

A Word cloud of the Bible book of Revelation

4
user4151918

Voici encore une autre implémentation de bout en bout de wordle dans Python 3 largement inspirés du schéma initial de Jonathan Feinberg (QuadTrees, Spirals, etc.).

Le code (commenté, avec le fichier ReadMe détaillé) est disponible gratuitement sur ce référentiel Github et il s’agit d’un exemple de wordle créé avec le code.

Macbeth

1
Hayk