Moteur de recherche et comparaison.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche et comparaison.

par ant » 05 sept. 2006, 11:29

Y a mieux avec l'algo de levenshtein mais présuppose des temps de calculs bcp plus importants.

Parcequ'avec metaphone c'est quand meme pas trés fiable. (vu qu'il prend en compte que la prononciation anglaise donc bcp de phonèmes francais passent à la trappe...)

http://www.php.net/manual/fr/function.levenshtein.php

par blubsy » 02 sept. 2006, 18:12

Ok merci bc je vais testé tous ça.

@+

par Hubert Roksor » 02 sept. 2006, 17:14

Je pense que tu obtiendras le meilleur rapport entre le développement requis et le résultat obtenu en utilisant la fonction metaphone() de PHP. Par exemple, voici un exemple 'une fonction qui crée un hash à partir d'un mot. Ce hash (un entier non-signé qui ne dépasse pas 2^31, destiné à être stocké dans un champs SQL INT) correspond à la phonetique des 6 premières syllabes.
/**
* Generate the metaphone hash of a word
*
* @param	string	$word		The word
* @return	integer				The hash
*/
function metaphone_hash($word)
{
	static $val_ary = array(
		'0'	=>	array(5153632,   234256,  10648,  484,   22,  1),
		'A'	=>	array(10307264,  468512,  21296,  968,   44,  2),
		'B'	=>	array(15460896,  702768,  31944,  1452,  66,  3),
		'E'	=>	array(20614528,  937024,  42592,  1936,  88,  4),
		'F'	=>	array(25768160,  1171280, 53240,  2420,  110, 5),
		'H'	=>	array(30921792,  1405536, 63888,  2904,  132, 6),
		'I'	=>	array(36075424,  1639792, 74536,  3388,  154, 7),
		'J'	=>	array(41229056,  1874048, 85184,  3872,  176, 8),
		'K'	=>	array(46382688,  2108304, 95832,  4356,  198, 9),
		'L'	=>	array(51536320,  2342560, 106480, 4840,  220, 10),
		'M'	=>	array(56689952,  2576816, 117128, 5324,  242, 11),
		'N'	=>	array(61843584,  2811072, 127776, 5808,  264, 12),
		'O'	=>	array(66997216,  3045328, 138424, 6292,  286, 13),
		'P'	=>	array(72150848,  3279584, 149072, 6776,  308, 14),
		'R'	=>	array(77304480,  3513840, 159720, 7260,  330, 15),
		'S'	=>	array(82458112,  3748096, 170368, 7744,  352, 16),
		'T'	=>	array(87611744,  3982352, 181016, 8228,  374, 17),
		'U'	=>	array(92765376,  4216608, 191664, 8712,  396, 18),
		'W'	=>	array(97919008,  4450864, 202312, 9196,  418, 19),
		'X'	=>	array(103072640, 4685120, 212960, 9680,  440, 20),
		'Y'	=>	array(108226272, 4919376, 223608, 10164, 462, 21)
	);

	$val = 0;
	foreach (str_split(metaphone($word, 6), 1) as $i => $c)
	{
		$val += $val_ary[$c][$i];
	}

	return $val;
}
Pour chaque ville tu stockes le hash correspondant dans un champs indexé, puis si tu cherches les noms s'approchant de ce qu'a entré l'utilisateur ta requête ressemble à
$sql = 'SELECT * FROM villes WHERE ville_hash = ' . metaphone_hash($ville);

Moteur de recherche et comparaison.

par blubsy » 02 sept. 2006, 15:23

Bonjour, je suis entrain de créer un moteur de recherche utilisant un formulaire input texte pour taper le nom d'une ville.
Mais voila si l'utilisateur fait une faute ou modifi un peu l'orthographe de la ville j'aimerais pouvoir lui proposer des solutions ce raprochant de sa demande.

A part faire un algorythme très complexe testant les lettres une par une je ne vois pas trop comment faire.

Merci pour votre aide et vos conseils.