Moteur de recherche avancé

Moteur de recherche avancé - PHP - Programmation

Marsh Posté le 12-11-2007 à 18:44:47    

Bonjour a tous et a toutes,
 
J'avais deja poste pour le meme sujet il y a 5 ou 6 mois, mais n'ayant pas eu de reponses satisfaisantes, je reposte encore esperant avoir de bonnes idees car là c'est du concret, je dois commencer a developper ce moteur de recherche dès que possible...!!
 
Je dois creer un moteur de recherche qui est capable faire une recherche semantique synonymes (synonyme, mot parents, expression synonyme)
Ex. hopital
- synonyme : clinique, dispensaire, polyclinique...
- parents : hospitaliser, hospitalier, hospitalisation...
- expression synonyme : établissement de santé, centre de soins...
 
j'aimerais aussi que si je tape hospital (en gros une faute d'ortho) que je soit capable de sortir les bons resultats. pour cela me recommandez vous la fonction SOUNDEX de PHP???
 
concernant la base, j'ai pense a ca:
 
id  |  mot      |     synonyme
1     hospital        2, 3  
2     clinique        1, 3    
3     dispensaire   1, 2
...
 
qu'en pensez vous? et quelle est la meilleure structure de la base que vous me conseillez???
 
Merci par avance de votre aide

Reply

Marsh Posté le 12-11-2007 à 18:44:47   

Reply

Marsh Posté le 12-11-2007 à 23:23:05    

j'avais fait un truc similaire ya longtemps, et je m'étais fait chier à saisir dans un table à part des synonynes, et dans une autre les fautes de frappes et d'ortho possibles, chacunes liées par un ID unique à un mot reconnu comme étant une "clé" (liste que j'avais aussi pré-définies)... bref c'était pas du grand art, car je faisais bcp (surement trop) de query sql pour "nettoyer" la requete de l'user avant de lancer la recherche à proprement parler.
Mais bon dans certain cas, et une fois les listes à jour, ca donnait un résultat somme toute sympathique, mais bon voilà ...

 

Pour soundex, metaphone et ttes ces fonctions PHP du même genre, je crains qu'elles ne fonctionnent bien que en anglais :/


Message édité par SICKofitALL le 12-11-2007 à 23:23:47

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-11-2007 à 12:10:16    

Bonjour et merci pour ta reponse :)
 
en gros je dois maintenir mon idee alors!!
mais j'ai entendu dire qu'il y avait une bibliotheque en PHP qu'il faut installer et qui contient les synonymes...
 
la fonction soundex existe aussi en francais, elle a ete developpee et est disponible en telechargement...
 
quel est le meilleur moyen pour gerer les fautes d'ortho??
 
Merci bien

Reply

Marsh Posté le 13-11-2007 à 12:19:52    

Pour la structure de ta table, je ferais comme toi, à savoir tout dans une même table avec un fonctionnement par id....
Pour les synonymes, voici ce que je ferais :
ex
====
mot exact => hopital
mot entrée => horital
1) Verifier que le mot entrée contient un minimum de lettres du mot recherché (içi 6/7)
2) Parcours lettre à lettre dans le sens lecture  
    si Lettre_mot_entree[i] = lettre_mot_recherché[i] alors
          point +=1;
    sinon stop
    //ici en sortie de boucle point = 2
   Si point = 7 Sauter étape 3
3) Parcours lettre à lettre dans le sens inverse lecture  
    si Lettre_mot_entree[i] = lettre_mot_recherché[i] alors
          point +=1;
    sinon stop
    //ici en sortie de boucle point = 4
 
4)   total point exemple = 6
      total point possible = 7 (= nb lettres)
 => 6/7
 
De 2 et 4, on peut dire que les mots sont similaires
 
Enfin, je ferai un truc dans ce genre  :pt1cable:  


---------------
Fred => http://www.meance.free.fr
Reply

Marsh Posté le 13-11-2007 à 12:32:20    

