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

201

контекст

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

Мои вопросы

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

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

  • просто любопытно
  • хочу учиться
Namenlos
источник
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
«Добросовестный поиск в Google». Нравится :)
zengr
6
Больше информации здесь: static.mrfeinberg.com/bv_ch03.pdf - Спасибо, Джонатан.
Рето Эберсолд
Спасибо за информацию, Джонатан. Я очарован по-настоящему простыми алгоритмами, которые могут создавать отличные визуализации, подобные этой.
Джон Патрик
Я все еще немного озадачен частью "хочет быть где-то". Является ли начальная позиция слов действительно случайной?
Адиб
30
красота SO .. человек, о работе которого вы задаете вопросы, может на самом деле ответить на ваш вопрос!
Арнаб Датта
33

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

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

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

johnpolacek
источник
Очень просто скопировать файлы 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, но это дает вам представление, как это можно сделать.

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

Рето Эберсольд
источник
Спасибо, что поделился! Я определенно буду просматривать вашу реализацию.
Наменлось
Это круто. Спасибо!
Токуду
Ссылка (labs.atizo.com) снова не работает. Вы действительно должны опубликовать образец изображения или два, чтобы мы могли увидеть сравнение.
SMCI
@RetoAebersold есть ли способ интегрировать этот код в флешку или фреймворк django?
Митул Шах
30

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

http://whydoidoit.com

Цветное слово облако

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

Облако слов в качестве примера

Майк Тэлбот
источник
2
Ваш блог кажется пустым. Ссылка умерла?
ИЛИ Mapper
Вот снимок archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/… Я также нашел проект на github github.com/whydoidoit/WordCloud
CJK
14

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

Дэн Бернье
источник
Ваш сервис предлагает API?
Барт
Извините, WordCram не имеет API. Это библиотека, а не сервис.
Дэн Бернье
8

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

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

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

Ура, Стефан

sschwieb
источник
8

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

http://sourcecodecloud.codeplex.com

или

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

Георгий Мамаладзе
источник
sourcecodecloud не загружается, также не работает вторая ссылка
Сагар Никам
Я подтвердил исходный код первой ссылки / Скачать. Это сработало. Вторая ссылка была перемещена. Сейчас исправлено.
Георгий Мамаладзе
4

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

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

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

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


источник
4

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

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

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

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

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

Zasz
источник
Ссылки стали недействительными. Мне нравится пользовательский интерфейс в вашем блоге.
Дуг С
Спасибо, только что исправил их
Zasz
2

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

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

Макбет

Hayk
источник
0

Есть красивая библиотека JavaScript, созданная Тимом Дримом:

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

Он может создать облако слов на холсте или с HTML-тегами с большим количеством опций для изменения результата. Это очень близко к выходу Wordle.

Н.Р.
источник