텍스트에서 단어 구름 만들기


12

코드는 표준 입력에서 텍스트를 가져와야합니다.

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

출력은 해당 텍스트에 해당하는 단어 구름이 포함 된 PNG 파일이어야 합니다.

여기에 이미지 설명을 입력하십시오

위의 단어 구름이 생성 된 전문 온라인 응용 프로그램을 사용 하고 단어 필터링 The및 기타 일반적인 단어를 ( of, is, and, not, 및 the). 이것이 코드 골프이기 때문에 일반적인 단어는 필터링되지 않으며 단어 구름의 2 차 미학을 각 코더의 선택에 맡깁니다. 여기에 예시 된 이미지와 달리, 단어는 공통적이거나 다른 방식으로 제외되어서는 안됩니다. 단어의 정의는 아래에 정의되어 있습니다.

이 경우 단어는 영숫자입니다. 숫자는 구분 기호로 작동하지 않습니다. 예를 들어, 0xAF단어로 자격이 있습니다. 구분 기호는 .(점) 및 -(하이픈)을 포함하여 영숫자가 아닌 항목입니다 . 따라서 i.e.또는 pick-me-up2 개 또는 3 개의 단어가 각각 생성됩니다. 대소 문자를 구분해야한다 - This그리고 this두 개의 다른 단어 것, '또한 그렇게 구분을 것 wouldnt2 개 다른 단어 될 것입니다 wouldn't.

태그는 클러스터로 표시되지만 겹치지 않아야하며 글꼴 크기는 텍스트에서 해당 단어의 발생 횟수에 정비례해야합니다. 단어는 한 번만 나타나야합니다. 이 경우 특정 글꼴 색이 필요하지 않습니다. 시맨틱 연관은 요구 사항이 아니다.

힌트 -이 다른 코드 골프가 도움이 될 수 있습니다. 텍스트의 단어 수를 세어 표시합니다


단어 구름 이라고 생각하는 것을 설명하십시오 . 또한 출력 정의를 이해하지 못합니다. 각 문자 다음출력이 새 줄로 인쇄되어야 함 을 의미하는 것을 명확히 할 수 있습니까 ?
Howard

3
샘플 이미지가 요구 사항과 일치하지 않는 것 같습니다. 또한 클라우드에 각 단어가 몇 번 나타나야하는지에 대한 질문을 작성합니다.
피터 테일러

2
@TimSeguine 코드 골프 제출에는 재사용 성이 없다고 생각합니다.
Wander Nauta

1
@TimSeguine 합법적 인 관심사이지만 무료 앱이 많을 때 왜 필요할까요?
Eduard Florinescu

1
귀하의 단어 구름 작성자는 필터링 된 것 같습니다 of, is, and, not,와 the.
Doorknob

답변:


7

출력 예

파이썬 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가 설치되어 있어야 함을 의미합니다.

위의 이미지는 셰익스피어의 햄릿으로 만들어진 구름입니다. 유쾌한 넌센스도 있습니다.

그것은 당신과 나는,의 햄에있다 하지 않는 것이 지금의 O 주님이 우리를 ...


/5텍스트의 크기에 따라 마지막 줄에서 상수를 조정해야 할 수도 있습니다 . 5는 Hamlet 크기의 텍스트에 적합하고 500은 성경 길이 입력에 적합합니다.
Wander Nauta

5

자바 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 파일을 생성합니까?
manatwork

이제는 !!!
rafaelcastrocouto

1
골프와 관련하여이 단축 버전은 360 자로 표시됩니다. pastebin.com/C4dpYLP8
manatwork


1
또한 이것을 405 바이트로 더 골프화 할 것입니다. 여기 사용해보십시오!
haykam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.