Stwórz chmurę słów z tekstu


12

Kod powinien pobrać tekst ze standardowego wejścia:

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

Wyjściem powinien być plik PNG zawierający chmurę słów odpowiadającą temu tekstowi:

wprowadź opis zdjęcia tutaj

Powyższy word cloud został stworzony przy użyciu specjalistycznego wniosek online i filtrowane słowo Thei innych wspólnych słów ( of, is, and, not, i the). Ponieważ jest to golf golfowy, pospolite słowa nie będą filtrowane i pozostawiam dodatkową estetykę chmury słów do wyboru każdego kodera. W przeciwieństwie do przykładowego obrazu tutaj nie należy wykluczać żadnych słów, pospolitych ani innych. Definicja słowa jest zdefiniowana poniżej.

W tym przypadku słowo jest dowolną alfanumeryczną; liczby nie działają jako separatory. Na przykład 0xAFkwalifikuje się jako słowo. Separatory będą to wszystko, co nie jest alfanumeryczne, w tym .(kropka) i -(łącznik). Tak więc i.e.lub pick-me-updałoby odpowiednio 2 lub 3 słowa. Powinny być rozróżniane małe Thisi wielkie litery - i thisbędą to dwa różne słowa, 'będą także separatorem wouldni tbędą 2 różnymi słowami wouldn't.

Znaczniki powinny wyglądać na skupione, ale nie nakładające się, a rozmiar czcionki powinien być wprost proporcjonalny do liczby wystąpień tego słowa w tekście. Słowo powinno pojawić się tylko raz. W tym przypadku nie jest wymagany określony kolor czcionki. Sesja semantyczna nie jest wymagana.

Wskazówka - ten inny kod golfowy może pomóc: policz słowa w tekście i wyświetl je


Wyjaśnij, co uważasz za chmurę słów . Również nie rozumiem twoich definicji wyjściowych. Czy możesz wyjaśnić, co masz na myśli mówiąc, że po każdym znaku należy wydrukować nowy wiersz ?
Howard

3
Przykładowy obraz nie spełnia wymagań. Powoduje to również pytanie, ile razy każde słowo powinno pojawić się w chmurze, na które nigdzie nie odpowiadasz.
Peter Taylor

2
@TimSeguine Nie sądzę, aby zgłoszenia do gry w golfa miały jakikolwiek rodzaj ponownego wykorzystania ...
Wander Nauta

1
@ TimSeguine Uzasadniona obawa, ale dlaczego miałbym jej potrzebować, skoro istnieje wiele darmowych aplikacji, aby to zrobić.
Eduard Florinescu

1
Twoje słowo chmura twórca również wydaje się być filtrowane of, is, and, not, i the.
Klamka

Odpowiedzi:


7

Przykład wyjściowy

Python 3, 363 308 293 274 znaków

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

Nazwijmy to tak: python cloud.py file.txt. Skrypt wykorzystuje fdpgenerowany przez Graphviz generator siły do ​​wygenerowania obrazu (wypluje plik GraphViz do pliku.txt.dot i plik obrazu PNG do pliku.txt.png). Oznacza to, że musisz mieć zainstalowany Graphviz.

Powyższy obraz przedstawia chmurę Hamleta Szekspira - można powiedzieć, ponieważ zawiera „Być albo nie być”. Można również znaleźć zachwycające bzdury:

Dla Ciebie i dla mnie Szynką Nie, że Panie, mamy nas, co teraz ...


Może być konieczne dostosowanie stałej /5w wierszu od ostatniego do ostatniego, w zależności od tego, jak duży jest twój tekst. 5 działa dobrze dla tekstów wielkości Hamleta, 500 dla tekstów biblijnych i tak dalej.
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)}

Niegolfowane demo

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

wprowadź opis zdjęcia tutaj


Czy jesteś pewien, że to tworzy plik PNG?
manatwork

Teraz to robi !!!
rafaelcastrocouto

1
Jeśli chodzi o golfa, ta skrócona wersja wydaje się robić to w 360 znakach: pastebin.com/C4dpYLP8
manatwork

3

1
Też zamierzam zagrać w golfa jeszcze bardziej w 405 bajtów. Wypróbuj tutaj!
haykam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.