语境
- 看看 Wordle:http ://www.wordle.net/
- 它比我见过的任何其他词云生成器都好看
- 注意:源不可用 - 阅读常见问题解答:http ://www.wordle.net/faq#code
我的问题
- 是否有可用的算法可以完成 Wordle 的工作?
- 如果不是,有哪些替代方案可以产生类似的输出?
为什么我要问
- 只是好奇
- 想学
我是 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
就是这样。困难的部分是有效地进行交叉测试,为此我使用了最后一次命中缓存、分层边界框和四叉树空间索引(所有这些你都可以通过一些勤奋的谷歌搜索了解更多信息)。
编辑:正如 Reto Aebersold 指出的那样,现在有一个免费的书籍章节,涵盖了同样的领域:美丽的可视化,第 3 章:Wordle
这是 Jason Davies 使用 d3 的一个非常好的 javascript。你甚至可以使用 webfonts。
我已经使用 python 实现了 Jonathan Feinberg 描述的算法来创建标签云。它与 wordle.net 的美丽云相去甚远,但它让您了解如何做到这一点。
您可以在此处找到该项目。
我创建了一个 Silverlight 组件,该组件使用 Jonathan 在此处建议的算法。源代码和示例项目都可以在我的博客上找到:
我的云可以让你根据不同的权重对单词进行颜色和大小,它支持单词选择(从坐标)和选定的单词突出显示。来源是你认为合适的使用。
我正在研究WordCram,这是一个用于制作词云的处理库。它深受 Wordle 的影响,并受到与上面链接的同一个 PDF aeby 的影响。它为您处理碰撞检测,并让您专注于您希望文字的布局、着色、旋转等方式。
http://code.google.com/apis/visualization/documentation/gallery.html
查看词云可视化。不像 wordle.net 那样花哨,但很容易添加到您的网站。
我正在寻找一种类似于 wordle 的可视化,它允许分配与其他数据相关的字符串的颜色、初始位置和大小,例如文本中的相关性 - 没有找到任何东西,但感谢我在这里找到的信息(尤其是乔纳森的解释和 aeby 的链接),我终于可以实现“ Cloudio ”,它相对接近 wordle(至少我认为是这样......)并提供了我正在寻找的功能。
它是用 SWT 和 JFace 实现的,我尝试将它集成到 JFace 的 MVC 模型中,这样您就可以设置内容和标签提供者来修改云的布局并将其添加到其他 Eclipse 插件或 RCP应用。您还可以修改计算字符串初始位置的方式,这样不难将其用于集群可视化或其他方面。它的文档仍然很差并且在某些方面受到限制(我在几个小时前进行了初始上传,所以它可能仍然有点错误),但如果您有兴趣,这里是链接:
这是一些创建的云的链接,以防您想要快速印象:https ://github.com/sschwieb/Cloudio/wiki/Example-Clouds
干杯,斯蒂芬
在这里看一下我对 Wordle like cloud 的实现。它使用相同的螺旋算法和四叉树数据结构。
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 和razor 标记控件 以及用于测试目的的 WinForm ,您可以将其放入您的博客、个人资料等,并在其周围加上一点包装。它大量使用 C# 4.0 和 System.Drawing 命名空间。
我创建它是因为使用其他云生成器您无法单击标签进行导航,也无法创建悬停动画以显示它们是可点击的。由于在 HTML 中显示悬停动画对我来说是必要的(我正在使用覆盖的、绝对定位的<a>
标签来执行此操作)我还没有开发任何角度的文字显示——它们要么是垂直的,要么是水平的。
警告:以上链接可能会在几个月后失效,我打算慢慢将其从周边项目中解开,成为一个单独的项目。
您可以在此示例博客文章中看到一个工作演示,但它不完整,并且位于不完整的站点中。如果有人想贡献,请与我联系,我会尽快将其分离出来。
这是Python 3中 wordle 的另一个端到端实现,主要基于 Jonathan Feinberg 的初始大纲(QuadTrees、spirals 等)。
该代码(已注释,带有详细的自述文件)可在此Github 存储库中免费获得,这是使用该代码创建的示例 wordle。
Tim Dream 制作了一个非常不错的 JavaScript 小库:
https://github.com/timdream/wordcloud2.js/blob/gh-pages/API.md
它可以在画布上创建文字云,也可以使用带有许多选项的 HTML 标签来修改结果。它非常接近 wordle 的输出。
我用 Julia 语言实现了一个名为WordCloud.jl的词云生成器。可以在此处找到有关其算法的简要说明。
与大多数其他实现不同,我基于梯度优化来设计它。这是一种非贪心算法,其中单词可以在定位后进一步移动。这意味着不需要缩小字,因此可以在调整过程中保持字长不变。通过这个实现,我们还可以做一些花哨的工作:
奥巴马和特朗普就职演说的比较