Algoritmo para implementar uma nuvem da palavra como Wordle
-
19-08-2019 - |
Pergunta
Contexto
- Dê uma olhada Wordle: http://www.wordle.net/
- É bem melhor do que quaisquer outros geradores nuvem palavra que eu vi
- Nota: a fonte não está disponível - leia o FAQ: http://www.wordle.net/ FAQ # código
Minhas Questões
- Existe um algoritmo disponível que faz o que Wordle faz?
- Se não, quais são algumas alternativas que produz tipos semelhantes de saída?
Por que eu estou pedindo
- apenas curioso
- querem aprender
Solução
Eu sou o criador de Wordle. Veja como Wordle realmente funciona:
Contar as palavras, jogar fora palavras chato, e classificar pela contagem, descendente. Mantenha a parte superior N palavras para alguns N. Atribuir cada palavra um tamanho de fonte proporcional à sua contagem. Gerar uma forma Java2D para cada palavra, 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, fazer 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. O duro parte é em fazer o cruzamento de teste de forma eficiente, para o qual eu usar o cache de último hit, caixas delimitadoras hierárquicos, e um índice espacial quadtree (que são coisas que você pode aprender mais sobre com alguma googling diligente).
Edit: Como Reto Aebersold salientou, há agora um capítulo de livro, disponível gratuitamente, que cobre este mesmo território: Visualization bonito, Capítulo 3: Wordle
Outras dicas
Eu tenho implementado um algoritmo como descrito por Jonathan Feinberg usando python para criar uma nuvem de tags. É longe das belas nuvens de wordle.net mas ela lhe dá uma idéia de como isso poderia ser feito.
Você pode encontrar o projeto aqui .
Eu criei um componente do Silverlight que usa o algoritmo Jonathan sugere aqui. Os projetos de código-fonte e exemplo estão disponíveis no meu blog:
Meu nuvem permite cores e palavras de tamanho com base em diferentes ponderações e suporta seleção palavra (de uma coordenada) e destaque palavra selecionada. A fonte é seu para usar como quiser.
Aqui está um muito bom javascript um de Jason Davies que usa d3. Você ainda pode usar WebFonts com ele.
Demonstração: http://www.jasondavies.com/wordcloud/
Eu estou trabalhando em WordCram , uma biblioteca de processamento para fazer palavra nuvens. É muito fortemente influenciado por Wordle, e é informado pelo mesmo PDF Aeby link acima. Ele lida com a detecção de colisão para você, e permite que você se concentrar em como você deseja que suas palavras colocado para fora, colorido, girado, etc.
http://code.google.com/apis/visualization/documentation/ gallery.html
Confira a visualização da nuvem da palavra. Não como sofisticados como wordle.net mas real fácil de adicionar ao seu site.
Eu estava procurando por um wordle-like visualização que permitiria a cor atribuir, posição inicial e tamanho de uma String relacionadas com outros dados, tais como a relevância dentro de um texto - não encontrou nada, mas graças à informação eu encontrei aqui (especialmente a explicação de Jonathan e ligação de Aeby), eu poderia finalmente implementar ' Cloudio ', que vem relativamente perto wordle (pelo menos eu penso assim ...) e oferece os recursos que eu estava procurando.
Ele é implementado com SWT e JFace, e eu tentou integrá-la no MVC-modelo de JFace, de modo que você pode definir Content e etiqueta-fornecedores para modificar o layout de uma nuvem e adicioná-lo a outro eclipse plugins ou RCP Apps. Você também pode modificar a forma como a posição inicial de uma string é calculado, de modo que não é difícil de usá-lo para visualização cluster ou mais. Ele ainda é mal documentado e limitada em alguns aspectos (e eu fiz o carregamento inicial há poucas horas, por isso ainda pode ser um pouco de buggy), mas se você estiver interessado, aqui está o link:
E aqui está um link para algumas nuvens criadas, no caso de desejar uma impressão rápida: https: // github. com / sschwieb / Cloudio / wiki / example-Nuvens
Cheers, Stephan
Aqui ver minha implementação do Wordle como nuvem. Ele usa o mesmo algoritmo em espiral e a estrutura de dados Quadtree.
http://sourcecodecloud.codeplex.com
ou
http: // www.codeproject.com/Articles/224231/Word-Cloud-Tag-Cloud-Generator-Control-for-NET-Win
Leão e cordeiro é uma iOS app-fonte aberto que cria nuvens palavra usando as palavras mais frequentes a partir de um livro escolhido da Bíblia.
É baseado no algoritmo como descrito por Jonathan Feinberg. testes Hit faz utilizar uma árvore quad, mas as caixas delimitadoras são baseados em retângulo delimitador do glifo. Eu quero quebrar o baixo glifo em muitas rects delimitadoras menores para permitir a colocação palavra dentro da caixa delimitadora de um glifo.
Eu tenho um gerador de nuvem de tags aqui, que eu chamo Disorganizer :)
TagCloudService eo navalha marcação de controle e uma WinForm para fins de teste que você pode colocar no seu blog, perfil etc, com um pouco de invólucro em torno dele. Ele usa C # 4.0 e System.Drawing namespace pesadamente.
Eu criei isso porque com os outros geradores nuvem você não pode clicar em tags para navegar e não pode criar pairar animações, para mostrar que eles são clicáveis. Desde mostrando animação pairar em HTML é necessário para mim (eu estou fazendo isso com sobreposição-ed, com posição absoluta etiquetas <a>
) Eu não desenvolveram qualquer ângulo de visualização palavra - eles são vertical ou horizontal
Atenção:. Os links acima pode ir inválida em poucos meses, eu pretendo lentamente desatá-lo a partir do projeto circundante em um projeto separado
Você pode ver um trabalho de demonstração neste amostra blog , mas é incompleta, e em um site incompleta. Contacte-me se alguém quiser contribuir, vou continuar com separando-lo o mais cedo possível.
Aqui está ainda outra end-to-end implementação de wordle em Python 3 em grande parte baseado no esboço inicial por Jonathan Feinberg (Quadtrees, espirais, etc.).
O código (comentado, com o arquivo detalhado ReadMe) está disponível gratuitamente neste Github repositório e este é um wordle amostra criado com o código.