Thuật toán để thực hiện một đám mây từ như Wordle


201

Bối cảnh

Những câu hỏi của tôi

  • Có một thuật toán có sẵn mà những gì Wordle làm?
  • Nếu không, một số lựa chọn thay thế tạo ra các loại đầu ra tương tự là gì?

Tại sao tôi hỏi

  • chỉ tò mò
  • muốn học

1
Có một triển khai thay thế, dựa trên xử lý hình ảnh ở đây . Không nhanh lắm, nhưng rất linh hoạt và tốt cho thử nghiệm. (Có một triển khai đầy đủ được đưa ra trong Mathematica.)
Szabolcs

2
Tôi đã đưa ra thuật toán (khá đơn giản) của riêng mình và viết blog về nó . Nó được viết bằng Python và nên dễ dàng tùy chỉnh. Tôi đã cố gắng để làm cho nó một nửa hiệu quả. ! nhập mô tả hình ảnh ở đây
Andreas Mueller

4
Tôi thực sự thích cách bạn hỏi câu hỏi này! +1
kolistivra

Câu trả lời:


472

Tôi là người tạo ra Wordle. Đây là cách Wordle thực sự hoạt động:

Đếm các từ, vứt bỏ các từ nhàm chán và sắp xếp theo số đếm, giảm dần. Giữ các từ N hàng đầu cho một số N. Gán mỗi từ một cỡ chữ tỷ lệ với số lượng của nó. Tạo Hình dạng Java2D cho mỗi từ, sử dụng API Java2D.

Mỗi từ "muốn" ở đâu đó, chẳng hạn như "tại một số vị trí x ngẫu nhiên ở trung tâm dọc". Theo thứ tự tần số giảm dần, hãy làm điều này cho mỗi từ:

place the word where it wants to be
while it intersects any of the previously placed words
    move it one step along an ever-increasing spiral

Đó là nó. Phần khó là thực hiện kiểm tra giao lộ một cách hiệu quả, trong đó tôi sử dụng bộ nhớ đệm lần cuối, các hộp giới hạn phân cấp và chỉ số không gian bốn phần tư (tất cả đều là những điều bạn có thể tìm hiểu thêm về một số người siêng năng siêng năng).

Chỉnh sửa: Như Reto Aebersold đã chỉ ra, giờ đây đã có một chương sách, có sẵn miễn phí, bao trùm cùng lãnh thổ này: Trực quan đẹp, Chương 3: Wordle


22
"Googling siêng năng". Thích nó :)
zengr

6
Thêm thông tin ở đây: static.mrfeinberg.com/bv_ch03.pdf - Cảm ơn Jonathan.
Reto Aebersold

Cảm ơn thông tin Jonathan - Tôi bị mê hoặc bởi các thuật toán đơn giản thực sự có thể tạo ra những hình ảnh tuyệt vời như thế này.
John Patrick

Tôi vẫn còn hơi bối rối về phần "muốn ở đâu đó". Là vị trí ban đầu của các từ thực sự ngẫu nhiên?
adib

30
vẻ đẹp của SO..những người mà bạn đang đặt câu hỏi về công việc, thực sự có thể trả lời câu hỏi của bạn!
Arnab Datta

33

Đây là một javascript thực sự hay từ Jason Davies sử dụng d3. Bạn thậm chí có thể sử dụng webfont với nó.

Bản trình diễn: http://www.jasondavies.com/wordcloud/

Github: https://github.com/jasondavies/d3-cloud


Thật dễ dàng chỉ cần sao chép các tệp src = ". Js" và tải lại chúng để xây dựng hoặc chỉ sử dụng như hiện tại. Cảm ơn đã chia sẻ và làm việc tuyệt vời!
Michael d

Có cách nào để thay đổi bảng màu sang một cái gì đó thẩm mỹ hơn? Tôi đã thử sửa đổi tệp js từ lệnh gọi JSON từ: colourlovers.com/api/palettes/random thành colourlovers.com/api/palettes/top như API của colourlovers khuyến nghị nhưng bảng màu vẫn giữ nguyên.
Michael d

