2012-02-21 6 views
2

Comment puis-je implémenter une fonctionnalité "articles connexes" pour les articles dans un blog? Je voudrais retourner une liste de messages similaires basés sur l'analyse des titres de poste."Rubriques connexes" dans Ruby

Mes propres idées pour ce faire semblent très inefficaces et je me demande s'il existe des outils qui supportent déjà cette fonctionnalité. Je n'ai trouvé aucune aide via google, ruby ​​toolbox, et j'ai regardé api de taches solaires. Comment y parviendrez-vous dans votre application de blog/site de contenu?

Mise à jour

Pour les personnes intéressées par cette fonctionnalité, j'ai décidé d'aller avec des taches solaires qui me permet d'utiliser dans mon show l'action:

@find_related = Post.search do 
    fulltext params[:title] 
end 

Ce retourne un tableau de messages connexes:

@related = @find_related.results 

Merci pour tous les commentaires et ce railscast était un grande aide

Répondre

2

Bien sûr, il y a quelques bons outils efficaces pour ça! Techniquement, ce que vous voulez, c'est une recherche en texte intégral sur une base de données indexée de titres de poste/autres données. Nous avons des outils qui exécutent la base de données externe qui gère toute la recherche et l'indexation. Ces backends sont universels et non en ruby, vous n'utilisez que la logique client dans votre application. C'est très efficace, car vous ne pourrez probablement pas implémenter d'autres algorithmes que ceux existants. Je recommande ce qui suit:

Ces bibliothèques fournissent une logique client pour l'échange de données avec mentionnées ci-dessus moteurs de recherche (tous proviennent de la fondation Apache)

+0

Merci, je pense avoir une meilleure idée de comment s'y prendre ce. – Dru

1

Je ne suis pas sûr si vos conditions le permettent, mais les billets de blog ont généralement des étiquettes.

Vous pouvez utiliser les tags dans vos articles de blog comme un moyen de filtrer d'autres publications liées, car les publications avec des tags similaires doivent être liées d'une manière ou d'une autre. Vous pouvez ensuite trier par nombre de tags correspondants et la dernière date publiée.

1

Il y a plusieurs façons de faire avec différents avantages et inconvénients. La méthode la plus simple consiste à étiqueter vos messages avec des mots clés, puis à les utiliser pour extraire d'autres articles associés à des étiquettes, puis à trier ces résultats en fonction du nombre de tags identiques. Tant que les balises que vous placez sur le contenu le représentent bien alors cela produit de bons résultats sans beaucoup de faux positifs. Et autant que je sache c'est combien de plateformes de blogs implémente la fonctionnalité.

La méthode la plus complexe impliquerait l'utilisation de la PNL pour analyser les titres de chaque publication et calculer l'aptitude à une autre publication. Cela impliquerait d'écrire plus de code et pourrait produire des faux positifs. Cependant, vous n'aurez pas besoin d'étiqueter les messages à la main et vous pouvez modifier les méthodes utilisées pour trouver des messages si vous souhaitez peser certains mots ou phrases. Jetez un oeil à Treat, the Text Retrieval, Extraction and Annotation Toolkit il semble être un bon point de départ pour Ruby NLP.

1

Si vous allez par les mots dans le titre, cette solution simpliste brute pourrait vous donner un tremplin pour quelque chose prêt pour la production:

#assume titles is an array of arrays of the words of titles and title is the one we are trying to mach with 
HOW_MANY_RELATED_WORDS=3 
titleWords=title.split(' ').sort 
related=[] 
trues=0 
titles.each do |t| 
    t.each do |word| 
    true+=1 if titleWords.include?(word) 
    end 
    related<<t.join(' ') if(trues>=HOW_MANY_RELATED_WORDS) 
end 
Questions connexes