テキストから単語の雲を作る


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-up2語または3語になります。大文字と小文字を区別する必要があります- Thisそして、this2つの異なる単語であり、 'またセパレータなのでwouldntから2つの異なる単語になりますwouldn't

タグはクラスター化されているように見えますが、重なっていないようにし、フォントサイズはテキスト内のその単語の出現数に正比例する必要があります。単語は1回だけ表示されます。この場合、特定のフォントの色は必要ありません。セマンティックアソシエーションは必須ではありません。

ヒント -この他のコードゴルフは助けることができます: テキスト内の単語をカウントし、それらを表示します


あなたが単語雲と考えるものを説明してください。また、出力の定義がわかりません。出力が各文字の後に改行で印刷されるという意味を明確にしてください。
ハワード14年

3
サンプル画像は要件を満たしていないようです。また、クラウドに各単語が表示される回数についての質問も作成されますが、どこにも答えません。
ピーターテイラー14年

2
@TimSeguine私は...コード・ゴルフ提出は再利用性のいずれかの種類を持っているとは思わない
ワンダナウター

1
@TimSeguine正当な懸念ですが、それを行うための無料アプリがたくさんあるのに、なぜそれが必要なのでしょうか。
エデュアルドフロリネスク14年

1
あなたのワードクラウド作成者はまた、フィルタ処理しているようだofisandnot、とthe
ドアノブ

回答:


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テキストの大きさに応じて、最後から2番目の行の定数を微調整する必要がある場合があります。5はハムレットサイズのテキスト、500は聖書の長さの入力などに適しています。
さまようナウタ

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)}

Ungolfedデモ

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

ここに画像の説明を入力してください


これでPNGファイルが生成されますか?
マナトワーク14年

今それは!!!
rafaelcastrocouto

1
ゴルフに関しては、この短縮バージョンは360文字でそれを行うようだ:pastebin.com/C4dpYLP8
manatwork


1
また、これをさらに405バイトまでゴルフします。ここで試してみてください!
haykam
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.