Dưới đây là một ví dụ làm việc đáp ứng dựa trên bản demo nhưng có toàn quyền kiểm soát từ và màu sắc. Thay vào đó, đối với bảng màu tùy chỉnh, vui lòng sử dụng mã nhận xét. jsbin.com/kiwojayoye/1/edit?html,js,output
Martin Braun

33

Tôi đã triển khai một thuật toán như Jonathan Feinberg mô tả bằng cách sử dụng python để tạo ra một đám mây thẻ. Nó cách xa những đám mây tuyệt đẹp của wordle.net nhưng nó cho bạn ý tưởng làm thế nào nó có thể được thực hiện.

Bạn có thể tìm thấy dự án ở đây .


Cám ơn vì đã chia sẻ! Tôi chắc chắn sẽ xem xét việc thực hiện của bạn.
namenlos

Điều này thật tuyệt. Cảm ơn!
tokudu

Liên kết (labs.atizo.com) bị hỏng một lần nữa. Bạn thực sự nên đăng một hoặc hai hình ảnh mẫu để chúng ta có thể xem so sánh.
smci

@RetoAebersold có cách nào để tích hợp mã này với khung jar hoặc django không?
Mitul Shah

30

Tôi đã tạo một thành phần Silverlight sử dụng thuật toán Jonathan gợi ý ở đây. Các mã nguồn và các dự án ví dụ đều có sẵn trên blog của tôi:

http://whydoidoit.com

Đám mây từ màu

Đám mây của tôi cho phép bạn tô màu và kích thước các từ dựa trên các trọng số khác nhau và nó hỗ trợ lựa chọn từ (từ tọa độ) và tô sáng từ đã chọn. Nguồn là của bạn để sử dụng khi bạn thấy phù hợp.

Ví dụ từ đám mây


2
Blog của bạn dường như trống rỗng. Liên kết đã chết?
HOẶC Mapper

Dưới đây là ảnh chụp archive.org, web.archive.org/web/20110820202717/http://whydoidoit.com/... Tôi cũng thấy các dự án trên github github.com/whydoidoit/WordCloud
CJK

14

Tôi đang làm việc trên WordCram , một thư viện Xử lý để tạo các đám mây từ. Nó bị ảnh hưởng khá nhiều bởi Wordle và được thông báo bằng cùng một tệp PDF được liên kết ở trên. Nó xử lý phát hiện va chạm cho bạn và cho phép bạn tập trung vào cách bạn muốn các từ của bạn được đặt ra, tô màu, xoay, v.v.


Dịch vụ của bạn có cung cấp API không?
bart

Xin lỗi, WordCram không có API. Đó là một thư viện, không phải là một dịch vụ.
Dan Bernier


8

Tôi đang tìm kiếm một trực quan giống như wordle cho phép gán màu, vị trí ban đầu và kích thước của Chuỗi liên quan đến dữ liệu khác, chẳng hạn như mức độ liên quan trong văn bản - không tìm thấy gì, nhưng nhờ thông tin tôi tìm thấy ở đây (Đặc biệt là lời giải thích của Jonathan và liên kết của aeby), cuối cùng tôi cũng có thể triển khai ' Cloudio ', tương đối gần với wordle (ít nhất là tôi nghĩ vậy ...) và cung cấp các tính năng mà tôi đang tìm kiếm.

Nó được triển khai với SWT và JFace và tôi đã cố gắng tích hợp nó vào mô hình MVC của JFace, để bạn có thể đặt các nhà cung cấp nội dung và nhãn để sửa đổi bố cục của đám mây và thêm nó vào các trình cắm thêm Eclipse hoặc RCP khác ứng dụng. Bạn cũng có thể sửa đổi cách tính vị trí ban đầu của chuỗi, như vậy không khó để sử dụng nó cho trực quan hóa cụm hoặc cách khác. Nó vẫn còn kém tài liệu và bị hạn chế theo một số cách (và tôi đã tải lên ban đầu vài giờ trước, vì vậy nó vẫn có thể là một lỗi nhỏ), nhưng nếu bạn quan tâm, đây là liên kết:

