Algoritma untuk mengimplementasikan kata cloud seperti Wordle


201

Konteks

Pertanyaan saya

  • Apakah ada algoritma yang tersedia yang melakukan apa yang Wordle lakukan?
  • Jika tidak, apa sajakah alternatif yang menghasilkan jenis output yang serupa?

Kenapa saya bertanya

  • hanya penasaran
  • ingin belajar

1
Ada implementasi alternatif, berdasarkan pemrosesan gambar di sini . Tidak terlalu cepat, tetapi sangat fleksibel dan bagus untuk eksperimen. (Ada implementasi penuh yang diberikan dalam Mathematica.)
Szabolcs

2
Saya datang dengan algoritma saya sendiri (sangat sederhana) dan membuat blog tentang hal itu . Itu ditulis dalam Python dan harus mudah untuk disesuaikan. Saya mencoba membuatnya setengah jalan efisien. ! masukkan deskripsi gambar di sini
Andreas Mueller

4
Saya sangat menyukai cara Anda mengajukan pertanyaan ini! +1
kolistivra

Jawaban:


472

Saya pencipta Wordle. Inilah cara Wordle bekerja:

Hitung kata-kata, buang kata-kata yang membosankan, dan urutkan berdasarkan hitungan, turun. Simpan kata N teratas untuk beberapa N. Tetapkan setiap kata dengan ukuran font yang proporsional dengan hitungannya. Hasilkan Bentuk Java2D untuk setiap kata, menggunakan Java2D API.

Setiap kata "ingin" berada di suatu tempat, seperti "pada beberapa posisi x acak di pusat vertikal". Dalam mengurangi urutan frekuensi, lakukan ini untuk setiap kata:

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

Itu dia. Bagian yang sulit adalah dalam melakukan pengujian-persimpangan secara efisien, yang saya gunakan caching hit terakhir, kotak pembatas hierarkis, dan indeks spasial quadtree (semuanya adalah hal-hal yang dapat Anda pelajari lebih lanjut dengan beberapa googling yang rajin).

Sunting: Seperti yang ditunjukkan oleh Reto Aebersold, sekarang ada bab buku, tersedia secara bebas, yang mencakup wilayah yang sama: Visualisasi Cantik, Bab 3: Wordle


22
"Rajin Googling". Menyukainya :)
zengr

6
Informasi lebih lanjut di sini: static.mrfeinberg.com/bv_ch03.pdf - Terima kasih Jonathan.
Reto Aebersold

Terima kasih atas informasinya Jonathan - Saya terpesona oleh algoritma sederhana yang dapat membuat visualisasi hebat seperti ini.
John Patrick

Saya masih agak bingung pada bagian "ingin berada di suatu tempat". Apakah posisi awal kata-kata benar-benar acak?
adib

30
keindahan SO..orang yang pekerjaannya Anda ajukan pertanyaan, mungkin sebenarnya menjawab pertanyaan Anda!
Arnab Datta

33

Ini javascript yang sangat bagus dari Jason Davies yang menggunakan d3. Anda bahkan dapat menggunakan webfonts dengannya.

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

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


Sangat mudah untuk hanya menyalin file src = ". Js" dan mengunggahnya kembali untuk dijadikan atau hanya menggunakan apa adanya. Terima kasih telah berbagi dan bekerja dengan baik!
Michael d

Apakah ada cara untuk mengubah palet warna menjadi sesuatu yang lebih estetis? Saya mencoba memodifikasi file js dari panggilan JSON dari: colourlovers.com/api/palettes/random ke colourlovers.com/api/palettes/top seperti yang direkomendasikan oleh API colourlovers tetapi paletnya tetap sama.
Michael d

Berikut ini adalah contoh kerja responsif berdasarkan demo tetapi dengan kontrol penuh pada kata-kata dan warna. Untuk palet warna khusus, gunakan kode yang dikomentari. jsbin.com/kiwojayoye/1/edit?html,js,output
Martin Braun

33

Saya telah mengimplementasikan algoritma seperti yang dijelaskan oleh Jonathan Feinberg menggunakan python untuk membuat tag cloud. Itu jauh dari awan indah wordle.net tetapi memberi Anda gambaran bagaimana hal itu bisa dilakukan.

Anda dapat menemukan proyeknya di sini .


Terima kasih telah berbagi! Saya pasti akan mencari melalui implementasi Anda.
namenlos

Ini luar biasa. Terima kasih!
tokudu

Tautan (labs.atizo.com) rusak lagi. Anda benar-benar harus memposting satu atau dua contoh gambar sehingga kami dapat melihat perbandingannya.
smci

@RetoAebersold apakah ada cara untuk mengintegrasikan kode ini dengan kerangka kerja flask atau django?
Mitul Shah

30

Saya telah membuat komponen Silverlight yang menggunakan algoritma yang disarankan Jonathan di sini. Kode sumber dan contoh proyek semuanya tersedia di blog saya:

http://whydoidoit.com

Warna kata cloud

Cloud saya memungkinkan Anda mewarnai dan mengukur kata berdasarkan bobot yang berbeda dan mendukung pemilihan kata (dari koordinat) dan penyorotan kata yang dipilih. Sumbernya adalah milik Anda untuk digunakan sesuai keinginan Anda.

