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

StackOverflow https://stackoverflow.com/questions/342687

Вопрос

Контекст

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

Мои Вопросы

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

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

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

Решение

Я создатель Wordle.Вот как на самом деле работает Wordle:

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

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

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:Слово

Другие советы

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

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

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

http://whydoidoit.com

Color word cloud

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

Example Word Cloud

Вот действительно хороший javascript от Джейсона Дэвиса, который использует d3.Вы даже можете использовать с ним webfonts.

ДЕМОНСТРАЦИЯ:http://www.jasondavies.com/wordcloud/

Гитхаб:https://github.com/jasondavies/d3-cloud

Я работаю над Словесная цепочка, библиотека обработки для создания облаков word.На него довольно сильно повлиял Wordle, и он основан на том же PDF-файле aeby, ссылка на который приведена выше.Он обрабатывает обнаружение коллизий за вас и позволяет вам сосредоточиться на том, как вы хотите, чтобы ваши слова были расположены, раскрашены, повернуты и т.д.

http://code.google.com/apis/visualization/documentation/gallery.html

Ознакомьтесь с визуализацией облака word.Не такой навороченный, как wordle.чистый, но его действительно легко добавить на ваш сайт.

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

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

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

Приветствия, Стефан

Здесь смотрите мою реализацию Wordle like cloud.Он использует тот же спиральный алгоритм и структуру данных QuadTree.

http://sourcecodecloud.codeplex.com

или

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

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

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

ГитХаб: https://github.com/PetahChristian/LionAndLamb

A word cloud of the Bible book of Revelation

У меня здесь есть генератор облака тегов, который я называю Дезорганизующий :)

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

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

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

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

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

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

Macbeth

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top