Алгоритм реалізації хмарного слова, як Wordle


201

Контекст

  • Погляньте на Wordle: http://www.wordle.net/
  • Це набагато краще, ніж будь-які інші генератори хмарних слів, які я бачив
  • Примітка: джерело недоступне - прочитайте FAQ: http://www.wordle.net/faq#code

Мої запитання

  • Чи є алгоритм, який робить те, що робить Wordle?
  • Якщо ні, то які альтернативи дають подібний вид продукції?

Чому я прошу

  • просто цікаво
  • хочу вчитися

1
Там в альтернативному варіанті реалізації, на основі обробки зображень тут . Не дуже швидкий, але дуже гнучкий і хороший для експериментів. (Повна реалізація дана в Mathematica.)
Szabolcs

2
Я придумав власний (досить простий) алгоритм і провів блог про нього . Його написано Python і його слід легко налаштувати. Я намагався зробити це наполовину ефективним. ! введіть тут опис зображень
Андреас Мюллер

4
Мені дуже сподобалось те, як ви задали це запитання! +1
колістівра

Відповіді:


472

Я творець Wordle. Ось як Wordle насправді працює:

Порахуйте слова, викиньте нудні слова та відсортуйте за кількістю, у спаді. Зберігайте вершину N слів для деяких N. Призначте кожному слову розмір шрифту, пропорційний його кількості. Створіть форму Java2D для кожного слова, використовуючи API Java2D.

Кожне слово "хоче" десь бути, наприклад "у якомусь випадковому положенні х у вертикальному центрі". Зменшуючи порядок частоти, робіть це для кожного слова:

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

Це воно. Важко частина при цьому перетині-тестуванні ефективно, для чого я використовую останній хіт кешування, ієрархічні коробки обмежувальних і квадранти просторового індекс (всі з яких є речі , які ви можете дізнатися більше про з деякими старанним погуглити).

Редагувати: Як зазначав Ретто Еберсольд, тепер у вільному доступі є книга про книги, яка охоплює цю ж територію: Красива візуалізація, Глава 3: Wordle


22
"Старанний гуглінг". Сподобалось :)
zengr

6
Більше інформації тут: static.mrfeinberg.com/bv_ch03.pdf - Дякую Джонатане.
Reto Aebersold

Дякую за інформацію Джонатан - Мене захоплює реально прості алгоритми, які можуть створити чудові візуалізації, як це.
Джон Патрік

Я все ще трохи спантеличений частиною "хоче бути десь". Чи справді початкове положення слів випадкове?
адиб

30
краса SO .. людина, про роботу якої ви ставите питання, може насправді відповісти на ваше запитання!
Арнаб Датта

33

Ось справді приємний JavaScript від Jason Davies, який використовує d3. Ви навіть можете використовувати веб-шрифти з ним.

Демо: http://www.jasondavies.com/wordcloud/

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


Дуже просто скопіювати файли src = ". Js" і перезавантажити їх для побудови на або просто використовувати як є. Дякуємо за обмін та чудово працює
Майкл д

Чи є спосіб змінити палітру кольорів на щось більш естетичне? Я спробував змінити файл js під час виклику JSON з: colourlovers.com/api/palettes/random на colourlovers.com/api/palettes/top, як рекомендує API колориту, але палітра залишилася такою ж.
Майкл д

Ось чудовий робочий приклад, заснований на демонстраційній версії, але з повним контролем над словами та кольором. Для спеціальної палітри кольорів замість цього використовуйте коментований код. jsbin.com/kiwojayoye/1/edit?html,js,output
Мартін Браун

33

Я реалізував алгоритм, описаний Джонатаном Фейнбергом, використовуючи python для створення хмари тегів. Це далеко від прекрасних хмар Wordle.net, але це дає вам уявлення, як це можна зробити.

Ви можете знайти проект тут .


Дякую, що поділились! Я обов'язково переглядаю вашу реалізацію.
наменлос

Це круто. Дякую!
tokudu

Посилання (labs.atizo.com) знову розривається. Ви дійсно повинні розмістити зразок зображення або два, щоб ми могли побачити порівняння.
smci

@RetoAebersold все ж є для інтеграції цього коду з фляшкою або рамкою джанго?
Мітул Шах

30

Я створив компонент Silverlight, який використовує алгоритм, який Джонатан пропонує тут. У моєму блозі доступні вихідні коди та приклади проектів:

http://whydoidoit.com

Хмара слово хмара

Моя хмара дозволяє вибирати кольори та розміри слів на основі різної ваги, і вона підтримує вибір слова (від координати) та виділення вибраного слова. Джерело саме вам використовувати, як вважаєте за потрібне.

Приклад Word Cloud


