web-dev-qa-db-pt.com

Algoritmo para implementar uma nuvem de palavras como o Wordle

Contexto

Minhas perguntas

  • Existe um algoritmo disponível que faz o que o Wordle faz?
  • Se não, quais são algumas alternativas que produzem tipos semelhantes de saída?

Por que estou perguntando

  • apenas curioso
  • quero aprender
196
namenlos

Eu sou o criador do Wordle. Veja como o Wordle realmente funciona:

Conte as palavras, jogue fora palavras chatas e classifique pela contagem, descendo. Mantenha as N palavras mais importantes para alguns N. Atribua a cada palavra um tamanho de fonte proporcional à sua contagem. Gere uma Forma Java2D para cada Word, usando a API Java2D.

Cada palavra "quer" estar em algum lugar, como "em alguma posição x aleatória no centro vertical". Em ordem decrescente de freqüência, faça isso para cada palavra:

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

É isso aí. A parte hard está em fazer o teste de interseção eficientemente, para o qual eu uso cache de última ocorrência, caixas delimitadoras hierárquicas e um índice espacial quadtree (todos os quais são coisas sobre as quais você pode aprender mais com algum googling diligente).

Edit: Como Reto Aebersold apontou, há agora um capítulo de livro, disponível gratuitamente, que cobre este mesmo território: Bela Visualização, Capítulo 3: Wordle

458
Jonathan Feinberg

Eu implementei um algoritmo como descrito por Jonathan Feinberg usando python para criar uma nuvem de tags. Está longe das belas nuvens do wordle.net, mas dá uma ideia de como isso pode ser feito.

Você pode encontrar o projeto aqui .

32
Reto Aebersold

Aqui está um muito bom javascript um de Jason Davies, que usa d3. Você pode até usar webfonts com ele.

Demonstração: http://www.jasondavies.com/wordcloud/

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

31
johnpolacek

Eu criei um componente do Silverlight que usa o algoritmo que Jonathan sugere aqui. O código fonte e exemplos de projetos estão disponíveis no meu blog:

http://whydoidoit.com

Color Word cloud

Minha nuvem permite colorir e dimensionar palavras com base em pesos diferentes e oferece suporte à seleção de palavras (de uma coordenada) e ao realce selecionado do Word. A fonte é sua para usar como achar melhor.

Example Word Cloud

31
Mike Talbot

Eu estou trabalhando em WordCram , uma biblioteca de processamento para fazer nuvens do Word. É muito fortemente influenciado pelo Wordle, e é informado pelo mesmo PDF por meio do link acima. Ele lida com a detecção de colisão para você e permite que você se concentre em como deseja que suas palavras sejam exibidas, coloridas, giradas etc.

14
Dan Bernier

http://code.google.com/apis/visualization/documentation/gallery.html

Confira a visualização da nuvem do Word. Não é tão chique quanto o wordle.net, mas muito fácil de adicionar ao seu site.

10
Wavel

Eu estava procurando por uma visualização parecida com um wordle que permitisse atribuir cor, posição inicial e tamanho de uma String relacionada a outros dados, como a relevância em um texto - não encontrei nada, mas graças às informações que encontrei aqui (Especialmente a explicação de Jonathan e o link de aeby), eu poderia finalmente implementar ' Cloudio ', que vem relativamente perto do wordle (pelo menos eu acho que sim ...) e oferece os recursos que eu estava procurando.

Ele é implementado com SWT e JFace e tentei integrá-lo ao MVC-model do JFace, de modo que você possa definir provedores de conteúdo e rótulo para modificar o layout de uma nuvem e adicioná-lo a outros plug-ins do Eclipse ou RCP. apps. Você também pode modificar a forma como a posição inicial de uma string é calculada, de tal forma que não é difícil usá-la para visualização de cluster ou outra coisa. Ele ainda é mal documentado e limitado de algumas maneiras (e eu fiz o upload inicial há algumas horas, então ainda pode ser um pouco bugs), mas se você estiver interessado, aqui está o link:

E aqui está um link para algumas nuvens criadas, caso você queira uma impressão rápida: https://github.com/sschwieb/Cloudio/wiki/Example-Clouds

Felicidades, Stephan

8
sschwieb

Aqui veja minha implementação do Wordle como nuvem. Ele usa o mesmo algoritmo espiral e a estrutura de dados do QuadTree.

http://sourcecodecloud.codeplex.com

ou

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

8
George Mamaladze

Eu tenho um gerador de Tag Cloud aqui, que eu chamo de Disorganizer :)

Fontes TagCloudService e o controle de marcação razor e um WinForm para fins de teste que você pode colocar em seu blog, perfil etc, com um pequeno wrapper isto. Ele usa fortemente o namespace C # 4.0 e System.Drawing.

Eu o criei porque, com os outros geradores de nuvens, você não pode clicar em tags para navegar e não pode criar animações instantâneas, para mostrar que elas são clicáveis. Já que mostrar animação em hover em HTML é necessário para mim (estou fazendo isso com tags <a> sobrepostas e absolutamente posicionadas), eu não desenvolvi nenhuma exibição de palavra em ângulo - elas são verticais ou horizontais.

Aviso: Os links acima podem ficar inválidos em alguns meses, planejo desatá-lo lentamente do projeto ao redor em um projeto separado.

Você pode ver uma demonstração de trabalho neste exemplo de postagem de blog , mas ela está incompleta e em um site incompleto. Contacte-me se alguém quiser contribuir, vou continuar separando-o o mais cedo possível.

4
Zasz

O Lion and Lamb é um aplicativo para iOS de código aberto que cria nuvens do Word usando as palavras mais frequentes de um livro da Bíblia escolhido.

É baseado no algoritmo descrito por Jonathan Feinberg. O teste de hits utiliza uma árvore quádrupla, mas as caixas delimitadoras são baseadas no retângulo delimitador do glifo. Eu quero dividir o glifo em muitos rectos menores para ativar o posicionamento do Word dentro da caixa delimitadora de um glifo.

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

A Word cloud of the Bible book of Revelation

4
user4151918

Aqui está outra implementação ponta-a-ponta do wordle em Python 3 largamente baseado no esboço inicial de Jonathan Feinberg (QuadTrees, espirais, etc.).

O código (comentado, com o arquivo LeiaMe detalhado) está disponível gratuitamente neste repositório Github e este é um exemplo criado com o código.

Macbeth

1
Hayk