Buat kata cloud dari teks

12

Kode harus mengambil teks dari input standar:

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

Outputnya harus berupa file PNG yang berisi kata cloud yang sesuai dengan teks itu:

masukkan deskripsi gambar di sini

Di atas awan Kata dibuat menggunakan aplikasi online khusus dan disaring kata Thedan kata-kata umum lainnya ( of, is, and, not, dan the). Karena ini adalah kode golf, kata-kata umum tidak akan disaring dan saya meninggalkan estetika sekunder dari kata cloud ke pilihan masing-masing pembuat kode. Berbeda dengan gambar yang dicontohkan di sini, tidak ada kata yang harus dikecualikan, umum atau sebaliknya. Definisi kata didefinisikan di bawah ini.

Dalam hal ini kata adalah apa saja alfa-numerik; angka tidak bertindak sebagai pemisah. Jadi, misalnya, 0xAFmemenuhi syarat sebagai sebuah kata. Pemisah akan berupa apa saja yang bukan alfanumerik, termasuk .(titik) dan -(tanda hubung). Dengan demikian i.e.atau pick-me-upakan menghasilkan 2 atau 3 kata, masing-masing. Harus case sensitive - Thisdan thisakan menjadi dua kata yang berbeda, 'juga akan menjadi pemisah sehingga wouldndan takan menjadi 2 kata yang berbeda wouldn't.

Tag harus muncul bergerombol tetapi tidak tumpang tindih dan ukuran font harus berbanding lurus dengan jumlah kemunculan kata itu dalam teks. Kata itu hanya akan muncul sekali. Warna font khusus tidak diperlukan dalam kasus ini. Asosiasi semantik bukanlah keharusan.

Petunjuk - Golf kode lain ini dapat membantu: Menghitung kata-kata dalam teks dan menampilkannya

Eduard Florinescu
sumber
Tolong jelaskan apa yang Anda anggap sebagai kata cloud . Saya juga tidak mengerti definisi keluaran Anda. Bisakah Anda menjelaskan apa yang Anda maksud dengan output harus dicetak dengan baris baru setelah setiap karakter ?
Howard
3
Gambar sampel tampaknya tidak cocok dengan persyaratan. Ini juga menciptakan pertanyaan tentang berapa kali setiap kata akan muncul di cloud, yang tidak Anda jawab di mana pun.
Peter Taylor
2
@TimSeguine Saya tidak berpikir kiriman kode-golf dapat digunakan kembali ...
Wander Nauta
1
@TimSeguine Kekhawatiran sah, tapi mengapa saya membutuhkannya ketika ada banyak aplikasi gratis untuk melakukannya.
Eduard Florinescu
1
Cloud kata Anda pencipta tampaknya juga telah disaring of, is, and, not, dan the.
Gagang pintu

Jawaban:

7

Contoh keluaran

Python 3, 363 308 293 274 karakter

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

Sebut saja seperti ini: python cloud.py file.txt. Script menggunakan fdpgenerator graph yang diarahkan paksa Graphviz untuk menghasilkan gambar (itu akan memuntahkan file GraphViz ke file.txt.dot dan file gambar PNG ke file.txt.png). Ini berarti Anda harus memasang Graphviz.

Gambar di atas adalah awan yang dibuatnya Hamlet Shakespeare - Anda bisa tahu, karena berisi "Menjadi atau tidak menjadi". Ada juga omong kosong yang menyenangkan:

Ini, bagi Anda dan saya, Ham Bukanlah yang tuan miliki, apa yang sekarang ...

Mengembara Nauta
sumber
Anda mungkin perlu mengubah konstanta /5di baris kedua hingga terakhir tergantung pada seberapa besar teks Anda. 5 bekerja dengan baik untuk teks berukuran Hamlet, 500 untuk input panjang Alkitab dan sebagainya.
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)}

Demo tidak digabungkan

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

masukkan deskripsi gambar di sini

rafaelcastrocouto
sumber
Apakah Anda yakin ini menghasilkan file PNG?
manatwork
Sekarang ya !!!
rafaelcastrocouto
1
Mengenai golf, versi singkat ini tampaknya melakukannya dalam 360 karakter: pastebin.com/C4dpYLP8
manatwork
3
... 296 karakter: pastebin.com/5BUPavYH
Mathieu Rodic
1
Saya juga akan bermain golf ini lebih dari 405 byte. Coba di sini!
haykam