Và đây là một liên kết đến một số đám mây được tạo, trong trường hợp bạn muốn có ấn tượng nhanh: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Chúc mừng, Stephan


8

Ở đây thấy tôi thực hiện Wordle như đám mây. Nó sử dụng cùng một thuật toán xoắn ốc và cấu trúc dữ liệu QuadTree.

http://sourcecodecloud.codeplex.com

hoặc là

http://www.codeproject.com/Articles/224231/Word-Cloud-Tag-Cloud-Generator-Control-for-NET-Win


sourcecodecloud không thể tải xuống, liên kết thứ hai cũng không hoạt động
Sagar Nikam 15/03/13

Tôi đã xác minh Mã nguồn / Tải xuống của liên kết đầu tiên. Nó đã làm việc. Liên kết thứ hai đã được di chuyển. Bây giờ đã sửa.
George Mamaladze

4

Lion and Lamb là một ứng dụng iOS mã nguồn mở tạo ra các đám mây từ bằng cách sử dụng các từ thường xuyên nhất từ ​​một cuốn sách Kinh thánh đã chọn.

Nó dựa trên thuật toán như mô tả của Jonathan Feinberg. Kiểm tra lần truy cập không sử dụng cây tứ giác, nhưng các hộp giới hạn dựa trên hình chữ nhật giới hạn của glyph. Tôi muốn chia glyph thành nhiều phần giới hạn nhỏ hơn để cho phép sắp xếp từ trong hộp giới hạn của glyph.

GitHub: https://github.com/PetahChristian/LionAndLamb

Một đám mây từ của sách Khải Huyền


4

Tôi có một trình tạo Tag Cloud ở đây, mà tôi gọi là Discombizer :)

Nguồn TagCloudServicekiểm soát đánh dấu dao cạoWinForm cho các mục đích thử nghiệm mà bạn có thể đưa vào blog, hồ sơ của mình, v.v., với một trình bao bọc nhỏ xung quanh nó. Nó sử dụng không gian tên C # 4.0 & System.Drawing rất nhiều.

Tôi đã tạo nó bởi vì với các trình tạo đám mây khác, bạn không thể nhấp vào thẻ để điều hướng và không thể tạo hoạt hình di chuột, để cho thấy rằng chúng có thể nhấp được. Vì việc hiển thị hoạt hình di chuột trong HTML là cần thiết đối với tôi (Tôi đang thực hiện điều này với <a>các thẻ được định vị hoàn toàn, có vị trí tuyệt đối ) Tôi đã không phát triển hiển thị từ bất kỳ góc nào - chúng là dọc hoặc ngang.

Cảnh báo: Các liên kết trên có thể không hợp lệ trong một vài tháng, tôi dự định từ từ gỡ nó ra khỏi dự án xung quanh thành một dự án riêng biệt.

Bạn có thể thấy một bản demo hoạt động trên bài đăng blog mẫu này , nhưng nó không đầy đủ, và trong một trang web không đầy đủ. Liên lạc với tôi nếu có ai muốn đóng góp, tôi sẽ tiếp tục tách nó ra càng sớm càng tốt.


Liên kết đã không hợp lệ. Tôi thích giao diện người dùng trên blog của bạn.
Doug S

Cảm ơn, chỉ cần sửa chúng
Zasz

2

Đây là một triển khai wordle từ đầu đến cuối khác trong Python 3 phần lớn dựa trên phác thảo ban đầu của Jonathan Feinberg (QuadTrees, xoắn ốc, v.v.).

Mã (đã nhận xét, với tệp ReadMe chi tiết) có sẵn miễn phí tại kho Github này và đây là một wordle mẫu được tạo bằng mã.

Macbeth


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.