5

给定单词及其频率和屏幕空间区域,将标签云拟合到空间的好方法是什么?我能想到的两个变量是:

  • 字体大小(绝对和渐变)
  • 字数

我能想到的所有方法都需要迭代,例如设置单词数量的上限,然后对字体大小使用二进制搜索,直到单词刚好适合该区域。我宁愿有一个分析解决方案。

我的情况的一个复杂情况是云可以调整大小,因此算法需要能够很好地处理 100x100 像素或 1000x1000 像素。

编辑:我应该说这是针对富客户端应用程序,而不是 Web(因此可以调整大小)。另外,我希望听到一些经验,例如“没有人在标签云中查看超过 100 个单词,所以不要费心显示它们”。

4

3 回答 3

2

我们在 Software Cartographer 中所做的是

  • 有一个最大字体大小,
  • 映射Math.sqrt(term.frequency)到这个范围(因为单词是 2D 区域),
  • 只显示前 30 个(左右)字词,
  • 排除任何精美的印刷品,即小于 6 pt 的字体大小,
  • 按字母顺序对云中的术语进行排序。

备择方案

  • 不要显示前 30 个,而是选择k没有滚动条的顶部。
  • 与其将最常用的单词映射到最大字体大小,不如使用全局映射,使云之间的单词大小具有可比性(这取决于您的用例)。

据我所知,没有关于术语云的实证研究(也许 Worlde 名气的 Jonathan Feinberg 在这方面了解得更多)。

于 2009-03-23T10:04:24.883 回答
0

这听起来像是背包问题,但倒过来了,变量更多。没有简单的完整解决方案,但您很可能能够找到在大多数情况下接近最优解决方案的启发式算法。

PS:您只能使用以像素为单位的字体大小来可靠地完成这项工作。以像素为单位的字体大小在良好的网页设计中是一件坏事 (TM)。

于 2009-03-05T01:31:46.390 回答
0

您可以创建一组预定的发生范围,然后可以与云中的字体大小相关。例如:

  • 0 - 100: 1 厘米
  • 101 - 500:1.2 厘米
  • 501 - 1000:1.4 em 粗体
  • 1001 - 1500:1.8 em 粗体
  • 1501 - 2000:2.0 em 粗斜体/下划线/闪烁/其他等...

您可以通过根据容器大小向所有范围添加固定偏移量来缩放云。

于 2009-03-05T02:14:55.600 回答