Подгонка облака тегов к доступному пространству - PullRequest
5 голосов
/ 05 марта 2009

Учитывая слова и их частоты, а также область экранного пространства, каковы хорошие подходы для размещения облака тегов в пространстве? Вот две переменные, которыми я могу управлять:

  • Размер шрифта (как абсолютный, так и градиентный)
  • Количество слов

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

Одна сложность моей ситуации заключается в том, что облака имеют изменяемый размер, поэтому алгоритм должен уметь обрабатывать 100x100 пикселей или 1000x1000 пикселей достаточно хорошо.

Редактировать: я должен был сказать, что это для приложения с расширенным набором клиентов, а не для Интернета (отсюда и возможность изменения размера). Кроме того, я надеялся услышать что-то вроде: «Никто никогда не просматривает более 100 слов в облаке тегов, поэтому не беспокойтесь о их отображении».

Ответы [ 3 ]

2 голосов
/ 23 марта 2009

То, что мы делаем в Software Cartographer, составляет

  • имеют максимальный размер шрифта,
  • отображение Math.sqrt(term.frequency) на этот диапазон (так как слова являются двумерными областями),
  • показывает только верхние 30 (или около того) терминов,
  • исключить мелкий шрифт, т. Е. Размер шрифта меньше 6 пт,
  • сортировка терминов в облаке по алфавиту.

Альтернативы

  • Вместо отображения верхних 30, выберите верхний k, чтобы не было полос прокрутки.
  • Вместо сопоставления наиболее часто используемого слова с максимальным размером шрифта используйте глобальное сопоставление, чтобы размер слова был сопоставим между облаками (это зависит от вашего варианта использования).

Насколько мне известно, эмпирические исследования облаков терминов недоступны (возможно, Джонатан Файнберг, известный в Ворльде, знает об этом больше).

0 голосов
/ 05 марта 2009

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

  • 0 - 100: 1 em
  • 101 - 500: 1,2 em
  • 501 - 1000: 1,4 см. Полужирный
  • 1001 - 1500: жирный шрифт 1,8
  • 1501 - 2000: 2,0 полужирный курсив / подчеркнутый / мигающий / все, что угодно ...

Вы можете масштабировать облако, добавляя фиксированное смещение ко всем диапазонам в зависимости от размера контейнера.

0 голосов
/ 05 марта 2009

Это звучит как проблема с рюкзаком , но перевернутая и с большим количеством переменных. Тривиального полного решения не существует, но, скорее всего, вы сможете найти эвристический алгоритм, который в большинстве случаев приближается к оптимальному решению.

PS: Вы можете сделать это надежно только с размерами шрифта, измеренными в пикселях. Размеры шрифта, измеряемые в пикселях, - плохая вещь в хорошем веб-дизайне.

...