实现像Wordle一样的文字云的算法

时间:2008-12-05 01:50:24

标签: layout fonts typography tag-cloud wordle

上下文

我的问题

  • 是否有可用于Wordle的算法?
  • 如果不是,有哪些替代产生类似的输出?

为什么我要问

  • 只是好奇
  • 想学习

13 个答案:

答案 0 :(得分:457)

我是Wordle的创造者。以下是Wordle的实际工作方式:

计算单词,扔掉无聊的单词,然后按计数排序,降序。保留前N个单词为N.为每个单词指定与其计数成比例的字体大小。使用Java2D API为每个单词生成Java2D形状。

每个单词“想要”在某个地方,例如“在垂直中心的某个随机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

就是这样。 hard 部分正在有效地进行交叉测试,我使用最后一次命中的缓存,分层边界框和四叉树空间索引(所有这些都是你可以通过一些了解更多的东西)勤奋的谷歌搜索。)

编辑:正如Reto Aebersold所指出的那样,现在有一本免费提供的书籍章节涵盖了同一领域:Beautiful Visualization, Chapter 3: Wordle

答案 1 :(得分:32)

我已经实现了Jonathan Feinberg所描述的使用python创建标签云的算法。它远离wordle.net的美丽云彩,但它让你知道如何做到这一点。

您可以找到项目here

答案 2 :(得分:31)

我创建了一个使用Jonathan在此建议的算法的Silverlight组件。我的博客上提供了源代码和示例项目:

http://whydoidoit.com

Color word cloud

我的云可让您根据不同的权重对单词进行着色和调整大小,并支持单词选择(从坐标)和选定的单词突出显示。您可以根据需要使用该来源。

Example Word Cloud

答案 3 :(得分:31)

这是来自Jason Davies使用d3的非常好的javascript。你甚至可以使用webfonts。

演示: http://www.jasondavies.com/wordcloud/

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

答案 4 :(得分:14)

我正在处理WordCram,一个用于制作文字云的​​处理库。它受Wordle的影响非常大,并且通过与上面链接的相同的PDF aeby进行通知。它可以为您处理碰撞检测,让您专注于您希望如何布置,着色,旋转等等。

答案 5 :(得分:10)

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

查看单词云可视化。不像wordle.net那么华丽,但很容易添加到您的网站。

答案 6 :(得分:8)

我正在寻找类似于wordle的可视化,它可以指定与其他数据相关的字符串的颜色,初始位置和大小,例如文本中的相关性 - 没有找到任何内容,但感谢信息我在这里找到了(尤其是Jonathan的解释和aeby的链接),我终于可以实现'Cloudio',它与wordle相比非常接近(至少我认为是这样......)并且提供了我正在寻找的功能。 / p>

它是用SWT和JFace实现的,我试图将它集成到JFace的MVC模型中,这样你就可以设置内容和标签提供者来修改云的布局并将其添加到其他Eclipse-插件或RCP应用程序。您还可以修改计算字符串初始位置的方式,这样就不难将其用于集群可视化。它仍然记录不清,并且在某些方面受到限制(几小时前我做了初始上传,所以它可能仍然有点儿错误),但如果您有兴趣,请点击链接:

这里有一些创建云的链接,以防您需要快速展示:https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

干杯, 斯蒂芬

答案 7 :(得分:8)

这里看到我像云一样实现Wordle。 它使用相同的螺旋算法和QuadTree数据结构。

http://sourcecodecloud.codeplex.com

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

答案 8 :(得分:4)

我在这里有一个Tag Cloud生成器,我称之为 Disorganizer :)

来源TagCloudServicerazor markup controlWinForm for testing purposes on this sample blog post 你可以把它放在你的博客,个人资料等中,并附上一个小包装。它使用C#4.0& System.Drawing命名空间很重。

我之所以创建它,是因为使用其他云生成器,您无法单击标签进行导航,也无法创建悬停动画,以显示它们是可点击的。因为在HTML中显示悬停动画对我来说是必要的(我正在使用叠加的,绝对定位的<a>标签)我没有开发任何角度的单词显示 - 它们是垂直的或水平的。 / p>

警告:上述链接可能会在几个月内失效,我计划将其从周围的项目中慢慢解开为一个单独的项目。

您可以看到正在运行的演示{{3}},但它不完整,并且位于不完整的网站中。如果有人愿意捐款,请与我联系,我会尽快将其分开。

答案 9 :(得分:4)

狮子和羔羊是一个开源的iOS应用程序,它使用所选圣经中最频繁的单词来创建单词云。

它基于Jonathan Feinberg所描述的算法。命中测试确实使用四叉树,但边界框基于字形的边界矩形。我想将字形分解为许多较小的边界,以便在字形的边界框内启用字放置。

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

A word cloud of the Bible book of Revelation

答案 10 :(得分:1)

这是 Python 3 中wordle的又一个端到端实现,主要基于Jonathan Feinberg的初始轮廓(QuadTrees,螺旋形等)。

可在此Github repository免费获得代码(带有详细自述文件的注释),这是使用代码创建的示例单词。

Macbeth

答案 11 :(得分:0)

Tim Dream制作了一个非常漂亮的JavaScript小库:

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

它可以在画布上或带有HTML标签的文字云中创建文字云,其中包含许多选项来修改结果。它真的很接近wordle的输出。

答案 12 :(得分:0)

我已经用 Julia 语言实现了一个名为 WordCloud.jl 的词云生成器。可以在here中找到有关其算法的简要说明。
与大多数其他实现不同,我是基于梯度优化设计的。这是一种非贪婪算法,其中单词在定位后可以进一步moved。这意味着不需要缩小字数,因此在调整过程中字长可以保持不变。通过这个实现,我们还可以做一些像这样的奇葩工作:
Comparison of Obama's and Trump's inaugural address
comparison wordcloud