Algorytm implementujący chmurę słów, taką jak Wordle

201

Kontekst

Moje pytania

  • Czy jest dostępny algorytm, który robi to, co robi Wordle?
  • Jeśli nie, jakie są alternatywy, które dają podobne wyniki?

Dlaczego pytam

  • po prostu ciekawy
  • chcieć się nauczyć
namenlos
źródło
1
Istnieje alternatywna implementacja, oparta na przetwarzaniu obrazu tutaj . Niezbyt szybki, ale bardzo elastyczny i dobry do eksperymentów. (W Mathematica podano pełną implementację).
Szabolcs
2
Wymyśliłem własny (dość prosty) algorytm i napisałem o nim na blogu . Jest napisany w Pythonie i powinien być łatwy do dostosowania. Starałem się uczynić go w połowie wydajnym. ! wprowadź opis zdjęcia tutaj
Andreas Mueller
4
Naprawdę podobał mi się sposób, w jaki zadałeś to pytanie! +1
kolistivra

Odpowiedzi:

472

Jestem twórcą Wordle. Oto, jak faktycznie działa Wordle:

Policz słowa, wyrzucaj nudne słowa i sortuj według liczby, malejąco. Zachowaj górne N słów dla niektórych N. Przypisuj każdemu słowu rozmiar czcionki proporcjonalny do jego liczby. Wygeneruj kształt Java2D dla każdego słowa, używając interfejsu API Java2D.

Każde słowo „chce” być gdzieś, na przykład „w jakiejś losowej pozycji x w pionowym środku”. W malejącej kolejności częstotliwości zrób to dla każdego słowa:

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

Otóż ​​to. Trudno jest to robić w skrzyżowanie badanie sprawnie, dla których używam last hit buforowanie, hierarchicznych obwiednie i QuadTree przestrzennej indeksu (z których wszystkie są rzeczy można dowiedzieć się więcej na temat z pewnym pracowitych googlowania).

Edycja: Jak zauważył Reto Aebersold, jest teraz dostępny bezpłatnie rozdział książki, który obejmuje ten sam obszar: Piękna wizualizacja, Rozdział 3: Wordle

Jonathan Feinberg
źródło
22
„Sumienny Google”. Podoba mi się :)
zengr
6
Więcej informacji tutaj: static.mrfeinberg.com/bv_ch03.pdf - Dziękuję Jonathan.
Reto Aebersold,
Dzięki za informację Jonathan - fascynują mnie naprawdę proste algorytmy, które potrafią tworzyć takie wspaniałe wizualizacje.
John Patrick,
Nadal jestem nieco zdziwiony częścią „chce być gdzieś”. Czy początkowa pozycja słów jest naprawdę losowa?
adib
30
piękno SO ... osoby, której pracy zadajesz pytania, może faktycznie odpowiedzieć na twoje pytanie!
Arnab Datta
33

Oto naprawdę fajny javascript od Jason Davies, który używa d3. Możesz nawet używać z nim stron internetowych.

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

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

johnpolacek
źródło
Bardzo łatwo jest po prostu skopiować pliki src = ".js" i ponownie załadować je w celu zbudowania lub użycia w takiej postaci, w jakiej są. Dziękujemy za udostępnienie i działa świetnie!
Michael d
Czy istnieje sposób na zmianę palety kolorów na coś bardziej estetycznego? Próbowałem zmodyfikować plik js z wywołania JSON z: colourlovers.com/api/palettes/random na colourlovers.com/api/palettes/top zgodnie z zaleceniami API colourlovers, ale paleta pozostała taka sama.
Michael d
Oto responsywny przykład działania oparty na wersji demonstracyjnej, ale z pełną kontrolą słów i kolorów. W przypadku niestandardowej palety kolorów użyj zamiast tego skomentowanego kodu. jsbin.com/kiwojayoye/1/edit?html,js,output
Martin Braun
33

Zaimplementowałem algorytm opisany przez Jonathana Feinberga, używając Pythona do utworzenia chmury tagów. Jest daleko od pięknych chmur wordle.net, ale daje wyobrażenie o tym, jak można to zrobić.

Możesz znaleźć projekt tutaj .

Reto Aebersold
źródło
Dzięki za udostępnienie! Na pewno sprawdzę twoje wdrożenie.
namenlos,
To jest niesamowite. Dzięki!
tokudu
Link (labs.atizo.com) jest ponownie zepsuty. Naprawdę powinieneś zamieścić przykładowe zdjęcie lub dwa, abyśmy mogli zobaczyć porównanie.
smci
@RetoAebersold czy istnieje sposób na integrację tego kodu ze środowiskiem flask lub django?
Mitul Shah,
30

Stworzyłem komponent Silverlight, który wykorzystuje algorytm sugerowany przez Jonathana tutaj. Kod źródłowy i przykładowe projekty są dostępne na moim blogu:

http://whydoidoit.com

Kolor słowa chmura

Moja chmura pozwala pokolorować i rozmiar słów w oparciu o różne wagi i obsługuje wybór słów (ze współrzędnych) i zaznaczanie wybranych słów. Możesz użyć źródła, które uważasz za stosowne.

