63 votes

Algorithme pour trouver des articles avec un texte similaire

J'ai beaucoup d'articles dans une base de données (avec titre,texte), je suis à la recherche d'un algorithme pour trouver le X la plupart des articles similaires, quelque chose comme un Débordement de Pile "des Questions Liées" quand vous posez une question.

J'ai essayé de googler pour cela, mais seulement trouvé des pages sur d'autres "texte similaire", quelque chose comme la comparaison de chaque article avec tous les autres, et de stocker une similitude quelque part. DONC cela en "temps réel" sur le texte que j'ai tapé juste.

Comment?

34voto

Jay Kominek Points 3254

Distance d'édition n'est pas un candidat probable, car il serait orthographe/mot d'ordre à charge, et beaucoup plus gourmand en ressources que vous amène à croire, compte tenu de la taille et du nombre de documents que vous serais vraiment intéressé par la recherche.

Quelque chose comme Lucene est le chemin à parcourir. Vous index de tous vos documents, et puis quand vous voulez trouver des documents similaires pour un document donné, vous tournez votre document donné dans une requête, et une recherche dans l'index. En interne Lucene sera à l'aide de tf-idf et un index inversé pour rendre l'ensemble du processus prend un temps proportionnel au nombre de documents qui pourraient éventuellement correspondre, et non pas le nombre total de documents dans la collection.

14voto

Will Points 30630

Cela dépend de votre définition de semblable.

La distance de vérification de l'algorithme est l'algorithme standard (langue latine) dictionnaire des suggestions, et peut travailler sur l'ensemble des textes. Les deux textes sont identiques, si elles ont fondamentalement les mêmes mots (eh lettres) dans le même ordre. Les deux critiques de livres seraient assez similaires:

1) "C'est un grand livre"

2) "ce ne sont pas de grands livres"

(Le nombre de lettres à supprimer, insérer, supprimer ou modifier à son tour (2) dans (1) est appelée la distance d'édition'.)

Pour mettre en œuvre ce que vous voulez de visiter chaque révision de la programmation. C'est peut-être pas aussi coûteux que ça sonne, et si il est trop coûteux, vous pourriez faire la comparisions en tâche de fond et de stocker les n-plus semblable à un champ de base de données elle-même.

Une autre approche consiste à comprendre quelque chose de la structure de (latin) langues. Si vous bande de manches (non-capitialised ou cité) les mots, et attribuer des poids aux mots (ou préfixes) qui sont communes ou unique, vous pouvez faire un Bayesianesque comparaison. Les deux à la suite des critiques de livres pourraient être simiplied et trouvé pour être semblable:

3) "La révolution française a été bla bla de la Guerre et de la Paix bla bla de la France." -> France/français(2) Révolution(1) Guerre(1) la Paix(1) (à noter qu'un dictionnaire a été utilisé pour combiner la France et les français)

4) "Ce livre est bla bla, une révolution dans la cuisine française." -> La France(1) Révolution(1)

Pour mettre en œuvre ce que vous voulez afin d'identifier les "mots-clés" dans une revue quand il a été créé ou mis à jour, et de trouver des similaires examens utiliser ces mots-clés dans la clause where d'une requête (idéalement, 'full text' la recherche de si la base de données prend en charge), avec peut-être un post-traitement des résultats-ensemble de la notation des candidats trouvés.

Les livres ont aussi des catégories sont des thrillers fixé en France similaires aux études historiques de la France, et ainsi de suite? Méta-données au-delà de titre et le texte pourrait être utile pour garder les résultats les plus pertinents.

10voto

alex77 Points 298

Le tutoriel à ce lien sonne comme il pourrait être ce dont vous avez besoin. Il est facile à suivre et fonctionne très bien.

Son algorithme de récompenses à la fois sous-chaînes communes et une commune de la commande de ces sous-chaînes et doit donc choisir des titres similaires tout à fait bien.

3voto

Guido García Points 13252

Je suggère pour indexer vos articles à l'aide d'Apache Lucene, une haute performance, texte complet moteur de recherche de la bibliothèque entièrement écrit en Java. C'est une technologie appropriée pour presque n'importe quelle application qui nécessite la recherche de texte intégral, en particulier croix-plate-forme. Une fois indexé, vous pouvez facilement trouver des articles connexes.

3voto

mempko Points 143

Une commune algorithme utilisé est la Carte Auto-Organisatrice. C'est un type de réseau de neurones qui seront automatiquement classer vos articles. Ensuite, vous pouvez simplement trouver l'emplacement actuel de l'article est à la carte et tous les articles près de lui sont liés. La partie importante de l'algorithme est de savoir comment vous le feriez vecteur de quantification de votre entrée. Il y a plusieurs façons de le faire avec du texte. Vous pouvez hachage votre document/titre, vous pouvez compter le nombre de mots et de l'utiliser comme un vecteur à n dimensions, etc. Espère que ça aide, même si j'ai ouvert une boîte de Pandore pour vous d'un voyage sans fin dans l'IA.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X