2009-10-13 7 views
1

J'ai récemment lancé mon humble side project et j'aimerais ajouter une section «soumissions connexes» lors de la visualisation d'une soumission. Considérant que chaque soumission a un titre et un ensemble de balises, ce qui est le plus efficace (résultat optimal), le plus efficace (rapide, facile à mémoriser) façon d'interroger la base de données pour les soumissions connexes?Algorithme efficace pour trouver des soumissions connexes

Je peux penser à une façon de le faire (que je vais poster comme une réponse) mais je suis très intéressé de voir ce que les autres ont à dire. Ou peut-être existe-t-il déjà un moyen standard d'y parvenir?

Répondre

3

Voici ma solution de deux cent:
Pour obtenir le meilleur rendement, nous devons mettre "poids" sur les résultats de la requête.

Pour commencer, chaque soumission dans la base de données est supposée avoir un poids de zéro. Ensuite, si une soumission dans le "pool" partage une étiquette avec la soumission actuelle, nous ajouterons +3 à la soumission trouvée. Par conséquent, si une autre soumission qui partage deux balises avec la soumission actuelle est trouvée, nous ajoutons +6 au poids.

Ensuite, nous divisons/atomisons le titre de la soumission actuelle et supprimons les mots d'arrêt.
J'ai vu une liste de mots d'arrêt de google, mais pour l'instant je vais définir mes mots d'arrêt d'être: [ « de », « a », « le », « dans »]

Exemple:
Titre « la meilleure présentation de tous les temps »
Résultat du tableau: [ "la", « Best », « Soumission », « de », « All », « Times »]
arrêt Supprimer les mots: [ « Best "," Soumission "," Tous "," Times "]

Ensuite, nous interrogeons la base de données pour les soumissions contenant l'un des titres mentionnés, et pour chaque résultat, nous ajoutons le poids: +2
Et enfin trier la liste en fonction du poids et prendre les premiers résultats N.

Qu'en pensez-vous? (soyez gentil!)

0

Si je comprends bien, vous avez besoin d'une technique pour trouver si deux poteaux sont "semblables" l'un à l'autre. Vous pouvez utiliser un modèle probabiliste pour que:

http://en.wikipedia.org/wiki/Mutual_information

L'idée serait de dire que si deux postes partagent un grand nombre de mots « hors du commun », ils parlent sans doute sur le même sujet. Pour détecter des mots inhabituels, en fonction de votre application, vous pouvez utiliser un tableau général des fréquences, ou mieux, le construire vous-même dans l'univers des mots de vos messages (mais vous en aurez besoin pour avoir quelque chose de pertinent) . Je ne me limiterais pas au titre et aux étiquettes, mais je les surpondérerais dans la recherche.

Ce genre d'idées est très commun dans le filtrage anti-spams. Je malheureusement le temps de faire un examen complet, mais une recherche rapide Google donne:

http://www.aclweb.org/anthology/P/P04/P04-3024.pdf karlmicha.googlepages.com/acl2004_poster.pdf

Questions connexes