O novo modo de catalogar textos é baseado em tags (palavras, categorias), que por sua vez elas são exibidas em "nuvens", onde as palavras com maior freqüência aparecem com fonte maior, e assim a fonte vai diminuindo, de acordo com a freqüência de artigos com tal tag, exemplo (nuvem de tags do BlogBlogs):
Nessa nuvem de tags (ou cloud tags, em inglês) existem mais textos "taggado" com curiosidades, depois com bloppers e assim vai.
Vamos criar uma nuvem de tags bem básica, que retorna as palavras de modo aleatório (não organizada por nome ou freqüência). Primeiramente obtenha os códigos e depois explicação passo a passo:
- class.nuvemtags.php
- nuvemExemplo.php
Veja o exemplo em execução.
Dissecando o código:
- Devemos criar uma função para adicionar palavras à biblioteca. addPalavra serve para isso, e aceita uma string ou array de palavras. O nosso "banco de dados" de palavra fica no membro $listaPalavras.
Cada palavra adicionada recebe um ponto ($this->listaPalavras[$palavras]++;), que é somado a cada aparição dela. Os "pontos" nada mais são que a quantidade de vezes que a palavra aparece. - O modo como cada palavra será exibida de um tamanho é baseado no percentual. De acordo com o percentual ele recebe um número de classificação. Esse número, pode ser usado como classe CSS.
if($pecentualUso >= 99)
$classe = 10;
else {
$classe = floor(($percentualUso / 10));
}Nesse caso o número é obtido da seguinte maneira: caso a palavra apareça 99% ou mais, ela recebe classificação 10. Caso receba entre 1 e 98%, a classificação é o valor da dezena do percentual. Como assim?
Digamos que o percentual seja 32%. O retorno será 3. Caso seja 7%, o retorno é 0 (não tem dezena).E o que você faz com esse número? Crie classes CSS contendo esses números, conforme coloquei em nuvemExemplo.php:
.tag10 contém o maior tamanho de fonte, tag9 um pouco menor e assim de modo decrescente, até chegar em tag0. function misturaPalavras()Coloca as palavras de modo aleatório no array. Como dito no começo do artigo, essa é uma nuvem de exibição aleatória.
- E finalmente, a função de retorno da nuvem: mostraNuvem().
Como cada palavra contém a soma de vezes que aparece, obtemos a quantidade total das vezes que as palavras aparecem:
$quantidadePresencas = array_sum($this->listaPalavras);. Lembrando que array_sum soma todos os elementos de um array. Depois as palavras são misturadas:$this->misturaPalavras();.E entramos no loop de criação da nuvem:
foreach($this->listaPalavras as $palavra => $presenca)
{
$aparecimentoPercentual =
((100 * $presenca) / $quantidadePresencas);
$classeCss = $this->obtemCss($aparecimentoPercentual);$nuvemTags[] = array(
‘palavra’ => $palavra,
‘classe’ => $classeCss,
‘percentual’=> floor($aparecimentoPercentual)
);
}.
Primeiro é calculado o percentual que uma palavra aparece. Pura regra de três:
[Quantidade de Vezes Total que as Palavras Aparecem (obtido acima com array_sum - $quantidadePresencas) = 100%]
X
[Quantidade de Vezes que a palavra apareceu ($presenca) = Percentual dessa palavra ($aparecimentoPercentual)].
Assim, $aparecimentoPercentual é passado para obtemCss, que obtem a classificação da palavra.Cada palavra é inserida na nuvem com a classe css (na verdade apenas o número de classificação) e o percentual (caso você queira usar para algum debug ou outro cálculo).
- A impressão da nuvem, como no exemplo, é iterando no array:
$NuvemTags = $Nuvem->mostraNuvem();
foreach($NuvemTags as $Tag)
{
echo '<span class="tag' . $Tag['classe'] . '">' . $Tag['palavra'] . '</span> ';
}
Veja o exemplo em execução.
Como pode ver, nuvem de tags não tem nenhum segredo, é baseada em percentual. Em artigo futuro, criaremos uma nuvem de tag com ordenação baseada em nome ou peso, bem como adaptada de banco de dados. Se bem que por essa classe você já pode obter as palavras do banco de dados, basta obter suas categorias e passar para o objeto.








