Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
862 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Moteur de recherche avancé

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Moteur de recherche avancé

n°1641779
redah75
Posté le 12-11-2007 à 18:44:47  profilanswer
 

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

mood
Publicité
Posté le 12-11-2007 à 18:44:47  profilanswer
 

n°1641878
SICKofitAL​L
Razoreater
Posté le 12-11-2007 à 23:23:05  profilanswer
 

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

---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°1642077
redah75
Posté le 13-11-2007 à 12:10:16  profilanswer
 

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

n°1642082
dzing35
Posté le 13-11-2007 à 12:19:52  profilanswer
 

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
n°1642088
omega2
Posté le 13-11-2007 à 12:32:20  profilanswer
 

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.

n°1642093
SICKofitAL​L
Razoreater
Posté le 13-11-2007 à 12:41:32  profilanswer
 

>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:


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°1642139
redah75
Posté le 13-11-2007 à 13:42:56  profilanswer
 

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";
}
?>

n°1642145
SICKofitAL​L
Razoreater
Posté le 13-11-2007 à 13:46:34  profilanswer
 

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


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°1642161
dzing35
Posté le 13-11-2007 à 13:58:43  profilanswer
 

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
n°1642186
redah75
Posté le 13-11-2007 à 14:21:08  profilanswer
 

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???

mood
Publicité
Posté le 13-11-2007 à 14:21:08  profilanswer
 

n°1642196
dzing35
Posté le 13-11-2007 à 14:27:30  profilanswer
 

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


---------------
Fred => http://www.meance.free.fr
n°1642563
nycius
Ich liebe dich !
Posté le 14-11-2007 à 09:31:54  profilanswer
 

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

n°1642694
bassene
Posté le 14-11-2007 à 13:47:37  profilanswer
 

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 !!!

n°1643468
redah75
Posté le 15-11-2007 à 15:51:32  profilanswer
 

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 ??


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Moteur de recherche avancé

 

Sujets relatifs
Recherche CMS "offline" (pas de php/mysql)recherche dans une base de mot clés
Recherche efface ligneGive me
caractères spéciaux - recherche php mysqlMediawiki et la recherche accentuée
Recherche Programeur / designerMoteur de recherche dans mon site ???
Plus de sujets relatifs à : Moteur de recherche avancé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR