Créer un nuage de mots-clé

Un nuage de mots-clés (tag cloud en anglais) est une représentation visuelle des mots-clés (tags) les plus utilisés sur un site web ou dans un article. Généralement, les mots-clé sont différenciés de façon plus ou moins importante afin de faciliter le repérage des plus populaires.

Un calcul simple

L'implémentation est très simple. Il suffit de compter les mots-clé les moins utilisés et ceux qui le sont le plus. L'écart entre ces deux valeurs permettra ensuite de calculer le pourcentage de popularité pour chacun d'entre eux.

La fonction suivante se contente donc de calculer ce pourcentage et appelle un callback pour chacun des mots-clé. L'utilisation d'un callback permet de créer la sortie que l'on désire et ainsi générer bien des choses passionnantes.

<?php

function WdCreateCloud($tags$callback)
{
    if (empty($tags))
    {
        return;
    }
    
    $min = min(array_values($tags));
    $max = max(array_values($tags));
    $mid = ($max == $min) ? 1 : $max - $min;
    
    $rc = '';

    foreach ($tags as $tag => $value)
    {
        $rc .= call_user_func($callback$tag$value($value - $min) / $mid);
    }   
    
    return $rc;
}

Mise en œuvre

Voici un exemple d'application :

<?php

define('CLOUD_LEVELS'8);

function _create_cloud($tag$value$popularity)
{
    return

    "\t<li" .
    ' class="tag' . (1 + ceil($popularity * (CLOUD_LEVELS - 1))) . '"' .
    ' title="Utilisé ' . $value . ' fois"' .
    '>' .
    _to_html($tag) .
    "</li>\n";
}

$tags = array
(
    'PHP' => 50'MySQL' => 10'XHTML' => 5'CSS' => 40'Javascript' => 45
);

echo '<ul class="tag-cloud">' . "\n" . WdCreateCloud($tags'_create_cloud') . '</ul>'

Ce qui nous donnera :

<ul class="tags-cloud">
    <li title="Utilisé 50 fois" class="tag8">PHP</li>
    <li title="Utilisé 10 fois" class="tag1">MySQL</li>
    <li title="Utilisé 5 fois" class="tag1">XHTML</li>
    <li title="Utilisé 40 fois" class="tag7">CSS</li>
    <li title="Utilisé 45 fois" class="tag8">Javascript</li>
</ul>

Laisser un commentaire

3 commentaires

lolo
lolo

sympa le blog mais le menu de gauche avec la date qui bouge tout le temps c'est juste horrrriiiibble !!!

Olivier
Olivier

Ha oui ? Je la trouve super ! ;)

lolo again
lolo again

:) Disons que quand tu essaies de te concentrer sur le code, le « machin qui bouge tout le temps à gauche » est un réel et fort vecteur de déconcentration. Et je ne dis pas machin pour dénigrer, mais puisque on (essaie de ) se concentre sur le code, le menu apparait comme un objet vague.

Bon le blog est quand même toujours très bien !