2
Здається, ваш блог порожній. Чи помер посилання?
АБО Mapper

Ось знімок archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/… Я також знайшов проект на github github.com/whydoidoit/WordCloud
CJK

14

Я працюю над WordCram , бібліотекою обробки даних для створення слов хмар. На це дуже сильно впливає Wordle, і його інформує той самий PDF aeby, який пов'язаний вище. Він обробляє для вас систему виявлення зіткнень і дозволяє зосередитись на тому, як ви хочете, щоб ваші слова були викладені, кольорові, обернені тощо.


Чи пропонує ваш сервіс API?
барт

На жаль, у WordCram немає API. Це бібліотека, а не послуга.
Дан Берньє


8

Я шукав словесну візуалізацію, яка дозволила б призначити колір, початкову позицію та розмір рядка, пов’язану з іншими даними, такими як відповідність тексту, - нічого не знайшлося, але завдяки інформації, яку я знайшов тут (Особливо пояснення Джонатана та посилання аебі), я нарешті міг реалізувати " Cloudio ", який наближається до wordle (принаймні я так думаю ...) і пропонує функції, які я шукав.

Він реалізований за допомогою SWT та JFace, і я намагався інтегрувати його в MVC-модель JFace, щоб ви могли встановити контент-та мітки-провайдери, щоб змінити макет хмари та додати її до інших плагінів Eclipse або RCP додатки. Ви також можете змінити спосіб обчислення початкового положення рядка, таким чином, щоб не важко було використовувати його для візуалізації кластера чи іншого. Він все ще погано задокументований і певним чином обмежений (і я робив початкове завантаження кілька годин тому, тому це все ще може бути трохи баггі), але якщо вам цікаво, ось посилання:

Ось посилання на деякі створені хмари, якщо ви хочете швидкого враження: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Ура, Стефане


8

Ось побачите мою реалізацію Wordle як хмара. Він використовує той самий алгоритм спіралі та структуру даних QuadTree.

http://sourcecodecloud.codeplex.com

або

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


sourcecodecloud не можна завантажити, також не працює друга посилання
Sagar Nikam

Я перевірив вихідний код / ​​завантаження першого посилання. Це спрацювало. Друге посилання було переміщено. Тепер виправлено.
Джордж Мамаладзе

4

Лев і ягня - це програма для iOS з відкритим кодом, яка створює хмари слів, використовуючи найчастіші слова з вибраної книги Біблії.

Він заснований на алгоритмі, описаному Джонатаном Фейнбергом. Для тестування хітів використовується квадратне дерево, але обмежувальні поля засновані на обмежувальному прямокутнику гліфа. Я хочу розбити гліф на багато менших обмежувальних прямокутників, щоб увімкнути розміщення слова у вікні обмеження гліфа.

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

Слово хмара біблійної книги Об'явлення


4

У мене тут генератор тегів хмар, який я називаю Disorganizer :)

Джерела TagCloudService та контроль розмітки бритви та WinForm для тестування, які ви можете розмістити у своєму блозі, профілі тощо, з невеликою обгорткою навколо нього. Він використовує C # 4.0 & System.Drawing простір імен сильно.

Я створив це, тому що з іншими генераторами хмар ви не можете натискати на теги, щоб переміщатися, і не можете створювати анімацію наведення курсору, щоб показати, що вони можуть натискати. Оскільки показ анімації наведення курсора в HTML необхідний для мене (я це роблю з накладеними абсолютно розташованими <a>тегами), я не розробив будь-який кут відображення слів - вони є вертикальними або горизонтальними.

Попередження: наведені вище посилання можуть втратити чинність через кілька місяців, я планую поступово від’єднати його від навколишнього проекту в окремий проект.

Ви можете побачити робочу демонстрацію на цьому зразковому дописі в блозі , але він є неповним та на неповному веб-сайті. Зверніться до мене, якщо хтось хоче внести свій внесок, я буду продовжувати його відокремлювати якнайшвидше.


Посилання втратили чинність. Мені подобається інтерфейс користувача у вашому блозі.
Doug S

Дякую, щойно виправили їх
Зас

2

Ось ще одна кінцева реалізація wordle в Python 3 в значній мірі на основі початкового ескізу Джонатана Файнберга (QuadTrees, спіралей і т.д.).

Код (коментований, з детальним файлом ReadMe) є у вільному доступі у цьому сховищі Github, і це зразок wordle, створений разом з кодом.

Макбет


0

Є досить симпатична маленька бібліотека JavaScript, яку створив Тім Мрій:

https://github.com/timdream/wordcloud2.js/blob/gh-pages/API.md

Він може створити слово "хмара" на полотні або з тегами HTML з великою кількістю опцій, щоб змінити результат. Це дійсно близько до виходу Wordle.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.