Алгоритм реализации облака слов, такого как Wordle

Контекст

  • Взгляните на Wordle: http://www.wordle.net/
  • Это намного лучше, чем любые другие генераторы текстовых облаков, которые я видел.
  • Примечание: источник недоступен - прочтите FAQ: http://www.wordle.net/faq#code

Мои вопросы

  • Есть ли доступный алгоритм, который делает то, что делает Wordle?
  • Если нет, то какие альтернативы производят аналогичные виды вывода?

Почему я спрашиваю

  • просто любопытно
  • хотите узнать

Ответ 1

Я создатель 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

Что это. Часть hard выполняет эффективную проверку пересечения, для которой я использую кэширование с последним удалением, иерархические ограничивающие поля и пространственный индекс quadtree (все из которых - это вещи, о которых вы можете узнать больше с некоторыми прилежный гуглинг).

Edit: Как заметил Рето Эберсолд, теперь есть свободная книга, которая охватывает эту же территорию: Красивая визуализация, Глава 3: Wordle

Ответ 2

Я реализовал алгоритм, описанный Джонатаном Фейнбергом, используя python для создания облака тегов. Это далеко от красивых облаков wordle.net, но это дает вам представление о том, как это можно сделать.

Здесь вы можете найти проект .

Ответ 4

Я создал компонент Silverlight, который использует алгоритм, предложенный Джонатаном. Исходный код и примеры проектов доступны в моем блоге:

http://whydoidoit.com

Color word cloud

Мое облако позволяет вам выбирать цвет и размер слов на основе разных весов и поддерживает выбор слов (от координаты) и выделение выделенного слова. Источник принадлежит вам, как вы сочтете нужным.

Example Word Cloud

Ответ 5

Я работаю над WordCram, библиотекой обработки для создания облаков слов. Он очень сильно зависит от Wordle и сообщается тем же PDF файлом, что и выше. Он обрабатывает обнаружение конфликтов для вас и позволяет вам сосредоточиться на том, как вы хотите, чтобы ваши слова были выложены, окрашены, повернуты и т.д.

Ответ 7

Я искал текстовую визуализацию, которая позволяла бы назначать цвет, начальную позицию и размер строки, относящейся к другим данным, например, релевантность в тексте - ничего не находила, но благодаря информации Я нашел здесь (особенно объяснение Джонатана и ссылку на aeby), я мог бы наконец реализовать "Cloudio", который близок к wordle (по крайней мере, я так думаю...) и предлагает функции, которые я искал.

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

И вот ссылка на некоторые созданные облака, если вы хотите быстрое впечатление: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Cheers, Stephan

Ответ 9

У меня есть генератор облака тегов, который я называю Disorganizer:)

Источники TagCloudService и контроль разметки бритвы и WinForm для целей тестирования которые вы можете поместить в свой блог, профиль и т.д., с небольшой оберткой вокруг него. Он сильно использует пространство имен С# 4.0 и System.Drawing.

Я создал его, потому что с другими генераторами облаков вы не можете нажимать на теги для навигации и не можете создавать анимацию наведения, чтобы показать, что они доступны для клика. Поскольку для меня требуется показ анимации hover в HTML (я делаю это с помощью наложенных, абсолютно позиционированных тегов <a>), я не разработал отображение слов в любом уголке - они либо вертикальные, либо горизонтальные.

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

Вы можете увидеть рабочую демонстрацию в этом примере блога, но она неполна и находится на неполном сайте. Свяжитесь со мной, если кто-то хочет внести свой вклад, я продолжу разделить его как можно скорее.

Ответ 10

Lion and Lamb - приложение для iOS с открытым исходным кодом, которое создает облака слов, используя самые частые слова из выбранной книги Библии.

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

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

Слово облако библейской книги Откровения

Ответ 11

Масштабируемый генератор TagCloud,, который извлекает ключевые слова из данного источника (текстовый файл и другие источники) и отображает TagCloud как пользовательский интерфейс масштабирования (ZUI)

Ответ 12

Вот еще одна реализации конца в конец Wordle в Python 3 в значительной степени на основе первоначального наброска Джонатана Файнберг (QuadTrees, спирали и т.д.).

Код (закомментированный, с подробным файлом ReadMe) находится в свободном доступе в этом репозитории Github, и это пример wordle, созданный с помощью кода.

Macbeth