Bir metinden kelime bulutu oluşturma


12

Kod, standart girişten metin almalıdır:

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

Çıktı, o metne karşılık gelen kelime bulutu içeren bir PNG dosyası olmalıdır :

resim açıklamasını buraya girin

Yukarıdaki kelime bulutu oluşturulmuş bir uzman online uygulamasını kullanarak ve onu kelime süzülür Theve diğer ortak kelimeleri ( of, is, and, not, ve the). Bu kod golf olduğu için, ortak kelimeler filtrelenmeyecek ve kelime bulutu ikincil estetiğini her kodlayıcının seçimine bırakıyorum. Burada örneklenen görüntünün tersine, hiçbir kelime, ortak veya başka şekilde dışlanmamalıdır. Bir kelimenin tanımı aşağıda tanımlanmıştır.

Bu durumda bir kelime alfasayısal bir şeydir; sayılar ayırıcı işlevi görmez. Yani, örneğin, 0xAFbir kelime olarak nitelendirilir. Ayırıcılar, .(nokta) ve -(tire) dahil olmak üzere alfa-sayısal olmayan herhangi bir şey olacaktır . Böylece i.e.ya pick-me-upda sırasıyla 2 veya 3 kelimeye neden olur. Büyük / küçük harfe duyarlı olmalıdır - Thisve thisiki farklı kelime 'olurdu, aynı zamanda ayırıcı olurdu wouldnve t2 farklı kelime olacaktır wouldn't.

Etiketler kümelenmiş olarak görünmeli, ancak üst üste binmemeli ve yazı tipi boyutu, metindeki o kelimenin tekrarlama sayısıyla doğru orantılı olmalıdır. Kelime yalnızca bir kez görünmelidir. Bu durumda özel yazı tipi rengi gerekli değildir. Anlamsal ilişkilendirme bir gereklilik değildir.

İpucu - Bu diğer kod golf yardımcı olabilir: Bir metindeki kelimeleri sayın ve görüntüleyin


Lütfen bir kelime bulutu olarak düşündüğünüzü açıklayın . Ayrıca çıktı tanımlarınızı da anlamıyorum. Çıktı ile ne demek istediğinizi her karakterden sonra yeni bir satır ile basmak ister misiniz?
Howard

3
Örnek resim gereksinimlere uygun görünmüyor. Ayrıca, bulutta her kelimenin kaç kez görünmesi gerektiği, hiçbir yere cevap vermemeniz hakkında bir soru oluşturur.
Peter Taylor

2
@TimSeguine Ben kod-golf başvuruları herhangi bir yeniden kullanılabilirlik sanmıyorum ...
Wander Nauta

1
@TimSeguine Meşru endişe, ama bunu yapmak için ücretsiz uygulamalar bir sürü olduğunda neden buna ihtiyacım var?
Eduard Florinescu

1
Senin sözün bulut yaratıcısı da filtrelenmiş gibi görünüyor of, is, and, not, ve the.
Kapı tokmağı

Yanıtlar:


7

Çıktı örneği

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

Böyle diyelim: python cloud.py file.txt. Komut dosyası fdp, görüntüyü oluşturmak için Graphviz'in zorla yönlendirilmiş grafik oluşturucusunu kullanır (bir GraphViz dosyasını file.txt.dot dosyasına ve bir PNG resim dosyasını file.txt.png'ye gönderir). Bu, Graphviz'in kurulu olması gerektiği anlamına gelir.

Yukarıdaki görüntü, Shakespeare'in Hamlet'inde oluşturduğu buluttur - "Olsun ya da olmamalı" içerdiğinden söyleyebilirsiniz. Ayrıca bazı hoş saçmalıklar da var:

Siz ve ben, ya Rabbin bize sahip olduğu değil , şimdi ne var?


/5Metninizin ne kadar büyük olduğuna bağlı olarak ikinci ile son satır arasındaki sabiti ayarlamanız gerekebilir . 5, Hamlet boyutlu metinler için iyi çalışır, İncil boyunda girişler için 500 vb.
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)}

Unngolfed demo

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

resim açıklamasını buraya girin


Bunun bir PNG dosyası oluşturduğundan emin misiniz?
manatwork

Şimdi öyle !!!
rafaelcastrocouto

1
Golf ile ilgili olarak, bu kısaltılmış sürüm 360 karakterle yapıyor gibi görünüyor: pastebin.com/C4dpYLP8
manatwork

3
... 296 karakter: pastebin.com/5BUPavYH
Mathieu Rodic

1
Ben de bunu daha da 405 byte'a golf edeceğim. Burada deneyin!
haykam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.