[Script] - "Essayer avec cette orthographe"
17 messages • Page 1 sur 2 • 1, 2
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
[Script] - "Essayer avec cette orthographe"
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: Tout sélectionner
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);
}
Dernière édition par raspoutine59 le Ven Juin 03, 2005 15:25, édité 1 fois.
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
Non c'est pour faire jolie...
-

Patrice A. - Modérateur

- Messages: 2413
- Inscription: Ven Fév 11, 2005 19:36
hmmm ça a l'air bien ça...
je testerai ça sur mon moteur
je testerai ça sur mon moteur
-

pistonocus - WRInaute impliqué

- Messages: 370
- Inscription: Ven Mar 25, 2005 23:19
Re: [Script] - "Essayer avec cette orthographe"
raspoutine59 a écrit: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
- Code: Tout sélectionner
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);
}
c'est vrai que cette fonction elle est pas mal, il ne faut pas tomber sur les suggestions à la Google, euh, il apprend tout seul au fur et à mesure ou il faut rajouter dans la base de données manuellement?
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
Bah dans mon cas j'enregistre un historique des recherches depuis plus de deux ans, donc toutes les recherches tapé depuis ce lapse de temps (Keywords + hits) sont dans ma table.
Donc le mieux c'est de faire pareille et il proposera une autre orthographe en fonction de ton historique. De cette façon tous les mots vraiment important du site y sont, ni plus ni moins. Ca t'évite de mettre tous le dico et d'avoir des mots "hors-sujet".
Bon apres tu peux en ajouter manuellement pour avoir une base de depart si tu n'a rien.
Donc le mieux c'est de faire pareille et il proposera une autre orthographe en fonction de ton historique. De cette façon tous les mots vraiment important du site y sont, ni plus ni moins. Ca t'évite de mettre tous le dico et d'avoir des mots "hors-sujet".
Bon apres tu peux en ajouter manuellement pour avoir une base de depart si tu n'a rien.
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
e-kiwi a écrit:c'est un clone de similar_text()
Ca n'a absoluement rien à voir. Il te suffit de lire la doc PHP...
similar_text calcule la similarité entre les deux chaînes first et second , selon la méthode d'Oliver [1993].
levenshtein calcule la distance Levenshtein entre deux chaînes de caractères. Elle retournera -1 si l'un des deux arguments contient plus de 255 caractères.
La distance Levenshtein est définie comme le nombre minimal de caractères qu'il faut remplacer, insérer ou modifier pour transformer la chaîne str1 en str2 . La complexité de l'algorithme est en O(m*n) , où n et m sont les tailles respectives de str1 et str2 : c'est plutôt bien, en comparaison de similar_text , qui est en O(max(n,m)**3) , mais cela reste très coûteux.
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
e-kiwi a écrit:http://www.unixtech.be/docs/php-fr/ref.pspell.html
Oué faut-il encore que tu puisse installer les libs...
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
C'est pour une utilisation sur les recherches hein et encore sur les recherches qui n'ont rien donné et c'est pas la page la plus utilisé sur un site web.
- raspoutine59
- WRInaute occasionnel

- Messages: 210
- Inscription: Jeu Mar 17, 2005 19:25
Bah j'doute pas de la performance de cette lib, mais bon faut pouvoir l'installer, faut savoir l'installer (tous ne sont pas des administrateur de serveur web) et puis faut avoir le temps de l'installer (quand il suffit de copier/coller dix lignes de code PHP pour une fonctionnalité minime, ça donne pas très envie)
Re: [Script] - "Essayer avec cette orthographe"
Salut
j'ai mis en place un truc similaire sur RDC
exemple
http://search.rueducommerce.fr/shared/recherche/index.cfm?requete=minotla
je te conseille juste 2,3 petits trucs :
- considere qu'il y a peu de chances que la premiere lettre soit fausse
- considere aussi que ca ne sert à rien de comparer des mots dont la longueur est franchement différente
voilou
j'ai mis en place un truc similaire sur RDC
exemple
http://search.rueducommerce.fr/shared/recherche/index.cfm?requete=minotla
je te conseille juste 2,3 petits trucs :
- considere qu'il y a peu de chances que la premiere lettre soit fausse
- considere aussi que ca ne sert à rien de comparer des mots dont la longueur est franchement différente
voilou
17 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Les albums web Picasa passent à 1 Go de stockage
- Photos satellite des incendies en Grèce dans Google Earth
- Ajouter un Gadget Google sur son site
- Google Desktop pour Mac OS X
- Picasa Web Albums en français
- Google Pack s'enrichit de 2 nouveaux logiciels gratuits
- Résultats des élections présidentielles du 1er tour 2007
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Résultats des élections législatives du 1er tour 2007
- Suivre le parcours de la flamme Olympique 2008 dans Google Earth
- "Essayez avec cette orthographe :".. Basé sur quoi
- "Essayez avec cette orthographe" plus généreux ?
- "Essayez avec cette orthographe" nuisible ?
- script type="text/javascript" src="/swfobject
- Recherche script de type rss "yahoo" ou aol news
- Un script comme WEBJS.NET "espace protégé" pour mu
- Faire des "pauses" dans un script php
- Script avec "image" pour une courbe de poids.
- Cherche script "site under" avec cookies
- Recherche script "Hébergement de blog wordpress"
Consultez la description détaillée des produits ou services de Google suivants : Google Web Toolkit
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


le forum