R
raspoutine59
Guest
Bonjour,
Lors de la création de ma page de recherche utilisant l'API Google, j'ai ajouté cette fonctionnalité qui propose à mes visiteurs d'essayer une nouvelle recherche avec une orthographe, si la précédente n'a donné aucun résultat (Généralement du aux fautes).
Comment ça marche ? La recherche s'appuie sur l'algorithme de Levenshtein. Elle recherche et compare deux chaînes et renvoie les occurences trouvé dans un tableau.
$keyword = Le mots clé qui à rien donné
$table = Le nom de la table MySQL ou ce trouve les mots à comparer et a proposer (Donc mon cas la table en question correspond à un historique des recherches, mais ça pourrait carrement être un dictionnaire...)
$fields = Array('champs1') doit correspondre aux champs dans lesquelles faire la recherche
$Key = correspond à un champ ID
$treeshold = doit correspondre à la taille divisé par 2 de $keywords si $keywords >=6
Lors de la création de ma page de recherche utilisant l'API Google, j'ai ajouté cette fonctionnalité qui propose à mes visiteurs d'essayer une nouvelle recherche avec une orthographe, si la précédente n'a donné aucun résultat (Généralement du aux fautes).
Comment ça marche ? La recherche s'appuie sur l'algorithme de Levenshtein. Elle recherche et compare deux chaînes et renvoie les occurences trouvé dans un tableau.
$keyword = Le mots clé qui à rien donné
$table = Le nom de la table MySQL ou ce trouve les mots à comparer et a proposer (Donc mon cas la table en question correspond à un historique des recherches, mais ça pourrait carrement être un dictionnaire...)
$fields = Array('champs1') doit correspondre aux champs dans lesquelles faire la recherche
$Key = correspond à un champ ID
$treeshold = doit correspondre à la taille divisé par 2 de $keywords si $keywords >=6
Code:
function search_keyword($keyword,$table,$fields,$key,$threshold){
if (!$threshold)
if (strlen($keyword)<6) $threshold=round(strlen($keyword)/2);
else $threshold=3;
$keyword=strtolower($keyword);
$res=mysql_query("SELECT * FROM ".$table);
while ($item=mysql_fetch_object($res))
foreach ($fields as $field)
{
$words=explode(" ",$item->$field);
foreach ($words as $word)
if (levenshtein($keyword, strtolower($word)) < $threshold)
{
$result[]=array($item->$key,$field,$item->$field);
break;
}
}
if (!is_array($result)) return (false);
else return ($result);
}