IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Algorithme pour résultat d'autocomplétion depuis 3 clés


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Novembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 34
    Points : 40
    Points
    40
    Par défaut Algorithme pour résultat d'autocomplétion depuis 3 clés
    Bonjour,
    j'ai déjà intégré le système d'autocomplétion de JQuery UI dans un dictionnaire. Je vais donner un exemple (pour tout le sujet, ce sera la même bestiole) pour que ce soit plus parlant : la limule. Dans cette partie de mon site d'aquariophilie, la recherche spécifique au dictionnaire se contente, pour l'autocomplétion, de rechercher les expressions contenant les lettres tapées dont l'un des mots de l'expression commence par la première lettre tapée (on suppose que la première lettre est obligatoirement valide). Ca, c'était facile.

    Il y a une autre partie du site dans laquelle je souhaite intégrer l'autocomplétion : il s'agit d'une base de connaissance des espèces aquatiques (poissons, plantes, algues, crevettes, escargots, coraux, etc). Mais l'algorithme pour déterminer le meilleur résultat à proposer (comme Google Suggest ou Instant) devient un peu moins courtois à défaut d'être sournois...

    En effet, depuis les débuts du site, chaque recherche par le champ de recherche spécifique à cette partie du site est enregistrée : j'ai donc un fichier de 800.000 recherches (le critère uniquement). Et bien, je n'ai pas été foutu de déterminer quoique ce soit avec ça tant c'est hétéroclite!

    En fait, il y a 3 paramètres à prendre en compte. J'en reviens à ma limule citée au début. Le mot "limule" est le nom commun (on dit précisément le nom vernaculaire) de la bestiole, mais son nom scientifique est Limulus polyphemus. Le taxon (le nom scientifique) est composé de 2 parties (je simplifie car ça peut être plus compliqué, mais je vais outrepasser certaines difficultés rares) : le nom de genre "Limulus" et le nom d'espèce "polyphemus".

    Je dispose bien sûr d'un accès au trois champs : nom de genre, nom d'espèce, nom vernaculaire. Je dispose également du champ 'nombre de lectures' et de la date de création de l'élément (ça pourrait permettre une pondération de popularité en fonction d'un nombre de lecture par jour par exemple...). Le tracking installé sur la recherche montre que 40% cherchent un nom commun (souvent le top 10 des espèces présentes en aquarium), 35% un nom de genre et 25% un nom d'espèce. On peut ajouter que le nom vernaculaire est finalement assez peu renseigné (il ne l'est que pour des espèces communes), soit sur seulement 25% des éléments.

    La question vient : comment, depuis l'entrée de lettres, sélectionner les "n" résultats les plus valables?

    Si le critère de recherche est "lim", je dois pouvoir proposer "Limulus" et "limule" (et enlever les doublons de résultats), mais actuellement, le système de recherche déjà en place me propose un tas de résultats (cf. zones "genres", "espèces", "noms communs"). Parmi tous ceux-ci, il faut que je réduise à une liste plus petite et bien organisée.

    Comment s'y prendre?
    Merci d'éviter le poisson rouge dans une boule, ces poissons peuvent grandir jusque 25 cm!

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Bonsoir,

    Citation Envoyé par anemone-clown Voir le message
    La question vient : comment, depuis l'entrée de lettres, sélectionner les "n" résultats les plus valables?

    Si le critère de recherche est "lim", je dois pouvoir proposer "Limulus" et "limule" (et enlever les doublons de résultats), mais actuellement, le système de recherche déjà en place me propose un tas de résultats (cf. zones "genres", "espèces", "noms communs"). Parmi tous ceux-ci, il faut que je réduise à une liste plus petite et bien organisée.

    Comment s'y prendre?
    Habituellement, pour ce genre de problème on utilise une fonction de "score" qui est utilisée pour classer les résultats dans un ordre particulier.

    Ici, ce qui nous intéresse c'est une fonction de probabilité qu'une entrée de ta base corresponde à la recherche de l'utilisateur : proba(recherche,entrée)

    On calcule ce score pour chaque entrée de la base et on affichera les entrées qui ont le meilleur score.

    Ta fonction de proba peut tenir compte des statistiques que tu as effectuées, du positionnement de la chaine de recherche dans le nom (début, milieu, fin), du pourcentage de complétion chaine de recherche/nom, ...
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    pseudocode : une fonction de "score"
    +1, c'est bien le coeur du problème .


    Je suggérerai en plus des conseils de pseudocode:
    • d'afficher une liste réduite et d'avoir un bouton "plus de résultats",
    • de pondérer les résultats en stockant les requêtes et les réponses associées avec comme poids de chaque réponse le nombre de fois ou les auteurs de la requête ont cliqué sur la réponse.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Novembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 34
    Points : 40
    Points
    40
    Par défaut
    Je vous remercie beaucoup pour vos réponses : ça me donne des pistes de réflexion quoique je ne sois pas certain de trouver une réponse par moi-même (suis nul en stats! ).
    Merci d'éviter le poisson rouge dans une boule, ces poissons peuvent grandir jusque 25 cm!

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Novembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 34
    Points : 40
    Points
    40
    Par défaut
    Je vais à nouveau remercier les idées apportées : j'ai intégré un système de scoring mais il n'est pas encore actif. Toutefois, le mode d'autocomplétion est actif pour la recherche dans toute la partie base de données aquariologique.

    Je mets un screenshot d'une recherche :



    Je stocke le nb de clics par rapport au nombre d'apparition de la fiche concernée avec une inclusion du nombre de lettre de la recherche et de la position dans le résultat de recherche. Pas simple...

    C'est résolu.
    Merci d'éviter le poisson rouge dans une boule, ces poissons peuvent grandir jusque 25 cm!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Que faut il pour répondre au téléphone depuis son pc
    Par Coussati dans le forum Périphériques
    Réponses: 16
    Dernier message: 23/05/2008, 23h17
  2. Quel algorithme pour insertion d'objets "triés" da
    Par phplive dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 09h27
  3. Réponses: 7
    Dernier message: 10/02/2005, 00h13
  4. Algorithme pour trier trois nombres
    Par legosam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 17/01/2005, 21h47
  5. Algorithme pour chiffres significatifs en Assembleur
    Par lutin2003 dans le forum Assembleur
    Réponses: 5
    Dernier message: 09/09/2004, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo