Wordle과 같은 단어 구름을 구현하는 알고리즘


201

문맥

내 질문

  • Wordle의 기능을 수행하는 알고리즘이 있습니까?
  • 그렇지 않은 경우 비슷한 종류의 출력을 생성하는 대안은 무엇입니까?

내가 묻는 이유

  • 그냥 궁금해서
  • 배우고 싶다

1
여기 에 이미지 처리를 기반으로 한 대체 구현이 있습니다 . 매우 빠르지는 않지만 실험에 매우 유연하고 좋습니다. (Mathematica에는 전체 구현이 있습니다.)
Szabolcs

2
나는 내 자신의 (꽤 간단한) 알고리즘을 생각해 내고 그것에 대해 블로그를 작성했습니다 . 파이썬으로 작성되었으며 사용자 정의하기 쉬워야합니다. 나는 그것을 반쯤 효율적으로 만들려고 노력했다. ! 여기에 이미지 설명을 입력
안드레아스 뮬러에게

4
나는 당신이이 질문을하는 방식을 정말로 좋아했습니다! +1
kolistivra

답변:


472

저는 Wordle의 제작자입니다. Wordle의 실제 작동 방식은 다음과 같습니다.

단어를 세고 지루한 단어를 버리고 카운트를 기준으로 내림차순으로 정렬합니다. 일부 N에 대해 상위 N 개의 단어를 유지하십시오. 각 단어에 개수에 비례하는 글꼴 크기를 지정하십시오. Java2D API를 사용하여 각 단어에 대한 Java2D 모양을 생성하십시오.

각 단어 "Want"는 "수직 중심의 임의의 x 위치에서"와 같이 어딘가에 있어야합니다. 빈도의 순서대로 각 단어에 대해 다음을 수행하십시오.

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

그게 다야. 하드 부분은 교차로 - 테스트 효율적으로, 내가 마지막 히트 캐싱, 계층 적 경계 상자를 사용하는 일이며, 쿼드 트리 공간 인덱스 (일이다 모두는 당신은 더 많은 인터넷 검색을 좀 부지런에 대해 배울 수 있습니다.)

편집 : Reto Aebersold가 지적 했듯이이 같은 영역을 다루는 책 장이 무료로 제공됩니다. 아름다운 시각화, 3 장 : Wordle


22
"성실한 인터넷 검색". 그 것처럼 :)
zengr

6
자세한 내용은 static.mrfeinberg.com/bv_ch03.pdf-Jonathan 에게 감사합니다.
Reto Aebersold 2015 년

정보 주셔서 감사합니다 Jonathan-나는 이와 같은 훌륭한 시각화를 만들 수있는 실질적으로 간단한 알고리즘에 매료되었습니다.
John Patrick

나는 여전히 "어딘가에 가고 싶다"는 부분에 의아해합니다. 단어의 초기 위치는 실제로 무작위입니까?
adib

30
SO.의 아름다움. 당신이 질문을하는 사람은 실제로 당신의 질문에 대답 할 것입니다!
Arnab Datta

33

다음은 d3를 사용하는 Jason Davies의 멋진 자바 스크립트입니다. 웹 폰트를 사용할 수도 있습니다.

데모 : http://www.jasondavies.com/wordcloud/

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


src = ". js"파일을 복사 한 후 그대로 또는 그대로 사용하기 위해 다시 업로드하는 것이 매우 쉽습니다. 공유해 주셔서 감사합니다.
Michael d

색상 표를 좀 더 심미적으로 바꾸는 방법이 있습니까? colourlovers의 API가 권장하는대로 colourlovers.com/api/palettes/random 에서 colourlovers.com/api/palettes/top 로 JSON 호출에서 js 파일을 수정하려고 시도 했지만 팔레트는 동일하게 유지되었습니다.
Michael d

다음은 데모를 기반으로 한 반응 형 예제이지만 단어와 색상을 완전히 제어 할 수 있습니다. 사용자 정의 색상 표의 경우 주석 처리 된 코드를 대신 사용하십시오. jsbin.com/kiwojayoye/1/edit?html,js,output
Martin Braun

33

Jonathan Feinberg가 설명 한대로 파이썬을 사용하여 태그 클라우드를 생성하는 알고리즘을 구현했습니다. 그것은 wordle.net의 아름다운 구름과는 거리가 멀지 만 어떻게 할 수 있는지에 대한 아이디어를 제공합니다.

여기 에서 프로젝트를 찾을 수 있습니다 .


공유해 주셔서 감사합니다! 분명히 당신의 구현을 살펴볼 것입니다.
namenlos

대단해. 감사!
tokudu

링크 (labs.atizo.com)가 다시 끊어졌습니다. 비교를 볼 수 있도록 샘플 이미지를 게시해야합니다.
smci

@RetoAebersold 어쨌든이 코드를 플라스크 또는 장고 프레임 워크와 통합 할 수 있습니까?
Mitul Shah

30

Jonathan이 제안한 알고리즘을 사용하는 Silverlight 구성 요소를 만들었습니다. 소스 코드와 예제 프로젝트는 모두 내 블로그에서 사용할 수 있습니다.

http://whydoidoit.com

컬러 단어 구름

My cloud에서는 다양한 가중치를 기반으로 단어의 색상과 크기를 지정할 수 있으며 좌표에서 단어 선택 및 선택한 단어 강조 표시를 지원합니다. 소스는 당신이 적합하다고 생각하는대로 사용할 수 있습니다.

단어 구름 예


2
블로그가 비어있는 것 같습니다. 링크가 죽었습니까?
또는 매퍼

여기입니다 archive.org 스냅 샷, web.archive.org/web/20110820202717/http://whydoidoit.com/... 나는 또한 GitHub의에서 프로젝트 발견 github.com/whydoidoit/WordCloud를
CJK

14

나는 단어 구름을 만들기위한 처리 라이브러리 인 WordCram 에서 일하고 있습니다. Wordle의 영향을 많이받으며 위와 동일한 PDF aeby로 알려줍니다. 충돌 감지를 처리하고 단어 레이아웃, 색상, 회전 등 원하는 방식에 집중할 수 있습니다.


서비스가 API를 제공합니까?
bart

죄송합니다, WordCram에는 API가 없습니다. 서비스가 아니라 도서관입니다.
Dan Bernier


8

텍스트와의 관련성과 같은 다른 데이터와 관련된 문자열의 색상, 초기 위치 및 크기를 지정할 수있는 단어와 같은 시각화를 찾고 있었지만 아무것도 찾지 못했습니다. 그러나 여기에서 찾은 정보 덕분에 (특히 Jonathan의 설명과 aeby의 링크), 마침내 ' Cloudio를 구현할 수 있습니다 '를 , 이는 상대적으로 가깝고 (적어도 그렇게 생각합니다 ...) 내가 찾고 있던 기능을 제공합니다.

SWT 및 JFace로 구현되었으며 JFace의 MVC 모델에 통합하려고 시도했습니다. 클라우드의 레이아웃을 수정하고 다른 Eclipse 플러그인 또는 RCP에 추가하도록 컨텐츠 및 레이블 제공자를 설정할 수 있습니다. 앱. 또한 문자열의 초기 위치가 계산되는 방식을 수정하여 클러스터 시각화 등에 사용하기 어렵지 않습니다. 여전히 문서화가 잘되어 있지 않고 몇 가지 방식으로 제한되어 있습니다 (몇 시간 전에 초기 업로드를 했으므로 여전히 약간 버그가있을 수 있습니다). 관심이 있으시면 여기 링크가 있습니다.

다음은 빠른 인상을 원할 경우 생성 된 일부 클라우드에 대한 링크입니다. https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

건배, 스테판


8

다음은 클라우드와 같은 Wordle 구현을 참조하십시오. 동일한 나선형 알고리즘과 QuadTree 데이터 구조를 사용합니다.

http://sourcecodecloud.codeplex.com

또는

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


sourcecodecloud는 다운로드 할 수 없습니다, 또한 두 번째 링크가 작동하지 않습니다
Sagar Nikam

첫 번째 링크의 소스 코드 / 다운로드를 확인했습니다. 효과가있었습니다. 두 번째 링크가 이동되었습니다. 이제 수정되었습니다.
George Mamaladze 2016 년

4

Lion and Lamb은 선택된 성경 책에서 가장 빈번한 단어를 사용하여 단어 구름을 만드는 오픈 소스 iOS 앱입니다.

Jonathan Feinberg가 설명한 알고리즘을 기반으로합니다. 적중 테스트는 쿼드 트리를 사용하지만 경계 상자는 글리프의 경계 사각형을 기반으로합니다. 글리프의 경계 상자 내에 단어를 배치 할 수 있도록 글리프를 여러 개의 작은 경계 사각형으로 나누고 싶습니다.

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

요한 계시록 책의 단어 구름


4

여기에 태그 클라우드 생성기가 있는데,이를 Disorganizer라고합니다 :)

테스트 목적으로 TagCloudService면도기 마크 업 컨트롤WinForm 소스 블로그, 프로필 등을 감싸는 작은 래퍼 할 수 있습니다. C # 4.0 & System.Drawing 네임 스페이스를 많이 사용합니다.

다른 클라우드 생성기를 사용하면 태그를 클릭하여 탐색 할 수 없으며 호버 애니메이션을 만들 수 없으므로 클릭 할 수 있음을 나타냅니다. HTML에 호버 애니메이션을 표시해야하기 때문에 (오버레이로 배치 된 절대 위치 <a>태그 로이 작업을 수행하고 있습니다 ) 각도 단어 표시를 개발하지 않았습니다. 수직 또는 수평입니다.

경고 : 위의 링크는 몇 개월 안에 무효가 될 수 있으므로 주변 프로젝트에서 별도의 프로젝트로 천천히 연결을 해제 할 계획입니다.

이 샘플 블로그 게시물 에서 실제 데모 볼 수 있지만 불완전하고 불완전한 사이트에 있습니다. 누구든지 기여하고 싶다면 저에게 연락하여 최대한 빨리 분리하겠습니다.


링크가 유효하지 않습니다. 블로그의 UI가 마음에 듭니다.
Doug S

감사합니다. 방금 수정
Zasz

2

다음은 파이썬 3 의 또 다른 종단 간 구현입니다. Jonathan Feinberg의 초기 개요 (QuadTrees, 나선 등)를 기반으로 .

Github 리포지토리 에서 코드 (자세한 ReadMe 파일과 함께 주석 처리됨)를 자유롭게 사용할 수 있으며이 코드로 작성된 샘플 문서입니다.

맥베스


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.