Contoh Kata Cloud


2
Blog Anda sepertinya kosong. Apakah tautannya mati?
ATAU Mapper

Berikut adalah snapshot archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/... Saya juga menemukan proyek di github github.com/whydoidoit/WordCloud
CJK

14

Saya sedang mengerjakan WordCram , perpustakaan pemrosesan untuk membuat kata cloud. Ini sangat dipengaruhi oleh Wordle, dan diinformasikan oleh PDF yang sama dengan yang ditautkan ke atas. Ini menangani deteksi tabrakan untuk Anda, dan memungkinkan Anda fokus pada bagaimana Anda ingin kata-kata Anda ditata, diwarnai, diputar, dll.


Apakah layanan Anda menawarkan API?
Bart

Maaf, WordCram tidak memiliki API. Itu perpustakaan, bukan layanan.
Dan Bernier


8

Saya sedang mencari visualisasi seperti kata-kata yang akan memungkinkan untuk menetapkan warna, posisi awal dan ukuran sebuah String yang terkait dengan data lain, seperti relevansi dalam teks - tidak menemukan apa pun, tetapi berkat informasi yang saya temukan di sini (Terutama penjelasan Jonathan dan tautan aeby), saya akhirnya bisa mengimplementasikan ' Cloudio ', yang relatif dekat dengan wordle (setidaknya saya pikir begitu ...) dan menawarkan fitur yang saya cari.

Ini diimplementasikan dengan SWT dan JFace, dan saya mencoba mengintegrasikannya ke dalam MVC-model JFace, sehingga Anda dapat mengatur penyedia konten dan label untuk memodifikasi tata letak cloud dan menambahkannya ke Eclipse-plugins atau RCP lainnya. aplikasi. Anda juga dapat memodifikasi cara posisi awal string dihitung, sehingga tidak sulit untuk menggunakannya untuk visualisasi klaster atau lainnya. Ini masih kurang terdokumentasi dan terbatas dalam beberapa hal (dan saya melakukan unggahan awal beberapa jam yang lalu, jadi mungkin masih sedikit bermasalah), tetapi jika Anda tertarik, inilah tautannya:

Dan inilah tautan ke beberapa awan yang dibuat, jika Anda ingin tayangan cepat: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Salam, Stephan


8

Di sini, saya melihat implementasi Wordle like cloud. Ini menggunakan algoritma spiral yang sama dan struktur data QuadTree.

http://sourcecodecloud.codeplex.com

atau

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


sourcecodecloud tidak dapat diunduh, juga tautan kedua tidak berfungsi
Sagar Nikam

Saya memverifikasi Kode Sumber / Unduh tautan pertama. Itu berhasil. Tautan kedua dipindahkan. Sekarang sudah diperbaiki.
George Mamaladze

4

Lion and Lamb adalah aplikasi iOS open-source yang menciptakan kata cloud menggunakan kata-kata paling sering dari buku Alkitab pilihan.

Ini didasarkan pada algoritma seperti yang dijelaskan oleh Jonathan Feinberg. Pengujian hit memang menggunakan quad tree, tetapi kotak pembatas didasarkan pada persegi panjang pembatas glyph. Saya ingin memecah mesin terbang ke dalam banyak rect terikat kecil untuk memungkinkan penempatan kata dalam kotak ikatan glyph.

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

Kata awan dari kitab Wahyu dalam Alkitab


4

Saya memiliki generator Tag Cloud di sini, yang saya sebut Disorganizer :)

Sumber TagCloudService dan kontrol marka pisau cukur dan WinForm untuk tujuan pengujian yang dapat Anda masukkan ke blog, profil, dll, dengan sedikit pembungkus di sekitarnya. Ini menggunakan C # 4.0 & System. Menarik namespace berat.

Saya membuatnya karena dengan generator cloud lain Anda tidak dapat mengklik tag untuk menavigasi dan tidak dapat membuat animasi hover, untuk menunjukkan bahwa mereka dapat diklik. Karena perlihatkan animasi hover dalam HTML diperlukan bagi saya (saya melakukan ini dengan overlay-ed, <a>tag yang benar-benar diposisikan ) Saya belum mengembangkan tampilan kata sudut mana pun - baik itu vertikal maupun horizontal.

Peringatan: Tautan di atas mungkin tidak valid dalam beberapa bulan, saya berencana untuk perlahan melepaskannya dari proyek di sekitarnya menjadi proyek yang terpisah.

Anda dapat melihat demo yang berfungsi pada posting blog sampel ini , tetapi tidak lengkap, dan di situs yang tidak lengkap. Hubungi saya jika ada yang ingin berkontribusi, saya akan segera memisahkannya.


Tautan tidak valid. Saya suka UI di blog Anda.
Doug S

Terima kasih, baru saja memperbaikinya
Zasz

2

Berikut ini adalah implementasi wordle end-to-end lainnya di Python 3 yang sebagian besar didasarkan pada garis besar awal oleh Jonathan Feinberg (QuadTrees, spiral, dll.).

Kode (dikomentari, dengan file ReadMe yang terperinci) tersedia secara bebas di repositori Github ini dan ini adalah contoh kata yang dibuat dengan kode tersebut.

Macbeth


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.