语境
- 看一下Wordle:http://www.wordle.net/
- 它比我见过的任何其他词云生成器都好看
- 注意:来源不可用-请阅读常见问题解答:http://www.wordle.net/faq#code
我的问题
- 有没有可用的算法可以实现Wordle的功能?
- 如果否,那么有哪些替代方法可以产生类似的输出?
我为什么要问
- 只是好奇
- 想学习
Answers:
我是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
这是Jason Davies使用d3的一个非常好的javascript。您甚至可以使用webfonts。
演示:http : //www.jasondavies.com/wordcloud/
GitHub:https : //github.com/jasondavies/d3-cloud
我已经实现了乔纳森·费恩伯格(Jonathan Feinberg)描述的算法,它使用python创建标签云。它远离美丽的wordle.net云,但它为您提供了实现方法的思路。
您可以在此处找到该项目。
我创建了一个Silverlight组件,该组件使用了Jonathan建议的算法。源代码和示例项目都可以在我的博客上找到:
我的云使您可以根据不同的权重为单词着色和调整大小,并支持单词选择(从坐标)和选中的单词突出显示。您认为合适时可以使用源。
我正在研究WordCram,这是一个用于制作词云的处理库。它在很大程度上受到Wordle的影响,并通过与上面链接的同一PDF aeby进行通知。它为您处理碰撞检测,并让您专注于希望字词的布局,着色,旋转等方式。
http://code.google.com/apis/visualization/documentation/gallery.html
查看词云可视化。不像wordle.net那样花哨,但真正易于添加到您的网站。
我一直在寻找一种类似于Wordle的可视化方法,该方法可以分配与其他数据相关的String的颜色,初始位置和大小,例如文本中的相关性-找不到任何东西,但是感谢我在这里找到的信息(特别是Jonathan的解释和aeby的链接),我最终可以实现“ Cloudio ”,它与wordle相对较近(至少我认为是这样...)并提供了我想要的功能。
它是通过SWT和JFace实现的,我尝试将其集成到JFace的MVC模型中,以便您可以设置内容提供者和标签提供者来修改云的布局,并将其添加到其他Eclipse插件或RCP中。应用。您还可以修改字符串的初始位置的计算方式,这样就不难将其用于集群可视化或其他操作。它的文档仍然很少,并且在某些方面受到限制(并且我是在几个小时前进行的初始上传,因此可能仍然有点bug),但是如果您有兴趣,请访问以下链接:
如果需要快速印象,以下是一些创建的云的链接:https : //github.com/sschwieb/Cloudio/wiki/Example-Clouds
干杯,斯蒂芬
在这里看到我像云一样实现Wordle。它使用相同的螺旋算法和QuadTree数据结构。
http://sourcecodecloud.codeplex.com
要么
http://www.codeproject.com/Articles/224231/Word-Cloud-Tag-Cloud-Generator-Control-for-NET-Win
Lion and Lamb是一个开放源代码的iOS应用程序,它使用所选圣经书中最常见的单词来创建单词云。
它基于Jonathan Feinberg描述的算法。命中测试确实使用了四叉树,但是边界框基于字形的边界矩形。我想将字形分解为许多较小的边界矩形,以将字放置在字形的边界框中。
我这里有一个标签云生成器,我称之为Disorganizer :)
来源TagCloudService 和剃刀标记控件 以及一个WinForm以进行测试 ,您可以将它们放在您的博客,个人资料等中,并带有一些包装。它大量使用C#4.0和System.Drawing命名空间。
之所以创建它,是因为您无法使用其他云生成器来单击标签进行导航,也无法创建悬停动画以显示它们是可单击的。由于对我来说必须显示HTML悬停动画(我正在使用叠加,绝对定位的<a>
标签进行此操作),因此我没有开发任何角度的文字显示-它们是垂直的还是水平的。
警告:以上链接可能在几个月后失效,我计划将其从周围的项目中慢慢解开到一个单独的项目中。
您可以在此样本博客文章上看到一个有效的演示,但它不完整,并且在不完整的站点中。如果有人想提供帮助,请与我联系,我将尽快将其分开。
这是Python 3中wordle的另一种端到端实现,主要基于Jonathan Feinberg的初稿(QuadTrees,螺旋形等)。
该代码(带有注释的详细自述文件)可在此Github存储库中免费获得,这是使用该代码创建的示例单词。
Tim Dream制作了一个非常漂亮的小JavaScript库:
https://github.com/timdream/wordcloud2.js/blob/gh-pages/API.md
它可以在画布上或带有HTML标签的文字云中创建文字云,其中包含许多选项来修改结果。它确实接近wordle的输出。