comment faire une orthographe approchée ? [trouvé]

comment faire une orthographe approchée ? [trouvé] - PHP - Programmation

Marsh Posté le 17-08-2004 à 09:58:31    

Comment font les moteurs de recherches (ou les pages jaunes par exemple) pour proposer des mots clés approchés de ceux que l'on propose ? Quel type d'indexation utilisent-ils ?
 
Par exemple : sur les pages jaunes je demande "mortin" à paris et comme il n'existe pas de "mortin" il me sort les "martin".
 
merci de votre aide
 
edit : solution SELECT soundex('mortin'); dans mysql


Message édité par Lex le 17-08-2004 à 10:05:40
Reply

Marsh Posté le 17-08-2004 à 09:58:31   

Reply

Marsh Posté le 17-08-2004 à 10:56:54    

:jap: Merci

Reply

Marsh Posté le 17-08-2004 à 11:29:38    

la fonction soundex() existe aussi en PHP. il y a aussi d'autres fonctions permettan de comparer en pourcentage le rapprochement de deux mots ... put1 le PHP c'est génial :D

Reply

Marsh Posté le 17-08-2004 à 15:18:43    

A noter cette fonction qui est plus précise, car elle prend en compte la prononciation française :
 

Code :
  1. function soundex_fr($chaine){
  2. // algorithme original :  
  3. //http://www.chez.com/algor/soundex/soundex.htm  
  4.   if (!is_string($chaine) || strlen($chaine) == 0){ return "";}
  5.   // suppression des espaces initiaux  
  6.   $chaine = trim($chaine);
  7.   // mise en minuscule  
  8.   $chaine = strtolower($chaine);
  9.   // suppression des doublons  
  10.   $chaine = preg_replace("/(.)\\1/", "\\1", $chaine);
  11.   // garder la premiere lettre  
  12.   $p = $chaine[0];
  13.   // supprimer les lettres A, E, I, O, U, Y, H et W  
  14.   $chaine = ereg_replace("aeiouyhw", "", $chaine);
  15.   // remplacer les lettres restantes par leur chiffre  
  16.   //print $maire;  
  17.   $chaine = $p.strtr("1122233455677888999", "bpckqdtlmnrgjxzsfv", $chaine);
  18.   if (strlen($chaine) < 4){
  19.   str_pad($chaine, 4-strlen($chaine), " " );
  20.   } else {
  21.   $chaine = substr($chaine, 0, 4);
  22.   }
  23.   return $chaine;
  24. }


Message édité par Lex le 17-08-2004 à 15:19:05
Reply

Marsh Posté le 17-08-2004 à 20:15:44    

Et moi qui croyait avoir affaire à des "fonctions magiques" (limites mystiques) dans leurs fonctionnements, je me rend compte que c'est juste la voyelle qui fait le son...
[:obawi]

Reply

Marsh Posté le 17-08-2004 à 20:38:18    

Attention, la fonction que j'ai posté plus haut semble ne pas fonctionner ...

Reply

Marsh Posté le 17-08-2004 à 20:50:06    

Perso je trouve tes ereg bizarement foutu et ça m'étonnerait que ça marche, mais n'ayant jamais essayé cette méthode...
Chez moi :

$chaine = ereg_replace('a|e|i|o|u|y|h|w', '', $chaine);


et idem pour les consonnes...
 
edit: et sans avoir du tout essayé


Message édité par Master p le 17-08-2004 à 20:51:04
Reply

Marsh Posté le 17-08-2004 à 21:38:35    

nan c pas une regexp !! c'est strtr() qui remplace 1 par 1 le contenu des chaines de caractère

Reply

Marsh Posté le 17-08-2004 à 21:43:09    

[:autobot]

Reply

Marsh Posté le 17-08-2004 à 21:47:05    

Reply

Marsh Posté le 17-08-2004 à 21:47:05   

Reply

Marsh Posté le 17-08-2004 à 21:50:49    

Dsl c'est ta phrase qui était mal formulé :o
Ça donne quoi ta fonction? Ça marche ou pas?
 
edit: Formulation (forcément si moi aussi je m'y mets  :sleep: )


Message édité par Master p le 17-08-2004 à 22:03:42
Reply

Marsh Posté le 17-08-2004 à 22:04:25    

Master P a écrit :

Et moi qui croyait avoir affaire à des "fonctions magiques" (limites mystiques) dans leurs fonctionnements, je me rend compte que c'est juste la voyelle qui fait le son...
[:obawi]


 
en l'occurence c'est la consonne dans soundex [:huit]

Reply

Marsh Posté le 17-08-2004 à 22:05:20    

Master P a écrit :

Dsl c'est ta phrase qui était mal formulé :o
Ça donne quoi ta fonction? Ça marche ou pas?
 
edit: Formulation (forcément si moi aussi je m'y mets  :sleep: )


 
c pas la mienne (piquée sur nexen lol) et elle donne pratiquement tjs le même résultat donc bof.
 
il doit y avoir une petite subtilité à modifier pour obtenir un résultat pertinent

Reply

Marsh Posté le 17-08-2004 à 22:05:57    

t'as commencer par supprimer les voyelles :o

Reply

Marsh Posté le 17-08-2004 à 22:12:37    

Le seul truc qui me gêne, c'est le fait de tronquer le mot après les 4 premières lettres :
1/ On aurait dû faire ça dès le débuts, ça aurait éviter des calculs inutiles
2/ C'est pas forcément plus pertinent.

Reply

Marsh Posté le 17-08-2004 à 22:20:40    

Ben c l'algo qui veut ça
 
http://www.chez.com/algor/soundex/soundex.htm
edit : je repete que c pas moins qui l'ai pondu le truc lol


Message édité par Lex le 17-08-2004 à 22:20:55
Reply

Marsh Posté le 17-08-2004 à 22:25:00    

Lex a écrit :

Ben c l'algo qui veut ça
 
http://www.chez.com/algor/soundex/soundex.htm
edit : je repete que c pas moins qui l'ai pondu le truc lol

Je sais j'ai compris
 
Mais ton lien en dis pas plus sur le "pourquoi" du troncage

Reply

Marsh Posté le 17-08-2004 à 22:53:18    

Master P a écrit :

Je sais j'ai compris
 
Mais ton lien en dis pas plus sur le "pourquoi" du troncage


 
je suis d'accord avec toi que c assez débile ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed