Зробіть із тексту хмару слів


12

Код повинен приймати текст зі стандартного введення:

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

Вихід повинен бути файлом PNG, що містить слово хмара, відповідне цьому тексту:

введіть тут опис зображення

Вище слово хмара було створено з допомогою спеціалізованого інтернет - додатки і фільтрується слово Theі інші загальні слова ( of, is, and, not, і the). Оскільки це кодовий гольф, загальні слова не фільтруються, і я залишаю вторинну естетику слова хмара на вибір кожного кодера. На відміну від зображеного тут зображення, жодні слова не повинні виключатись, загальноприйнятими чи інакше. Визначення слова визначено нижче.

У цьому випадку слово є будь-яким буквено-числовим; номери не виступають як роздільники. Так, наприклад, 0xAFкваліфікується як слово. Роздільниками буде все, що не буває алфавітно-числовим, включаючи .(крапка) та -(дефіс). Таким чином, i.e.або pick-me-upце призведе до 2 або 3 слів відповідно. Має бути з великим регістром - Thisі thisбуде двома різними словами, 'також буде роздільником, wouldnі tбуде 2 різних слова від wouldn't.

Теги повинні бути кластеризованими, але не перекриватися, а розмір шрифту повинен бути прямо пропорційним кількості зустрічей цього слова в тексті. Слово повинно з’являтися лише один раз. Конкретний колір шрифту в цьому випадку не потрібно. Семантична асоціація не є вимогою.

Підказка - Цей інший гольф-код може допомогти: порахуйте слова в тексті та відобразіть їх


Поясніть, будь ласка, що ви вважаєте слово хмара . Також я не розумію ваших вихідних визначень. Чи можете ви, будь ласка, уточнити, що ви маєте на увазі під виходом, слід надрукувати новий рядок після кожного символу ?
Говард

3
Зразок зображення, схоже, не відповідає вимогам. Це також створює питання про те, скільки разів кожне слово повинно з’являтися у хмарі, на яке ви нікуди не відповідаєте.
Пітер Тейлор

2
@TimSeguine Я не думаю, що подання коду-гольфу не має жодного виду повторного використання ...
Wander Nauta

1
@TimSeguine Законодавче занепокоєння, але навіщо мені це потрібно, коли для цього є багато безкоштовних програм.
Едуард Флорінеску

1
Ваше слово хмара творець також , здається, фільтрують of, is, and, not, і the.
Дверна ручка

Відповіді:


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 до файла.txt.png). Це означає, що вам потрібно встановити Graphviz.

Зображення вгорі - це хмара, яку створює Гамлет Шекспіра - ви можете сказати, оскільки вона містить "Бути чи не бути". Тут також можна знайти чудові дурниці:

Тобі і ми, шинка не того, що о Господи має нас, що тепер ...


Можливо, вам доведеться налаштувати константу /5в другому до останнього рядка, залежно від того, наскільки великий ваш текст. 5 добре працює для текстів розміром Гамлета, 500 - для введення Біблії тощо.
Блукати Наута

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
Матьє Родік

1
Я ще більше збираюся в гольф на 405 байт. Спробуйте тут!
хайкам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.