上下文

看看Wordle: http://www.wordle.net/ 它比我见过的任何其他词云生成器都好看得多 注意:源代码不可用-阅读常见问题:http://www.wordle.net/faq#code

我的问题

有没有一种算法可以做到Wordle所做的呢? 如果没有,有什么替代方案可以产生类似的输出?

我为什么问这个问题

只是好奇 想要学习


当前回答

Tim Dream制作了一个非常不错的JavaScript库:

https://github.com/timdream/wordcloud2.js/blob/gh-pages/API.md

它可以在画布上或HTML标签上创建文字云,并提供许多选项来修改结果。它非常接近wordle的输出。

其他回答

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

http://whydoidoit.com

我的云可以让你根据不同的权重为单词着色和大小,它支持单词选择(从坐标)和选中的单词高亮显示。源代码是您的,您可以根据需要使用。

我已经实现了Jonathan Feinberg所描述的算法,使用python创建了一个标记云。它与wordle.net的美丽云相去甚远,但它让你知道如何做到这一点。

你可以在这里找到这个项目。

我正在研究WordCram,一个用于制作词云的处理库。它受到Wordle的很大影响,并被上面链接的相同的PDF aeby告知。它为你处理碰撞检测,让你专注于你想要的文字布局,颜色,旋转等。

我是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

我正在寻找一个类似文字的可视化,它可以分配与其他数据相关的字符串的颜色,初始位置和大小,例如文本中的相关性-没有找到任何东西,但多亏了我在这里找到的信息(特别是Jonathan的解释和aeby的链接),我终于可以实现“Cloudio”,它相对接近wordle(至少我是这样认为的…),并提供了我正在寻找的功能。

It is implemented with SWT and JFace, and I tried to integrate it into the MVC-model of JFace, such that you can set content- and label-providers to modify the layout of a cloud and add it to other Eclipse-plugins or RCP apps. You can also modify the way the initial position of a string is calculated, such that is not difficult to use it for cluster visualization or else. It is still poorly documented and limited in some ways (and I did the initial upload a few hours ago, so it might still be a bit buggy), but if you're interested, here's the link:

如果你想快速了解一些云,这里有一个链接:https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

干杯, 斯蒂芬