La recherche des mots approchant une orthographe donné est très délicat à mettre au point.
Il suffit de voir le dictionnaire de firefox (qui sort facilement n'importe quoi comme choix de correction) et celui de certains sites comme atilf (qui collabore à la création du dictionnaire de l'académie française) qui ne trouvent pas toujours les bonnes orthographe (alors qu'au niveau phonétique les mots sont parfois très proche de la saisie) pour bien se rendre compte que c'est le genre de truc très difficile à mettre au point.

Reply

Marsh Posté le 13-11-2007 à 12:41:32    

>dzing35
en effet, c relativement proche de la soluc' que j'avais pondu jadis ;)
 
>omega2
en restreignant à certain mots en rapport direct avec le site, ca peut simplifier la chose, mais c clair que ca reste une tache complexe
 
>redah75
soundex en FR ? je savais pas :jap:


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-11-2007 à 13:42:56    

Wow, concernant les fautes d'ortho g trouve une fonction PHP magique :D il s'agit de levenshtein()
essayez ce bout de code et vous serez epate!! modifiez $input a votre guise ;)
 
<?
// mot mal orthographié
$input = 'ornge';
 
// tableau de mots à vérifier
$words  = array('apple','pineapple','banana','orange',
                'radish','carrot','pea','bean','potato');
 
// aucune distance de trouvée pour le moment
$shortest = -1;
 
// boucle sur les des mots pour trouver le plus près
foreach ($words as $word) {
 
    // calcule la distance avec le mot mis en entrée,
    // et le mot courant
    $lev = levenshtein($input, $word);
 
    // cherche une correspondance exacte
    if ($lev == 0) {
 
        // le mot le plus près est celui-ci (correspondance exacte)
        $closest = $word;
        $shortest = 0;
 
        // on sort de la boucle ; nous avons trouvé une correspondance exacte
        break;
    }
 
    // Si la distance est plus petite que la prochaine distance trouvée
    // OU, si le prochain mot le plus près n'a pas encore été trouvé
    if ($lev <= $shortest || $shortest < 0) {
        // définission du mot le plus près ainsi que la distance
        $closest  = $word;
        $shortest = $lev;
    }
}
 
echo "Mot entré : $input\n<br>";
if ($shortest == 0) {
    echo "Correspondance exacte trouvée : $closest\n";
} else {
    echo "Vous voulez dire : $closest ?\n";
}
?>

Reply

Marsh Posté le 13-11-2007 à 13:46:34    

cool ca :jap:
et c rassurant de savoir que des mecs se sont bien fait chier avant nous :D


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-11-2007 à 13:58:43    

Bon, ben ça existait déjà alors...
Merci Redha75, ça nous a permis de connaître Vladimir Levenshtein...
 
 :jap:  :jap:


---------------
Fred => http://www.meance.free.fr
Reply

Marsh Posté le 13-11-2007 à 14:21:08    

je t'en prie dzing35, j'espere juste que ca ne te degoute pas de savoir que tu as passe du temps et tu t casse la tete a trouver un moyen de gerer les orthos alors qu'une fonction PHP existe deja... :)
 
du coup je pense que soundex n'a plus grand interet, n'est ca pas???

Reply

Marsh Posté le 13-11-2007 à 14:21:08   

Reply

Marsh Posté le 13-11-2007 à 14:27:30    

T'inquiètes, je n'ai pas passé trop de temps....
En plus, je suis en interco  ;)


---------------
Fred => http://www.meance.free.fr
Reply

Marsh Posté le 14-11-2007 à 09:31:54    

Levenshtein va très bien fonctionner pour des mots simples mais sur des mots composés ca devient plus galère déja.

Reply

Marsh Posté le 14-11-2007 à 13:47:37    

nycius>>
eh bien commençon déjà par le minimun syndical qui marche.c'est déjà un grand pas.
 
redah75>>
pas mal la découverte vraiment !!!

Reply

Marsh Posté le 15-11-2007 à 15:51:32    

Il faut par contre avoir deja une base complete (dictionnaire) pour pouvoir utiliser la fonction Levenshtein, ou je me trompe??
 
car si on tape le mot voitre et que 'voiture' n'exsite pas ds ma base de donnees, alors il va me proposer un autre mot qui n'a peut etre rien avoir avec!!!
 
y a t il un moyen de recuperer une base de dico ??

Reply

Sujets relatifs:

Leave a Replay

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