Алгоритм реализации облака слов вроде Wordle - PullRequest
196 голосов
/ 05 декабря 2008

Контекст

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

Мои вопросы

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

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

  • просто любопытно
  • хочу выучить

Ответы [ 11 ]

457 голосов
/ 25 сентября 2009

Я создатель 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 - это эффективное тестирование пересечений, для которого я использую кэширование последнего попадания, иерархические ограничивающие рамки и пространственный индекс квадродерева (обо всем этом можно узнать с некоторой прилежностью прибегая к помощи).

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

32 голосов
/ 03 августа 2010

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

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

31 голосов
/ 09 мая 2012

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

Демо-версия: http://www.jasondavies.com/wordcloud/

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

31 голосов
/ 29 июля 2011

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

http://whydoidoit.com

Color word cloud

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

Example Word Cloud

14 голосов
/ 03 апреля 2011

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

10 голосов
/ 24 декабря 2008

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

Проверьте слово облако визуализации. Не так красиво, как wordle.net, но очень легко добавить на свой сайт.

8 голосов
/ 19 июля 2011

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

http://sourcecodecloud.codeplex.com

или

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

8 голосов
/ 15 июня 2011

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

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

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

Ура, Stephan

4 голосов
/ 04 августа 2015

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

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

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

A word cloud of the Bible book of Revelation

4 голосов
/ 10 июня 2011

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

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

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

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

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

...