Algoritmo per implementare una nuvola di parole come Wordle


201

Contesto

Le mie domande

  • C'è un algoritmo disponibile che fa ciò che fa Wordle?
  • In caso negativo, quali sono alcune alternative che producono tipi simili di output?

Perché lo sto chiedendo

  • solo curioso
  • voglio imparare

1
C'è un'implementazione alternativa, basata sull'elaborazione delle immagini qui . Non molto veloce, ma molto flessibile e buono per la sperimentazione. (C'è un'implementazione completa fornita in Mathematica.)
Szabolcs,

2
Mi è venuto in mente il mio algoritmo (piuttosto semplice) e ne ho scritto un blog . È scritto in Python e dovrebbe essere facile da personalizzare. Ho cercato di renderlo a metà strada efficiente. ! inserisci qui la descrizione dell'immagine
Andreas Mueller

4
Mi è piaciuto molto il modo in cui hai posto questa domanda! +1
kolistivra

Risposte:


472

Sono il creatore di Wordle. Ecco come funziona Wordle:

Conta le parole, elimina le parole noiose e ordina in base al conteggio, scendendo. Mantieni le prime N parole per alcuni N. Assegna ad ogni parola una dimensione del carattere proporzionale al suo conteggio. Genera una forma Java2D per ogni parola, utilizzando l'API Java2D.

Ogni parola "vuole" essere da qualche parte, come "in una posizione x casuale nel centro verticale". In ordine decrescente di frequenza, procedere per ogni parola:

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

Questo è tutto. La parte difficile sta nel fare il test di intersezione in modo efficiente, per il quale utilizzo la cache dell'ultimo colpo, i riquadri di delimitazione gerarchici e un indice spaziale quadrifoglio (tutte cose che puoi imparare di più con un diligente googling).

Modifica: Come ha sottolineato Reto Aebersold, ora c'è un capitolo del libro, disponibile gratuitamente, che copre questo stesso territorio: Bella visualizzazione, Capitolo 3: Wordle


22
"Diligente googling". Mi piace :)
zengr

6
Maggiori informazioni qui: static.mrfeinberg.com/bv_ch03.pdf - Grazie Jonathan.
Reto Aebersold,

Grazie per l'informazione Jonathan - Sono affascinato da algoritmi semplicissimi che possono creare fantastiche visualizzazioni come questa.
John Patrick,

Sono ancora un po 'perplesso sulla parte "vuole essere da qualche parte". La posizione iniziale delle parole è davvero casuale?
adib,

30
la bellezza di SO..la persona di cui stai facendo domande, potrebbe effettivamente rispondere alla tua domanda!
Arnab Datta,

33

Ecco un bellissimo javascript di Jason Davies che utilizza d3. Puoi persino usare i font web con esso.

Demo: http://www.jasondavies.com/wordcloud/

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


È molto semplice copiare i file src = ". Js" e ricaricarli per crearli o utilizzarli così come sono. Grazie per la condivisione e funziona alla grande!
Michael d

C'è un modo per cambiare la tavolozza dei colori in qualcosa di più estetico? Ho provato a modificare il file js dalla chiamata JSON da: colourlovers.com/api/palettes/random a colourlovers.com/api/palettes/top come l'API di colourlovers raccomanda, ma la palette è rimasta la stessa.
Michael d

Ecco un esempio di lavoro reattivo basato sulla demo ma con il pieno controllo di parole e colori. Per una tavolozza di colori personalizzata, utilizzare invece il codice commentato. jsbin.com/kiwojayoye/1/edit?html,js,output
Martin Braun

33

Ho implementato un algoritmo come descritto da Jonathan Feinberg usando Python per creare una nuvola di tag. È lontano dalle bellissime nuvole di wordle.net ma ti dà un'idea di come si potrebbe fare.

Puoi trovare il progetto qui .


Grazie per la condivisione! Sicuramente esaminerò la tua implementazione.
namenlos,

Questo e spettacolare. Grazie!
Tokku

Il link (labs.atizo.com) viene nuovamente interrotto. Dovresti davvero pubblicare un'immagine di esempio o due in modo da poter vedere il confronto.
smci,

@RetoAebersold c'è comunque un modo per integrare questo codice con il pallone o il framework django?
Mitul Shah,

30

Ho creato un componente Silverlight che utilizza l'algoritmo che Jonathan suggerisce qui. Il codice sorgente e i progetti di esempio sono tutti disponibili sul mio blog:

http://whydoidoit.com

Nuvola di parole di colore

My cloud ti consente di colorare parole e dimensioni in base a diversi pesi e supporta la selezione delle parole (da una coordinata) e l'evidenziazione delle parole selezionate. La fonte è tua da usare come meglio credi.

