Niveau
..........
En rapport...

Keyword dans un texte

Pour générer une liste de mot clef a partir d'un texte, on va compter chaque occurrence de chaque mot et voir ceux qui sont inscrit le plus de fois.
Si on s'arrêtait la, on disposerais d'une liste peu fiable car certain mot indésirable (sans importance sur le contenu) viendrais polluer la liste (ex : à, de, le, nous, etc…).
La fonction ci-dessous va donc, trier, filtrer et retourné une liste de mot clefs établis selon un texte mais aussi selon vos critères.

fonction

php
function getKeywork($text,$removeHTMLTag=true,$maxkw=50,$stopwords=array()) {
	/*on épure la chaine*/
	$search		= array ('@[éèêë]@i','@[àâä]@i','@[îï]@i','@[ûùü]@i','@[ôö]@i','@[_ ]+@','@[ç]@i','@[^a-z0-9 ]@','@[ ]+@');
	$replace	= array ('e','a','i','u','o',' ','c',' ',' ');
	if ($removeHTMLTag) {
		array_unshift ($search, '@</?[^>]*>@i');
		array_unshift ($replace, '');
	}
	$text		= html_entity_decode($text,ENT_QUOTES);
	$text		= str_replace(array("\n","\r","\t"),array('','',''),$text);
	$text		= preg_replace($search, $replace, strtolower($text));
	/*on converti la chaine en array*/
	$Listtext	= explode(" ",rtrim($text));
	/*comme on se base sur les espace pour séparer les mot, on en rajoute un au debut et un a la fin (pour pas fausser le compteur)*/
	$text		= ' '.rtrim($text).' ';
	/*on compte le nombre d'occurence de chaque mot(en excluant les stopwords)*/
	$wordList 	= array();
	foreach ($Listtext as $value) {
		$key = rtrim($value);
		if (strlen($key)==0) continue;
		if ((!array_pregmatch($stopwords,$key))) $wordList[$key] = count(explode(' '.$value.' ', $text));
	}
	/*renvoie false si ya pas de mot (improbable ?)*/
	if (count($wordList) == 0) return false;
	/*tri les mot par frequence*/
	arsort($wordList);
	/*Si le nombre de mot clef est illimité on renvoie le tabelau sans plus de modification*/
	if ($maxkw==-1) return $wordList;
	/*limite le tabelau a la taille demandé et le renvoi*/
	$wordList=array_chunk($wordList, $maxkw, true);
	return $wordList[0];
}

Paramètres

  • $text (type string, obligatoire) : votre texte
  • $removeHTMLTag (type boolean, facultatif, true par défaut) : Dans le cas ou votre texte est une chaîne HTML, la fonction peut supprimer les balises
  • $maxkw (type int, facultatif, 50 par defaut) : Nombre maximum de mot clef renvoyé par la fonction. Si $maxkw vaut -1, le nombre est infini.
  • $stopwords (type array, facultatif, vide par défaut) : Tableau de condition que la chaîne ne doit pas remplir pour faire parti des mots clef. Voir évaluer si un chaîne remplie plusieurs conditions pour les détails sur l'utilisation de $stopwords.

Utilisation

php
$test="Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed consectetuer. Nunc justo. Mauris nulla felis, molestie sed, tincidunt blandit, dignissim eget, augue. Suspendisse potenti. Fusce tortor. Vestibulum sodales lorem sit amet metus. Cras euismod, tortor sit amet pretium sagittis, arcu nibh suscipit dui, quis nonummy purus arcu vitae velit. Quisque lorem. Suspendisse aliquet, urna quis hendrerit cursus, urna eros suscipit leo, quis interdum sem lacus id sapien. In ac felis at ligula pulvinar viverra. Nam arcu metus, volutpat nec, consequat nec, hendrerit et, dolor. Nunc mattis pellentesque odio. Sed tempor, ipsum ultrices luctus malesuada, dui sem rutrum magna, a vehicula est mi et mi. Sed sit amet elit et augue mattis consectetuer. Morbi dapibus varius dui. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Aenean turpis. Vivamus commodo vestibulum felis. Vivamus lorem nulla, auctor a, varius eu, congue lacinia, diam.";
 
$stop[]="#strlen('%s')<=3"; //n'accepte que les mots supérieur a 3 caractères
$r=getKeywork($test,true,-1,$stop); //aucune limite dans le nombre de mot clef
echo  "<pre>";
print_r($r); //affiche le résultat
echo "</pre>";
 
// d'autres utilisations :
$r=getKeywork($test);
$r=getKeywork($test,true,5);
//...

A vous de jouer

La fonction renvois une variable de type array, les mots clefs sont classé par ordre d'importance.
Il ne vous reste plus qu'a les utiliser.


iDo 27/04/2006 14:20