สร้างคลาวด์คำจากข้อความ


12

รหัสควรใช้ข้อความจากอินพุตมาตรฐาน:

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

ผลลัพธ์ควรเป็นไฟล์ PNG ที่มีคำว่า cloudสอดคล้องกับข้อความนั้น:

ป้อนคำอธิบายรูปภาพที่นี่

ดังกล่าวข้างต้นเมฆคำที่ถูกสร้างขึ้นโดยใช้ใบสมัครออนไลน์เชี่ยวชาญและกรองคำTheและคำอื่น ๆ ทั่วไป ( of, is, and, notและthe) เนื่องจากนี่คือรหัสกอล์ฟคำทั่วไปจะไม่ถูกกรองและฉันปล่อยให้สุนทรียภาพรองของ cloud word ไปยังตัวเลือกของ coder แต่ละตัว ไม่เหมือนกับภาพที่ตรวจสอบที่นี่ไม่ควรยกเว้นคำทั่วไปหรืออย่างอื่น คำจำกัดความของคำนิยามไว้ด้านล่าง

ในกรณีนี้คำเป็นตัวอักษรและตัวเลข ตัวเลขไม่ได้ทำหน้าที่เป็นตัวคั่น ตัวอย่างเช่น0xAFมีคุณสมบัติเป็นคำ ตัวคั่นจะเป็นอะไรก็ได้ที่ไม่ใช่ตัวอักษรและตัวเลขรวมถึง.(จุด) และ-(ยัติภังค์) ดังนั้นi.e.หรือpick-me-upจะส่งผลให้ 2 หรือ 3 คำตามลำดับ ควรจะเป็นกรณีที่มีความสำคัญ - Thisและthisจะมีคำสองคำที่แตกต่างกัน 'ก็จะแยกเพื่อให้wouldnและtจะมี 2 wouldn'tคำที่แตกต่างจาก

แท็กควรปรากฏเป็นกลุ่ม แต่ไม่ทับซ้อนกันและขนาดตัวอักษรควรเป็นสัดส่วนโดยตรงกับจำนวนการเกิดขึ้นของคำนั้นในข้อความ คำว่าควรปรากฏเพียงครั้งเดียว ไม่จำเป็นต้องใช้สีแบบอักษรเฉพาะในกรณีนี้ การเชื่อมโยงความหมายไม่ได้เป็นข้อกำหนด

คำแนะนำ - กอล์ฟรหัสอื่นนี้สามารถช่วย: นับคำในข้อความและแสดง


โปรดอธิบายสิ่งที่คุณพิจารณาเมฆคำ นอกจากนี้ฉันไม่เข้าใจคำจำกัดความของคุณ คุณช่วยอธิบายให้ชัดเจนว่าคุณหมายถึงอะไรโดยเอาท์พุทควรพิมพ์ด้วยบรรทัดใหม่หลังจากตัวละครแต่ละตัว ?
Howard

3
ภาพตัวอย่างดูเหมือนจะไม่ตรงกับข้อกำหนด นอกจากนี้ยังสร้างคำถามเกี่ยวกับจำนวนคำแต่ละคำที่ควรปรากฏในคลาวด์ซึ่งคุณไม่ต้องตอบทุกที่
ปีเตอร์เทย์เลอ

2
@TimSeguine ผมไม่คิดว่าการส่งรหัสกอล์ฟมีชนิดของสามารถนำมาใช้ใด ๆ ...
Wander Nauta

1
@TimSeguine ความกังวลที่ถูกต้องตามกฎหมาย แต่ทำไมฉันต้องใช้เมื่อมีแอพฟรีจำนวนมากให้ทำ
Eduard Florinescu

1
เมฆผู้สร้างคำของคุณยังดูเหมือนว่าจะมีการกรองof, is, and, และnot the
Doorknob

คำตอบ:


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เรียกมันเช่นนี้ สคริปต์ใช้fdpตัวสร้างกราฟบังคับของ Graphviz เพื่อสร้างภาพ (มันจะคายไฟล์ GraphViz ไปที่ file.txt.dot และไฟล์รูปภาพ PNG ไปที่ file.txt.png) หมายความว่าคุณจะต้องติดตั้ง Graphviz

ภาพด้านบนเป็นเมฆที่ทำจากแฮมเล็ตของเชคสเปียร์ - คุณสามารถบอกได้เพราะมันมี "เป็นหรือไม่ควรเป็น" นอกจากนี้ยังมีเรื่องไร้สาระที่น่ายินดีที่จะพบ:

มันคือเพื่อคุณและฉันแฮมของไม่ใช่ที่พระเจ้าทรงมีเราตอนนี้ ...


คุณอาจต้องปรับแต่งค่าคงที่/5ในบรรทัดที่สองถึงครั้งสุดท้ายทั้งนี้ขึ้นอยู่กับขนาดของข้อความของคุณ 5 ใช้งานได้ดีกับข้อความขนาด Hamlet, 500 สำหรับการป้อนความยาวพระคัมภีร์และอื่น ๆ
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)}

การสาธิตที่ไม่ดี

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

ป้อนคำอธิบายรูปภาพที่นี่


คุณแน่ใจหรือไม่ว่านี่เป็นไฟล์ PNG
จัดการ

ตอนนี้มันจะ !!!
rafaelcastrocouto

1
เกี่ยวกับการตีกอล์ฟรุ่นที่สั้นลงนี้ดูเหมือนว่าจะทำใน 360 ตัวอักษร: pastebin.com/C4dpYLP8
จัดการ

3
... 296 ตัวอักษร: pastebin.com/5BUPavYH
Mathieu Rodic

1
ฉันจะตีกอล์ฟนี้ให้มากขึ้นเป็น 405 ไบต์ ลองที่นี่!
haykam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.