Przykładowa chmura słów

Mike Talbot
źródło
2
Twój blog wydaje się być pusty. Czy link umarł?
LUB Mapper
Oto migawka archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/… Znalazłem również projekt na github github.com/whydoidoit/WordCloud
CJK
14

Pracuję nad WordCram , biblioteką przetwarzania do tworzenia chmur słów. Wordle ma na to duży wpływ i informuje o tym ten sam plik PDF, do którego prowadzi link powyżej. Obsługuje wykrywanie kolizji i pozwala skupić się na tym, jak chcesz ułożyć, pokolorować, obrócić itp.

Dan Bernier
źródło
Czy Twoja usługa oferuje interfejs API?
bart
Przepraszamy, WordCram nie ma API. To biblioteka, a nie usługa.
Dan Bernier
8

Szukałem podobnej do słów wizualizacji, która pozwoliłaby przypisać kolor, początkową pozycję i rozmiar ciągu związanego z innymi danymi, takimi jak trafność w tekście - niczego nie znalazłem, ale dzięki informacjom, które znalazłem tutaj (Zwłaszcza wyjaśnienie Jonathana i link Aeby'ego), mogłem w końcu wdrożyć „ Cloudio ”, które jest względnie bliskie słowu (przynajmniej tak mi się wydaje ...) i oferuje funkcje, których szukałem.

Jest zaimplementowany z SWT i JFace, a ja próbowałem zintegrować go z modelem MVC JFace, tak aby można było ustawić dostawców treści i etykiet w celu zmodyfikowania układu chmury i dodania go do innych wtyczek Eclipse lub RCP aplikacje. Możesz także zmodyfikować sposób obliczania początkowej pozycji łańcucha, tak aby nie było trudno użyć go do wizualizacji klastrów lub w inny sposób. Nadal jest słabo udokumentowany i pod pewnymi względami ograniczony (a ja zrobiłem wstępne przesyłanie kilka godzin temu, więc nadal może być trochę wadliwy), ale jeśli jesteś zainteresowany, oto link:

A oto link do niektórych stworzonych chmur, na wypadek, gdybyś chciał mieć szybkie wrażenie: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Na zdrowie, Stephan

sschwieb
źródło
8

Oto moja implementacja chmury podobnej do Wordle. Wykorzystuje ten sam algorytm spiralny i strukturę danych QuadTree.

http://sourcecodecloud.codeplex.com

lub

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

George Mamaladze
źródło
sourcecodecloud nie jest do pobrania, również drugi link nie działa
Sagar Nikam
Zweryfikowałem kod źródłowy / plik do pobrania pierwszego linku. Zadziałało. Drugi link został przeniesiony. Teraz naprawione.
George Mamaladze,
4

Lion and Lamb to aplikacja na system iOS typu open source, która tworzy chmury słów przy użyciu najczęstszych słów z wybranej księgi Biblii.

Opiera się na algorytmie opisanym przez Jonathana Feinberga. Testowanie trafień wykorzystuje drzewo quadów, ale ramki ograniczające są oparte na prostokącie ograniczającym glifu. Chcę rozbić glif na wiele mniejszych prostokątów ograniczających, aby umożliwić umieszczanie słów w obwiedni glifów.

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

Chmura słowa biblijnej księgi Objawienia


źródło
4

Mam tutaj generator Tag Cloud, który nazywam Disorganizer :)

Źródła TagCloudService i kontrola znaczników brzytwy oraz WinForm do celów testowych , które można umieścić na swoim blogu, profilu itp., Z niewielkim owinięciem wokół niego. Wykorzystuje przestrzeń nazw C # 4.0 i System.Drawing.

Stworzyłem go, ponieważ w innych generatorach chmur nie możesz klikać znaczników, aby nawigować, i nie możesz tworzyć animacji najechania kursorem, aby pokazać, że można je kliknąć. Ponieważ wyświetlanie animacji aktywowania w HTML jest dla mnie konieczne (robię to z nakładanymi, absolutnie pozycjonowanymi <a>znacznikami), nie opracowałem wyświetlania słów pod dowolnym kątem - są one pionowe lub poziome.

Ostrzeżenie: powyższe linki mogą utracić ważność za kilka miesięcy, planuję powoli rozwiązać je z otaczającego projektu do osobnego projektu.

Możesz zobaczyć działające demo na tym przykładowym poście na blogu , ale jest ono niekompletne i na niekompletnej stronie. Skontaktuj się ze mną, jeśli ktoś chce wnieść swój wkład, zajmę się oddzieleniem go jak najszybciej.

Zasz
źródło
Linki się nie zgadzają. Lubię interfejs użytkownika na twoim blogu.
Doug S
Dzięki, właśnie je naprawiłem
Zasz
2

Oto kolejna kompleksowa implementacja wordle w Pythonie 3, w dużej mierze oparta na wstępnym zarysie Jonathana Feinberga (QuadTrees, spirale itp.).

Kod (skomentowany, ze szczegółowym plikiem ReadMe) jest swobodnie dostępny w tym repozytorium Github i jest to przykładowe słowo utworzone za pomocą kodu.

Makbet

Hayk
źródło