22/10/2007 às 21:38:56
muito estranho, vou tentar baixar outro navegador pra ve se é esse o problema, o pessoal da comunidade PHP Brasil no orkut disse que conseguiu também mandar foto, mas eu não consigo, e a foto que eu quero mandar tem menos de 500kb…
muito estranho, hehe
22/10/2007 às 21:41:33
Por via das dúvidas, acabei de enviar utilizando o IE e funcionou também, mesmo que eu coloque o arquivo em campos aleatórios, 1, 2 ou 3 arquivos. heheh Acho muito estranho não funcionar para você então.
Para quem está vendo, o assunto é sobre:
PHP: Formulários e upload de múltiplos arquivos e fotos - http://linhadecodigo.com.br/Artigo.aspx?id=970
22/10/2007 às 21:49:40
Alfred, consegui mandar pelo FIREFOX,
qual a versão do IE que você testou, aqui eu não consegui com o 6.0…
muito estranho..
22/10/2007 às 21:59:58
Descobri o problema. O IE 6.0 trata MimeType diferente.
Mude a linha:
if(preg_match(’/^image\/(gif|jpeg|jpg|png)$/’, $Tipo))
para:
if(preg_match(’/^image\/(.*)?(gif|jpeg|jpg|png)$/’, $Tipo))
Veja que coloquei: (.*)? na frente de gif, etc.
Porque o IE adiciona “x-png”, “pjpeg”, etc.
Abraços.
22/10/2007 às 22:02:49
aaa alfred, muito obrigado hehe
acho que eu iria demorar muito tempo pra descobrir, obrigadão mesmo!!
abraço..
23/10/2007 às 16:25:34
Cara, eu tenho uma duvida, mas naum tem nada a ver com o titulo e nem com o conteudo desse post.
Eu quero saber, é como trabalho utilizando Orientação a Objeto e PHP. Eu trabalho usando o Code Igniter, framework PHP, e ele é orientado a objeto, mas nunca implementei algo simples e sem uso de framework. O que eu quero saber, é como se faz pra usar as classes, e métodos no meu browser, após eu achar q está td ok.
25/10/2007 às 18:25:44
Cairo, poderia explicar melhor qual sua dúvida? Não ficou claro o que você realmente precisa: “é como se faz pra usar as classes, e métodos no meu browser, após eu achar q está td ok“.
Abraços.
08/03/2008 às 16:03:43
mtu bommmm
07/08/2008 às 22:43:00
Em breve o site www.midiaw3.com estará disponibilizando tutoriais sobre Photoshop CS3
25/09/2008 às 23:16:25
[…] Link: http://www.auriumsoft.com.br/desenvolvedorphp/2007/nuvem-de-tags-com-php/ […]
28/01/2009 às 00:23:03
Opa, parabéns pelo artigo, esta me ajudando muito. tenho uma dúvida que voce disse: “são exibidas em “nuvens”, onde as palavras com maior freqüência aparecem com fonte maior” esta frequencia em que elas aparecem seria: quando o visitante abre um artigo e as tags relacionadas a ele ganhariam pontuação? Se Sim colocaria uma sessao ou cookie para que este visitante pontue estas tags somente uma vez (nesta visita) se ele der reload na pagina? Obrigado!
01/03/2009 às 17:35:43
A frequência, é na verdade, a frequência com que uma palavra é cadastrada.
Digamos que você tenha um site de noticias, e você use palavras para indicar cada noticia, entao em 10 noticias você tem:
#1: politica
#2: economia
#3: economia
#4: economia
#5: economia
#6: mundo
#7: cultura
#8: politica
#9: economia
#10: brasil
A palavra em maior frequência é economia -> politica -> etc.. Ou seja, Economia tera fonte maior na nuvem, politica um pouco menor e assim vai.