Алгоритм реализации облака слов, такого как Wordle
Контекст
Мои вопросы
- Есть ли доступный алгоритм, который делает то, что делает 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, но это дает вам представление о том, как это можно сделать.
Здесь вы можете найти проект .
Ответ 3
Вот действительно хороший javascript от Джейсона Дэвиса, который использует d3. Вы даже можете использовать webfonts с ним.
Демо:
http://www.jasondavies.com/wordcloud/
Github:
https://github.com/jasondavies/d3-cloud
Ответ 4
Я создал компонент Silverlight, который использует алгоритм, предложенный Джонатаном. Исходный код и примеры проектов доступны в моем блоге:
http://whydoidoit.com
![Color word cloud]()
Мое облако позволяет вам выбирать цвет и размер слов на основе разных весов и поддерживает выбор слов (от координаты) и выделение выделенного слова. Источник принадлежит вам, как вы сочтете нужным.
![Example Word Cloud]()
Ответ 5
Я работаю над WordCram, библиотекой обработки для создания облаков слов. Он очень сильно зависит от Wordle и сообщается тем же PDF файлом, что и выше. Он обрабатывает обнаружение конфликтов для вас и позволяет вам сосредоточиться на том, как вы хотите, чтобы ваши слова были выложены, окрашены, повернуты и т.д.
Ответ 6
http://code.google.com/apis/visualization/documentation/gallery.html
Проверьте визуализацию облачного облака. Не так уж и фантастично, как wordle.net, но реально легко добавить на свой сайт.
Ответ 7
Я искал текстовую визуализацию, которая позволяла бы назначать цвет, начальную позицию и размер строки, относящейся к другим данным, например, релевантность в тексте - ничего не находила, но благодаря информации Я нашел здесь (особенно объяснение Джонатана и ссылку на aeby), я мог бы наконец реализовать "Cloudio", который близок к wordle (по крайней мере, я так думаю...) и предлагает функции, которые я искал.
Он реализован с помощью SWT и JFace, и я попытался интегрировать его в MVC-модель JFace, так что вы можете настроить контент и метки-провайдеры для изменения макета облака и добавления его в другой Eclipse- плагинов или приложений RCP. Вы также можете изменить способ вычисления начальной позиции строки, поэтому нетрудно использовать ее для визуализации кластера или иначе. Он по-прежнему плохо документирован и ограничен в некотором роде (и я сделал первоначальную загрузку несколько часов назад, так что это может быть немного ошибкой), но если вам интересно, здесь ссылка:
И вот ссылка на некоторые созданные облака, если вы хотите быстрое впечатление: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds
Cheers,
Stephan
Ответ 8
Здесь я вижу реализацию Wordle как облако.
Он использует тот же спиральный алгоритм и структуру данных QuadTree.
http://sourcecodecloud.codeplex.com
или
http://www.codeproject.com/Articles/224231/Word-Cloud-Tag-Cloud-Generator-Control-for-NET-Win
Ответ 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]()