2008-09-23 13 views
3

Je l'ai vu quelques sites qui liste les recherches associées lorsque vous effectuez une recherche, à savoir qu'ils suggèrent d'autres requêtes de recherche que vous pouvez être intéressé.façons de le faire « Recherches associées » fonctionnalité

Je me demande le meilleur façon de modéliser ceci dans un site de taille moyenne (pas assez de trafic pour s'appuyer sur les statistiques des visiteurs pour inférer les relations). Ma première pensée est de stocker les 10 premiers résultats pour chaque requête unique, puis quand une nouvelle recherche est effectuée pour trouver toutes les recherches historiques qui correspondent à une partie des 10 premiers résultats, mais ne correspondent pas idéalement à tous (correspondant à tous suggérer une recherche équivalente et donc pas aussi utile que suggestion).

J'imagine que certaines personnes ont déjà utilisé cette fonctionnalité auparavant et pourraient être en mesure de fournir des idées de différentes façons de le faire. Je ne cherche pas forcément une idée gagnante puisque la solution variera sans doute sensiblement en fonction de la taille et de la nature du site.

Répondre

2

avez-vous considéré une matrice de mots-clés sur 1 axe par rapport à des documents sur un autre axe. Une fois que vous avez trouvé l'ensemble des véteurs représentant les mots-clés, trouvez les ensembles de mots-clés trouvés dans votre ensemble de résultats initial et trouvez un moyen de classer les autres mots-clés par le nombre de documents qu'ils référencent ou combien de fois .

+0

Ceci est très similaire aux deux premières étapes de LSI (http://en.wikipedia.org/wiki/Latent_semantic_indexing), il semble que cela fonctionnerait probablement plutôt bien. (voir commentaire suivant, espace insuffisant) – rcreswick

+0

Il serait utile d'examiner la façon dont l'application de recherche initiale effectue la récupération, car cela peut être trop similaire à l'approche standard de l'extraction de documents dans un espace vectoriel (http://en.wikipedia.org/wiki/Vector_space_model). Si elle reproduit la même logique, les termes n'auront pas autant de valeur. – rcreswick

2

J'ai essayé un certain nombre d'approches différentes à ce sujet, avec divers degrés de succès. En fin de compte, je pense que la meilleure approche dépend fortement du domaine/des sujets recherchés, et de la façon dont les utilisateurs forment des requêtes.

Votre réflexion sur l'enregistrement des recherches précédentes me semble raisonnable. Je serais curieux de voir comment cela fonctionne dans la pratique (je veux dire que de la manière la plus sincère - il y a beaucoup de nuances qui peuvent faire échouer ces techniques dans le «monde réel», en particulier lorsque les données sont rares).

Voici quelques techniques que je l'ai utilisé dans le passé, et vu dans la littérature:

  1. approches basées Thésaurus: Index dans un thésaurus pour chaque terme que l'utilisateur a utilisé, puis utiliser une heuristique filtrer les synonymes pour montrer à l'utilisateur des termes de recherche possibles. Stem et rechercher: Stem les termes de recherche (par exemple: avec le Porter Stemming Algorithm et ensuite utiliser les termes bornés au lieu des requêtes initialement fournies, et donner à l'utilisateur la possibilité de rechercher exactement les termes qu'ils ont spécifiés (ou faites le contraire, cherchez d'abord les termes exacts et utilisez stemming pour trouver les termes qui ont la même racine.Cette deuxième approche nécessite évidemment un pré-traitement d'un dictionnaire connu, ou vous pouvez collecter des termes selon votre terme d'indexation. Chaînage: Analyse les résultats trouvés par la requête de l'utilisateur et extrait les termes clés des N premiers résultats (KEA est une bibliothèque/algorithme que vous pouvez consulter pour les techniques d'extraction de mots clés.)
+0

gosh, j'aurais aimé dire que ... – MikeJ