Content recommendation modules

You are viewing a wiki page. You are welcome to join the group and then edit it. Be bold!

I think it'd be useful to have an overview of the various content recommendation modules in this group, and eventually a comparison review in the Handbook.

Warning: several of the modules listed below are under-maintained or abandoned. I've marked the more actively maintained ones (as of 01/2013). If it's not marked maintained, it's probably not.

Featured Content (Maintained)

http://drupal.org/project/featured_content
Very easy, one form, interface to create featured and related content blocks of various kinds. Can create them based on manually chosen nodes or by using simple filters (e.g. all the nodes that have content type "page" and taxonomy term "SEO"). Documentation is built into the form page, so the user can just start building the blocks without reading external documentation ahead of time. Currently, the Featured Content module has very high reviews on drupalmodules.com and is in the top 5 modules in terms of ratings.

Similar by terms (Maintained)

http://drupal.org/project/similarterms
I've used this and like it a lot. It only provides a block, no views integration yet, but in general it's provided very, very good matches without a major performance hit. Drupal 6 version has some bugs as of December '08.

Relevant content (Moderately maintained)

http://drupal.org/project/relevant_content
Very, erm, similar to similar by terms - but it uses a different algorithm, has some different options for block creation and display, and the Drupal 6 version appears to be better supported than similarbyterms.

Similar nodes (abandoned)

Very similar to "similar by terms" but similarnodes requires views - see issue here for potential merging: http://drupal.org/node/255183
http://drupal.org/project/similarnodes
Also, doesn't currently work - http://drupal.org/node/293503
Also, no sign of a D6 version.

Node Relativity (maintained)

http://drupal.org/project/relativity
For connecting nodes in parent-child relationships (in D5 and D6).
The Node relativity access control module defines user roles (for D5 only, for now). An experimental patch adds access control for D6, but needs more work.
The Node relativity 3.0 module is a complete rewrite for D6 with much more functionality (but stalled?).

Node hierarchy (Maintained)

http://drupal.org/project/nodehierarchy
Node hierarchy is another module that allows nodes to be children of other nodes creating a tree-like hierarchy of content (in D5 and D6). Only users with editing rights can add children to a node.

Related Content (Moderately maintained)

http://drupal.org/project/relatedcontent
Documentation in the handbook. Relies on Views. Provides a tab on the node view.
Requires users to pick the related nodes, but can use views to suggest them.
Provides an API which could be used to make this process more automated.

Related Links (maintained)

http://drupal.org/project/relatedlinks D5, port to 6 underway?
According to the project:
* Parsed links: links that are retrieved from the body of a node.
* Manual links: links that are added manually.
* Discovered links: links that are discovered by the module using various criteria, including the category terms of a node and suggestions provided by the search module (when enabled).

Node2Node (abandoned)

http://drupal.org/project/node2node
This is yet another module that allows you to create relationships between nodes (inD6). It requires editing rights for this.

Similarity (abandoned)

By the same author as CRE. Intends to provide a framework for similarity rules.

This module allows the administrator to create a wide ranging set of similarity calculations. It can out of the box, calculate similar nodes of a specific type using the search index, taxonomy terms and node title. These similarities are calculated on cron run.

All these similarities are then exposed to Views. Using the provided argument, you can create a listing of similar items for a node. For instance, you can create a View page at node/%/similar. That page will use the Similarity argument (Similarity NID).

http://drupal.org/project/similarity

Content recommendation engine (abandoned)

http://drupal.org/project/cre

Similar entries (abandoned)

http://drupal.org/node/25974
Drupal 5.x & Drupal 6.x versions. Uses title and body fields, MySQL only. Not terms/taxonomy. Scans title and body fields and automatically generates a list of 'similar entries' based on an algorithm that apparently is used elsewhere. Seems to generate pretty good, but not always perfect matches. Works 'out of the box' - no configuration required. Outputs to a block. Good way to generate 'related pages' type list for nodes.

User related content (Drupal 5, i.e. abandoned)

node -> user relationships
http://drupal.org/project/user_related_content

Pivots (abandoned)

