实现像Wordle这样的词云的algorithm
上下文
- 看看Wordle: http ://www.wordle.net/
- 它比我见过的任何其他的词云生成器好看得多
- 注意:源代码不可用 – 阅读FAQ: http : //www.wordle.net/faq#code
我的问题
- 有什么algorithm可以做Wordle做什么?
- 如果不是,那么产生类似产出的一些替代品是什么?
为什么我问
- 只是好奇
- 想学习
我是Wordle的创造者。 这是Wordle实际工作的方式:
把这些单词数一下,扔掉无聊的单词,然后按数字sorting。 保留一些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
而已。 最难的部分是有效地进行交叉testing,为此我使用了最后一次caching,分层边界框和四叉树空间索引(所有这些都是您可以通过一些勤勉search来了解更多的内容)。
编辑:正如Reto Aebersold所指出的那样,现在有一本书可以免费获得,它涵盖了这个领域: 美丽的可视化,第3章:Wordle
这里有一个来自Jason Davies的使用d3的非常好的javascript。 你甚至可以使用它的网页字体。
演示: http : //www.jasondavies.com/wordcloud/
Github: https : //github.com/jasondavies/d3-cloud
我已经创build了一个Silverlight组件,它使用了Jonathan在这里所build议的algorithm。 源代码和示例项目都可以在我的博客上find:
我的云允许您根据不同的权重对单词进行颜色和大小调整,并且支持从坐标select单词和select单词突出显示。 来源是你的使用,如你所见。
我已经实现了一个由Jonathan Feinberg用python描述的algorithm来创build一个标签云。 它远离wordle.net的美丽云彩,但它给你一个想法如何可以完成。
你可以在这里find项目。
我正在研究WordCram ,一个用于制作词云的处理库。 它受Wordle的影响很大,并且被上面链接的相同的PDF aeby通知。 它处理你的碰撞检测,并让你专注于你想如何布置,彩色,旋转等
http://code.google.com/apis/visualization/documentation/gallery.html
看看这个词云可视化。 不像wordle.net,但真正容易添加到您的网站。
我正在寻找类似wordle的可视化,这将允许分配与其他数据相关的string的颜色,初始位置和大小,例如文本中的相关性 – 没有find任何东西,但是由于我在这里find的信息(特别是Jonathan的解释和aeby的链接),我终于可以实现“ Cloudio ”了,它比较接近wordle(至less我认为是这样),并且提供了我正在寻找的function。
它是用SWT和JFace实现的,我试图将它集成到JFace的MVC模型中,这样你就可以设置内容和标签提供程序来修改云的布局并将其添加到其他Eclipse插件或RCP应用。 您还可以修改计算string的初始位置的方式,以便将其用于集群可视化或其他操作并不困难。 在某些方面,它的logging和限制还是很less的(我几小时前做了最初的上传,所以它可能还是有点bug的),但是如果你有兴趣的话,可以看下面的链接:
这里是一些创build的云的链接,以防您想要一个快速的印象: https : //github.com/sschwieb/Cloudio/wiki/Example-Clouds
干杯,斯蒂芬
这里看到我的Wordle像云一样的实现。 它使用相同的螺旋algorithm和QuadTree数据结构。
http://sourcecodecloud.codeplex.com
要么
http://www.codeproject.com/Articles/224231/Word-Cloud-Tag-Cloud-Generator-Control-for-NET-Win
狮子和羊羔是一个开源的iOS应用程序,使用圣经选定的书中最常用的单词创build词云。
它基于Jonathan Feinberg所描述的algorithm。 命中testing确实使用四叉树,但边界框基于字形的边界矩形。 我想把字形分解成许多更小的边界矩形,以便在字形的边界框中放置字。
GitHub: https : //github.com/PetahChristian/LionAndLamb
我在这里有一个标签云发生器,我称之为Disorganizer 🙂
来源TagCloudService和剃刀标记控制和一个WinForm的testing目的 ,你可以把你的博客,configuration文件等,与一个小包装周围。 它严重地使用C#4.0和System.Drawing命名空间。
我创build了它,因为与其他云生成器不能单击标签进行导航,不能创buildhoveranimation,以显示它们是可点击的。 由于在HTML中显示hoveranimation对于我来说是必要的(我正在用overlay-ed,绝对定位的<a>
标签)我没有开发任何angular度的单词显示 – 它们是垂直或水平的。
警告:上述链接可能会在几个月内失效,我打算慢慢从周围的项目解开它到一个单独的项目。
您可以在此示例博客文章中看到一个工作演示,但它不完整,并在一个不完整的网站。 联系我,如果有人想贡献,我会继续分离出来尽快。
Zoomable TagCloud Generator ,从给定源(文本文件和其他源)提取关键字,并将TagCloud显示为缩放用户界面(ZUI)