Esempio Word Cloud


2
Il tuo blog sembra essere vuoto. Il link è morto?
OR Mapper

Ecco l'istantanea di archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/… Ho anche trovato il progetto su github github.com/whydoidoit/WordCloud
CJK 15-15

14

Sto lavorando su WordCram , una libreria di elaborazione per creare nuvole di parole. È abbastanza fortemente influenzato da Wordle ed è informato dallo stesso PDF collegato sopra. Gestisce il rilevamento delle collisioni per te e ti consente di concentrarti su come vuoi che le tue parole siano disposte, colorate, ruotate, ecc.


Il tuo servizio offre un'API?
Bart il

Siamo spiacenti, WordCram non ha un'API. È una biblioteca, non un servizio.
Dan Bernier,


8

Stavo cercando una visualizzazione simile a un wordle che consentisse di assegnare colore, posizione iniziale e dimensioni di una stringa correlata ad altri dati, come la pertinenza all'interno di un testo, non ha trovato nulla, ma grazie alle informazioni che ho trovato qui (Soprattutto la spiegazione di Jonathan e il link di aeby), ho finalmente potuto implementare ' Cloudio ', che si avvicina relativamente a Wordle (almeno credo di sì ...) e offre le funzionalità che stavo cercando.

È implementato con SWT e JFace e ho cercato di integrarlo nel modello MVC di JFace, in modo da poter impostare provider di contenuti ed etichette per modificare il layout di un cloud e aggiungerlo ad altri plug-in Eclipse o RCP Apps. È inoltre possibile modificare il modo in cui viene calcolata la posizione iniziale di una stringa, in modo che non sia difficile utilizzarla per la visualizzazione del cluster o altro. È ancora scarsamente documentato e limitato in alcuni modi (e ho fatto il caricamento iniziale poche ore fa, quindi potrebbe essere ancora un po 'difettoso), ma se sei interessato, ecco il link:

Ed ecco un link ad alcuni cloud creati, nel caso in cui desideri una rapida impressione: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Saluti, Stephan


8

Qui vedi la mia implementazione di Wordle come cloud. Utilizza lo stesso algoritmo a spirale e la struttura dati QuadTree.

http://sourcecodecloud.codeplex.com

o

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


sourcecodecloud non è scaricabile, anche il secondo link non funziona
Sagar Nikam

Ho verificato il codice sorgente / download del primo link. Ha funzionato. Il secondo collegamento è stato spostato. Ora risolto.
George Mamaladze,

4

Lion and Lamb è un'app iOS open source che crea nuvole di parole utilizzando le parole più frequenti di un libro della Bibbia scelto.

Si basa sull'algoritmo descritto da Jonathan Feinberg. I test di successo utilizzano un albero quad, ma i rettangoli si basano sul rettangolo di delimitazione del glifo. Voglio scomporre il glifo in molti rect di delimitazione più piccoli per consentire il posizionamento delle parole all'interno del riquadro di delimitazione di un glifo.

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

Una nuvola di parole del libro biblico dell'Apocalisse


4

Ho un generatore di Tag Cloud qui, che io chiamo Disorganizer :)

Fonti TagCloudService e il controllo markup del rasoio e un WinForm a scopo di test che puoi inserire nel tuo blog, profilo, ecc. Con un piccolo involucro attorno ad esso. Utilizza lo spazio dei nomi C # 4.0 e System.Drawing pesantemente.

L'ho creato perché con gli altri generatori di cloud non è possibile fare clic sui tag per spostarsi e non è possibile creare animazioni al passaggio del mouse per mostrare che sono selezionabili. Dato che mostrare l'animazione al passaggio del mouse in HTML è necessario per me (lo sto facendo con <a>tag sovrapposti e posizionati in modo assoluto ) Non ho sviluppato la visualizzazione di parole ad angolo qualsiasi: sono verticali o orizzontali.

Avvertenza: i link sopra potrebbero diventare non validi tra qualche mese, ho intenzione di scioglierlo lentamente dal progetto circostante in un progetto separato.

Puoi vedere una demo funzionante in questo post di blog di esempio , ma è incompleta e in un sito incompleto. Contattami se qualcuno vuole contribuire, andrò a separarlo al più presto.


I collegamenti non sono validi. Mi piace l'interfaccia utente sul tuo blog.
Doug S,

Grazie, li
ho

2

Ecco un'altra implementazione end-to-end di wordle in Python 3 in gran parte basata sullo schema iniziale di Jonathan Feinberg (QuadTrees, spirali, ecc.).

Il codice (commentato, con file Leggimi dettagliato) è disponibile gratuitamente in questo repository Github e questo è un wordle di esempio creato con il codice.

Macbeth


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.