Matches conversation topics around keywords etc. (being trialled on drupal.org)
Future development planned to provide a generic Recommender API module for D6
http://drupal.org/project/pivots

Sphere (abandoned)

Integration with the sphere.com web service - does both internal and external related content links
http://drupal.org/project/sphere

Memetracker (abandoned)

GSOC project.
http://drupal.org/project/memetracker

Related Block (abandoned)

http://drupal.org/project/related_block D5, looks pretty neglected
"This does a search for nodes that are closely related to the title and content of the current node. "

Recommended Posts (abandoned)

http://drupal.org/project/recommended_nodes
... No useful description in the module, nobody seems sure what it does :-/

Associated nodes (abandoned)

Taxonomy and CCK based weight/scoring of relationships.
http://drupal.org/project/associated_nodes

More like this (abandoned)

http://drupal.org/project/morelikethis
Hot off the RSS Feed of new modules.

Node Recommendation (minimally maintained)

http://drupal.org/project/noderecommendation
Drupal 5.x & Drupal 6.x versions. Works off terms if using taxonomy, but also allows manual selection of nodes for individual pages with or without taxonomy. Outputs 'Related Pages' in a block. Good option for someone with not too much technical knowhow.

In Development

Related content

http://drupal.org/project/related_content
Editor or privileged user defined relationships - [author edit: not abandoned, demonstration code, development to begin soon: Its real purpose is to pull in recommendations from other modules listed here and make it very easy for people to select what they think are the related content, so I'm very interested in a common API...]

Related terms

Does a tag cloud of terms on taxonomy/term pages - depending on their frequency of association together on nodes. Nice idea, no release yet.
http://drupal.org/project/related_terms

Recommender API

http://drupal.org/project/recommender
Incorporate the classical user-user and item-item recommender algorithms. Aiming to be a generic algorithm engine for all other recommender modules. This is the D6 port to http://drupal.org/project/pivots.

Abandoned Modules

Related nodes

Abandoned in favour of Similar by terms
http://drupal.org/node/39822

Keywords (to help make this page easier to find): related pages, related nodes, related posts, similar pages, similar nodes, similar posts

Comments

As the author of both CRE

Scott Reynolds's picture

As the author of both CRE and Similarity objects, the plan is to reroll CRE to use similarity objects. As far as working code, i think you might be surprised how well it works. The idea is to slowly expand it and start to gobble up these other ones by providing multiple ways to draw relationships, using different algorithms. The major stopping point before a recommended release is building default views for it, and because the tables are created on the fly, it makes things a bit more difficult to just write default views.

As far as developing with it, it uses class based system with the hope that it makes it easier to write specialized similarity options.

Also important to note, a couple of these modules fail to respect node access: http://drupal.org/node/300470 or does so in a VERY inefficient manner. Similarity will respect node_access as Views2 respects it.

That issue boils down to how you stored related content, and does that storage allow for the db_rewrite_sql system to catch on.

Also plz note CRE is distinctly different. CRE makes personalized recommendations (the recommended content for user A is DIFFERENT from user B), whereas most of these modules would sugguest all the same. I would say remove CRE from this list... as it doesn't belong here, it is a different beast all together

I agree with the point made above

christefano's picture

I agree with the point made above that CRE is completely different and doesn't belong in the list.

As it is, though, this is actually a very useful list. Once again I find myself wondering if this group should be renamed "Similar and Duplicated Projects" so that lists such as this one can be a positive resource and free of the negative spin I perceive coming from this group.


Exaltation of Larks
Founder, CEO
http://www.larks.la  
Droplabs
Founder, Lead Burrito Analyst
http://droplabs.net  
Greater Los Angeles Drupal
Organizer, Drupal Adventure Guide
http://drupal.la  

post pre-dates this group

catch's picture

I made this list quite a while ago in the content recommendation group, before starting this one - but then cross-posted later since these comparison posts are a useful thing to centralise in one place.

I'd hope the name of the group is taken firmly tongue in cheek, and 'Similar and Duplicated projects' is less fun - having your module included in a list isn't a negative thing necessarily at all. But we should perhaps highlight the (IMO very positive) mission statement more, or change the name if it's getting taken more seriously than it's intended.

edit: Also, in regards to CRE - a module which generates recommended content definitely belongs in a list comparing content recommendation modules - I don't see how it shouldn't. From the project page you only really get the idea that it's generating personalised recommendations if you read off to the wikipedia page about the slope one algorithm. Clarifying the real differences between superficially similar modules is as much the point of this group as identifying similar modules in the first place. There's a lot of confusion out there when trying to find modules to perform certain tasks - both for very new and very experienced Drupal users, and a lot of the research people do gets wasted.

The first post is a wiki, would be great if you'd edit the above descriptions/clarification in.

And isn't personalized

kyle_mathews's picture

And isn't personalized recommendation still content recommendation? CRE recommends content for me ergo it's a content recommendation module. You'll notice that memetracker is on this list as well -- which while significantly different than any other module on the list, it still does content recommendation (it recommends you read the hot memes of the day).

On your other point Scott -- that all these duplicate content recommendation modules be consolidated under a uniform umbrella module like "Similarity Objects" -- I agree completely. I think there should be a content recommendation API which then the many types of content recommendation algorithms would talk through. The natural front end for all of this is Views (as content recommendation modules provide just that, another view of content on the site -- and on a slightly related note, Views (the module) is also a content recommendation module if you think about it -- it provides a focused slice of content from the site). A content recommendation API would provide an easy way for module writers to experiment with new recommendation algorithms without having to worry about providing Views support and other like functionality.

Kyle Mathews

Kyle Mathews

I think there should be a

Scott Reynolds's picture

I think there should be a content recommendation API which then the many types of content recommendation algorithms would talk through. The natural front end for all of this is Views (as content recommendation modules provide just that, another view of content on the site -- and on a slightly related note, Views (the module) is also a content recommendation module if you think about it -- it provides a focused slice of content from the site). A content recommendation API would provide an easy way for module writers to experiment with new recommendation algorithms without having to worry about providing Views support and other like functionality.

That would be the goal of similarity module. It provides the calculation routines and exposes the scores to views.

I want to add in a hook_algorithms and a hook_definitions, that allows other modules to expose "similarity" object classes and separately algorithms. But this is all vapor-ware at this point. I want to get this bad boy working with CRE, speed up the calculation with better limits. Really just the basics need to start working well first.

A unified similarity engine sounds great

OpenChimp's picture

A unified similarity engine sounds great. Many use cases may require that each node type comparison uses different criteria of comparison. Do you want items that are similar, by freetag terms, by color, by shape, by materials, by geographical location (proximity), by industry, by ... Each type of relationship may want to use a different set of the relationship criteria to calculate how "similar" the two items are.

For example, if someone is reading an article, and you want to suggest similar nodes, then for other articles you might use just the free tags, pulling up the items with the most matches, but if you are suggesting related events, you'd also want to compare the location (this isn't necessarily true since you'll probably want to use the use location, not the location associated with the article, but you get the idea ... right?).

Having a filter in a view called Similarity By: and then being able to select all the relationship criteria that you want to use (the module would then provide the sum of all relationship algorithms) would be very powerful for creating views for many different use cases.

I can't really wrap my head around it all right now (the use cases are very diverse), but just wanted to get these thoughts out there.

A lot, but seems none of

sin@drupal.org's picture

A lot, but seems none of what my client is asking (

I'm new to all this recommendation modules, can you guys recommend me a module to recommend nodes what users read most of times after/before current node?

I also would like some clues is this functionality fits somehow, would be easy to implement for me and worth to contribute as a patch or dependant module to one of the mentioned modules.

You want log analysis

OpenChimp's picture

These modules match on content data and meta-data. What you're looking for is something that does matching based on website log file analysis. I don't know of any module that does this for drupal.

Awesome list of modules ...

OpenChimp's picture

Thanks for putting together this list. I'm going to play around with some of these modules.

Relvant Content is a great, simple, module that works

bflora's picture

I just wanted to note that the Relevant Content module works out of the box and does everything it says it does. As I find this fairly rare, I want it to be noted. A lot of these shoot-outs neglect to mention whether the module actually works when you activate it or if it needs patching or is still just a bunch of well-intentioned code. I can't vouch for the others, but Relevant Content works and works very well.

Is it just me or should this

Flying Drupalist's picture

Is it just me or should this not be written in PHP? PHP is slow, there are other languages more suited to the task.

Oh, it's just you. I'd

Garrett Albright's picture

Oh, it's just you. I'd imagine the real bottlenecks from this sort of thing (and web development in general) are all in the database layer, and the language that's on top of that isn't going to have much effect on that aspect of it. Besides, the major benefit of a PHP-only solution is that it should run anywhere Drupal runs.

To be fair, the Solr modules

deletedaccount's picture

To be fair, the Solr modules also provides recommended links but completely bypasses the database, prefering a more specialised tool written in Java.

Similar Entries

john.kenney's picture

I use and like the Similar Entries module quite a bit. I scanned all/most of these recently when trying to find a good, very simple related content module to use - wish I'd found this page then!

But anyway, tried a few out on my sites and Similar Entries seemed the best - easy to set up and use. And with a little tuning of my sites, I've gotten the recommendations to work very nicely. Initially, there were some problems with wacky recos, like my 'Terms of Use' page kept coming up for some reason, but these issues were resolved pretty easily and I love that it works off the deep content in body text vs. simply terms.

To amplify on the op comments about the module, while it doesn't use taxonomy to determine matches per se, you can use taxonomy to influence what pages are recommended. There are 3 settings: No category filtering, Only show the similar nodes in the same category as the original node, Use global category filtering. If you are using taxonomy, you can fiddle with these setting to included/disinclude certain kinds of pages.

I use the last setting to eliminate my 'Terms of Use' problem by excluding pages tagged 'admin'.

As well, the module provides a mechanism to determine matches based on node type, so I use that to faciliate matching, too.

The main drawback that I have found is that it doesn't work with CCK. For those pages, I've used Node Recommendations and have been pleased with it so far. It likewise is pretty much plug and play, but you do need to fiddle with settings a bit to get the right results.

I use

blavish's picture

I use Similar entries as well, been using it since 5 and seems to be my favourite.

Me too

digitalpbk's picture

The similar entries module to be simple and light enough, But however it requires you to have a MYSQL back end.
Other than that it rocks.
Similar entries provides just a block to work with, But if you know a little bit of php, we can call the theme('similar_content', $node) function in the node.tpl.php, to display similar content links on your page. Have posted a note about it on showing similar content on drupal

Finding relevant nodes by the text in title

Amir Simantov's picture

Hi.

This is a good discussion but I could not find an answer to a question of mine. What I would like to have, is the ability to relate to nodes which in THEIR titles are words which are the same as words in the title of the said node. Is there anything as such?

Thanks!

Dig a little deeper!

DeeZone's picture

Amir, the solution your looking for is posted several times on this page. Perhaps there was too much information at one time so you were overwhelm. In short, the module you're looking for is:

http://drupal.org/project/similar

which matches words in the title/body of current node with other nodes on your site and produces a block with a list of the titles of the match nodes.

Thanks DeeZone

Amir Simantov's picture

All these modules regarding relevant content indeed overwhelm me...

Browsing History Recommender

Sepero's picture

I just wanted to add this to the list as a recommender.
Browsing History Recommender
http://drupal.org/project/history_rec

Friend Recommendation

vivekchakraverty's picture

i am new to drupal and all these technical terms seem to be a tad alien to me.i want to create a friend recommendation page based on user likings.how do i do this? one way ,as another user showed me, is to use taxonomy terms along with the modules user terms and similar by terms.but i cant get the default similar by terms view configure correctly in order to accomplish my goal.a detailed step by step instructions
will be highly appreciated.thanks.

Hey vivekchakraverty, I'm

Sepero's picture

Hey vivekchakraverty,
I'm sorry, but I think that this might not be the best location to ask for help to your problem.

any clues where i can go

vivekchakraverty's picture

where can this query be resolved except drupal post installation forum(ive already tried there).thanks

Taxonomy

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: