Tạo một đám mây từ từ một văn bản


12

Mã phải lấy văn bản từ đầu vào tiêu chuẩn:

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

Đầu ra phải là một tệp PNG chứa đám mây từ tương ứng với văn bản đó:

nhập mô tả hình ảnh ở đây

Trên đám mây từ được tạo ra bằng cách sử dụng ứng dụng trực tuyến chuyên và nó được lọc từ Thevà các từ thông dụng khác ( of, is, and, not, và the). Vì đây là mã golf, các từ phổ biến sẽ không được lọc và tôi để lại tính thẩm mỹ thứ cấp của đám mây từ cho sự lựa chọn của mỗi lập trình viên. Không giống như hình ảnh được kiểm tra ở đây, không có từ nào nên được loại trừ, phổ biến hoặc khác. Định nghĩa của một từ được định nghĩa dưới đây.

Trong trường hợp này, một từ là bất cứ thứ gì có dạng chữ số; số không đóng vai trò là dấu phân cách. Vì vậy, ví dụ, 0xAFđủ điều kiện là một từ. Dấu phân cách sẽ là bất cứ thứ gì không phải là số alpha, bao gồm .(dấu chấm) và -(dấu gạch nối). Do đó i.e.hoặc pick-me-upsẽ dẫn đến 2 hoặc 3 từ tương ứng. Nên phân biệt chữ hoa chữ thường - Thisthissẽ là hai từ khác nhau, 'cũng sẽ là dấu phân cách wouldntsẽ là 2 từ khác nhau wouldn't.

Các thẻ sẽ xuất hiện theo cụm nhưng không chồng chéo và kích thước phông chữ phải tỷ lệ thuận với số lần xuất hiện của từ đó trong văn bản. Từ này chỉ xuất hiện một lần. Màu chữ cụ thể là không cần thiết trong trường hợp này. Hiệp hội ngữ nghĩa không phải là một yêu cầu.

Gợi ý - Trò chơi mã khác này có thể giúp: Đếm các từ trong văn bản và hiển thị chúng


Hãy giải thích những gì bạn coi là một đám mây từ . Ngoài ra tôi không hiểu định nghĩa đầu ra của bạn. Bạn có thể vui lòng làm rõ những gì bạn có nghĩa là đầu ra nên được in với dòng mới sau mỗi ký tự ?
Howard

3
Hình ảnh mẫu dường như không phù hợp với yêu cầu. Nó cũng tạo ra một câu hỏi về số lần mỗi từ sẽ xuất hiện trong đám mây mà bạn không trả lời ở bất cứ đâu.
Peter Taylor

2
@TimSeguine Tôi không nghĩ rằng việc gửi mã golf có bất kỳ loại tái sử dụng nào ...
Wander Nauta

1
@TimSeguine Mối quan tâm chính đáng, nhưng tại sao tôi lại cần nó khi có rất nhiều ứng dụng miễn phí để làm điều đó.
Eduard Florinescu

1
Tạo đám mây từ của bạn cũng dường như đã được lọc of, is, and, not, và the.
Doorknob

Câu trả lời:


7

Ví dụ đầu ra

Python 3, 363 308 293 274 ký tự

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

Gọi nó như thế này : python cloud.py file.txt. Kịch bản sử dụng trình fdptạo biểu đồ hướng lực của Graphviz để tạo hình ảnh (nó sẽ nhổ một tệp GraphViz sang file.txt.dot và tệp hình ảnh PNG thành file.txt.png). Điều này có nghĩa là bạn sẽ cần phải cài đặt Graphviz.

Hình trên là đám mây do Shakespeare's Hamlet tạo ra - bạn có thể biết, vì nó có chứa "Được hay không tồn tại". Ngoài ra còn có một số điều vô nghĩa thú vị được tìm thấy:

Đó là, với bạn và tôi, Ham of Not mà chúa O có chúng ta, bây giờ ...


Bạn có thể cần phải điều chỉnh hằng số /5trong dòng thứ hai đến cuối cùng tùy thuộc vào độ lớn của văn bản của bạn. 5 hoạt động tốt cho các văn bản có kích thước Hamlet, 500 cho đầu vào chiều dài Kinh Thánh, v.v.
Đi lang thang 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)}

Bản demo

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

nhập mô tả hình ảnh ở đây


Bạn có chắc chắn điều này tạo ra một tệp PNG?
manatwork 20/03 '

Bây giờ nó làm !!!
rafaelcastrocouto

1
Về việc chơi golf, phiên bản rút gọn này dường như thực hiện điều đó với 360 ký tự: pastebin.com/C4dpYLP8
manatwork 21/03

3
... 296 ký tự: pastebin.com/5BUPavYH
Mathieu Rodic

1
Tôi cũng sẽ chơi golf này nhiều hơn nữa thành 405 byte. Hãy thử nó ở đây!
haykam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.