用文字造词云


12

该代码应从标准输入中获取文本:

The definition of insanity is quoting the same phrase again and again and not expect despair.

输出应该是一个PNG文件,其中包含与该文本相对应的词云

在此处输入图片说明

以上词云创建使用专门的在线应用程序,它过滤词The等常用词(ofisandnot,和the)。由于这是代码高尔夫,因此不会过滤常见的单词,因此我将单词云的次要美学留给每个编码者选择。与此处示例的图像不同,任何单词都不应被排除,无论是普通单词还是其他形式。单词的定义如下。

在这种情况下,单词是字母数字。数字不充当分隔符。因此,例如,0xAF有资格作为一个单词。分隔符将是非字母数字的任何内容,包括.(点)和-(连字符)。因此i.e.pick-me-up将分别产生2或3个字。应区分大小写- This并且this是两个不同的词, '也将是如此隔膜wouldn,并t将会从2个不同的字wouldn't

标签应成簇出现,但不能重叠,字体大小应与该单词在文本中的出现次数成正比。这个词应该只出现一次。在这种情况下,不需要特定的字体颜色。语义关联不是必需的。

提示 -此其他代码可以帮助您: 计算文本中的单词并显示它们


请解释一下您对词云的看法。我也不理解您的输出定义。您能否说明输出的含义是在每个字符后换行
2014年

3
样本图片似乎不符合要求。它还会产生一个问题,即每个单词应在云中出现多少次,而您在任何地方都不会回答。
彼得·泰勒

2
@TimSeguine我认为代码高尔夫球提交没有任何可重用性……
Wander Nauta

1
@TimSeguine合法的关注点,但是当有许多免费的应用程序需要这样做时,为什么我需要它。
Eduard Florinescu 2014年

1
你的话云创作者也似乎过滤ofisandnot,和the
门把手

Answers:


7

输出例子

Python 3中,363个 308 293 274字符

import os,sys,re,collections as C
c=C.Counter()
n=sys.argv[1]
o="graph d{"
for w in re.findall("\w*",open(n).read()):c[w]+=1
for w,x in c.most_common(75)[1:]:o+="%s[fontsize=%s,shape=none];"%(w,x/5)
open(n+'.dot','w').write(o+"}")
os.system("fdp -Tpng %s.dot>%s.png"%(n,n))

这样称呼:python cloud.py file.txt。该脚本使用Graphviz的fdp力导向图生成器来生成图像(它将GraphViz文件输出到file.txt.dot,将PNG图像文件输出到file.txt.png)。这意味着您需要安装Graphviz。

上面的图片是莎士比亚的《哈姆雷特》所形成的云-您可以分辨出来,因为它包含“存在或不存在”。还有一些令人愉快的废话:

对您和我来说,不是上帝的火腿让我们拥有了,现在……


您可能需要调整/5倒数第二行中的常数,具体取决于文本的大小。5个适用于哈姆雷特尺寸的文本,500个适合圣经长度的输入,依此类推。
Wander Nauta

5

JAVASCRIPT 473

var wordCloud=function(e){var t=e.split(/[\s-.,;]+/);var n={},r;for(r in t){var i=t[r];n[i]=n[i]+1||1}var s=document;var o=s.createElement("canvas");o.width=600;o.height=400;o.style.display="none";s.body.appendChild(o);var u=o.getContext("2d");var a=0,f=50;for(var i in n){u.font=n[i]*50+"px monospace";u.fillText(i,a,f+n[i]*5);a+=i.length*n[i]*50;if(a>o.width*.6){a=0;f+=n[i]*5+100}}var l=o.toDataURL("image/png");var c=s.createElement("img");c.src=l;s.body.appendChild(c)}

取消演示

wordCloud("string;abc,test-omg shouldn't test omg lalala. s2 s2 s2")

在此处输入图片说明


您确定这会产生PNG文件吗?
manatwork 2014年

现在可以了!
rafaelcastrocouto 2014年

1
关于打高尔夫球,这个简化的版本似乎可以用360个字符完成操作:pastebin.com/C4dpYLP8
manatwork 2014年


1
我还将进一步打高尔夫球到405个字节。在这里尝试!
haykam '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.