实现像Wordle这样的词云的算法


201

语境

  • 看一下Wordle:http://www.wordle.net/
  • 它比我见过的任何其他词云生成器都好看
  • 注意:来源不可用-请阅读常见问题解答:http//www.wordle.net/faq#code

我的问题

  • 有没有可用的算法可以实现Wordle的功能?
  • 如果否,那么有哪些替代方法可以产生类似的输出?

我为什么要问

  • 只是好奇
  • 想学习

1
这里有一个替代实现,基于图像处理的位置。速度不是很快,但是非常灵活,非常适合实验。(在Mathematica中提供了完整的实现。)
Szabolcs 2012年

2
我想出了自己的算法(非常简单),并在博客中进行了介绍。它是用Python编写的,应该易于自定义。我试图使其效率提高一半。!在这里输入的形象描述
安德烈亚斯·穆勒

4
我真的很喜欢你问这个问题的方式!+1
kolistivra

Answers:


472

我是Wordle的创造者。Wordle实际上是这样工作的:

数数单词,丢弃无聊的单词,然后按数量降序排序。保留N个单词的前N个单词。为每个单词分配与其计数成正比的字体大小。使用Java2D API为每个单词生成Java2D Shape。

每个单词“都希望”位于某处,例如“在垂直中心的某个随机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

而已。的的部分是在做交叉点测试有效,为此,我用最后命中缓存,层次包围盒,四叉树空间索引(所有这些事情你可以了解更多关于一些勤勉google搜索)。

编辑:正如Reto Aebersold所指出的,现在有一个免费的书章节,涵盖了相同的领域:美丽的可视化,第3章:Wordle


22
“勤奋的谷歌搜索”。喜欢它:)
zengr

6
此处提供更多信息:static.mrfeinberg.com/bv_ch03.pdf-感谢乔纳森。
Reto Aebersold 2011年

感谢您提供的信息Jonathan-我着迷于能创建出如此出色可视化效果的简单算法。
约翰·帕特里克

我仍然对“想在某个地方”这一部分感到困惑。单词的初始位置真的是随机的吗?
adib 2012年

30
SO的美丽……您要询问其工作的人可能实际上回答了您的问题!
Arnab Datta 2012年

33

这是Jason Davies使用d3的一个非常好的javascript。您甚至可以使用webfonts。

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

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


只需复制src =“。js”文件并重新上传它们以进行构建或按原样使用,这非常容易。感谢您的分享,并且效果很好!
Michael d

有没有办法将调色板更改为更美观的东西?我尝试按照colourlovers API的建议,将JSON调用中的js文件从colourlovers.com/api/palettes/random修改colourlovers.com/api/palettes/top,但调色板保持不变。
迈克尔d

这是一个基于演示的响应式工作示例,但可以完全控制文字和颜色。对于自定义调色板,请改用注释的代码。jsbin.com/kiwojayoye/1/edit?html,js,output
Martin Braun

33

我已经实现了乔纳森·费恩伯格(Jonathan Feinberg)描述的算法,它使用python创建标签云。它远离美丽的wordle.net云,但它为您提供了实现方法的思路。

您可以在此处找到该项目。


感谢分享!我一定会通过您的实现。
namenlos

这太棒了。谢谢!
tokudu 2011年

链接(labs.atizo.com)再次断开。您确实应该发布一两个示例图像,以便我们可以看到比较结果。
smci 2013年

@RetoAebersold是否有将该代码与flask或django框架集成的方法?
Mitul Shah's

30

我创建了一个Silverlight组件,该组件使用了Jonathan建议的算法。源代码和示例项目都可以在我的博客上找到:

http://whydoidoit.com

颜色词云

我的云使您可以根据不同的权重为单词着色和调整大小,并支持单词选择(从坐标)和选中的单词突出显示。您认为合适时可以使用源。

示例词云


2
您的博客似乎是空的。链接是否消失?
OR Mapper 2015年


14

我正在研究WordCram,这是一个用于制作词云的处理库。它在很大程度上受到Wordle的影响,并通过与上面链接的同一PDF aeby进行通知。它为您处理碰撞检测,并让您专注于希望字词的布局,着色,旋转等方式。


您的服务是否提供API?
巴特2014年

抱歉,WordCram没有API。这是图书馆,而不是服务。
Dan Bernier 2014年


8

我一直在寻找一种类似于Wordle的可视化方法,该方法可以分配与其他数据相关的String的颜色,初始位置和大小,例如文本中的相关性-找不到任何东西,但是感谢我在这里找到的信息(特别是Jonathan的解释和aeby的链接),我最终可以实现“ Cloudio ”,它与wordle相对较近(至少我认为是这样...)并提供了我想要的功能。

它是通过SWT和JFace实现的,我尝试将其集成到JFace的MVC模型中,以便您可以设置内容提供者和标签提供者来修改云的布局,并将其添加到其他Eclipse插件或RCP中。应用。您还可以修改字符串的初始位置的计算方式,这样就不难将其用于集群可视化或其他操作。它的文档仍然很少,并且在某些方面受到限制(并且我是在几个小时前进行的初始上传,因此可能仍然有点bug),但是如果您有兴趣,请访问以下链接:

如果需要快速印象,以下是一些创建的云的链接:https : //github.com/sschwieb/Cloudio/wiki/Example-Clouds

干杯,斯蒂芬



4

Lion and Lamb是一个开放源代码的iOS应用程序,它使用所选圣经书中最常见的单词来创建单词云。

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

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

圣经启示录的词云


4

我这里有一个标签云生成器,我称之为Disorganizer :)

来源TagCloudService剃刀标记控件 以及一个WinForm以进行测试 ,您可以将它们放在您的博客,个人资料等中,并带有一些包装。它大量使用C#4.0和System.Drawing命名空间。

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

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

您可以在此样本博客文章上看到一个有效的演示,但它不完整,并且在不完整的站点中。如果有人想提供帮助,请与我联系,我将尽快将其分开。


链接无效。我喜欢您博客上的用户界面。
Doug S

谢谢,只需修复它们
Zasz

2

这是Python 3中wordle的另一种端到端实现,主要基于Jonathan Feinberg的初稿(QuadTrees,螺旋形等)。

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

麦克白


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.