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

问题描述 投票:196回答:11

上下文

我的问题

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

我为什么这么问

  • 只是好奇
  • 想学习
layout fonts typography tag-cloud wordle
11个回答
459
投票

我是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指出的那样,现在有一本免费提供的书籍章节涵盖了同一领域:Beautiful Visualization, Chapter 3: Wordle


4
投票

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

来源A word cloud of the Bible book of RevelationTagCloudService以及你可以放在你的博客,个人资料等中的razor markup control,周围有一点包装。它大量使用C#4.0和System.Drawing命名空间。

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

警告:上述链接可能在几个月内无效,我打算从周围的项目中慢慢解开它到一个单独的项目中。

您可以看到一个工作演示<a>,但它不完整,并且在一个不完整的网站。如果有人想要捐款,请联系我,我会尽快将其分开。


1
投票

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

代码(注释,详细的自述文件)可以在这个on this sample blog post免费获得,这是一个用代码创建的示例wordle。

Github repository


32
投票

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

你可以找到项目here


31
投票

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

http://whydoidoit.com

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


31
投票

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

但是:ぁzxswい

Github:http://www.jasondavies.com/wordcloud/


14
投票

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


10
投票

WordCram

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


8
投票

我正在寻找一个类似于wordle的可视化,它可以分配与其他数据相关的字符串的颜色,初始位置和大小,例如文本中的相关性 - 没有找到任何内容,但是由于我在这里找到的信息(特别是Jonathan的解释和aeby的链接),我终于可以实现'http://code.google.com/apis/visualization/documentation/gallery.html',它相对接近wordle(至少我认为是这样......)并提供我正在寻找的功能。

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

这里是一些创建云的链接,以防你需要快速印象:Cloudio

干杯,斯蒂芬


8
投票

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

https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

要么

http://sourcecodecloud.codeplex.com


4
投票

Lion and Lamb是一款开源iOS应用程序,它使用所选圣经中最频繁的单词来创建单词云。

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

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

https://github.com/PetahChristian/LionAndLamb

© www.soinside.com 2019 - 2024. All rights reserved.