Announcing the "Recommender API" module
From the experience of developing the "pivots" Drupal module recommendation system, I developed the general purpose Recommender API module. It was released today.
In fact, if you think about it, all recommender systems work pretty much the same way. Take Amazon for example, it knows what users bought what items, and then it can calculate how similar users' tastes are, and finally make recommendations based on that. Take "pivots" (based on project_usage) for another example. It knows what sites are using what modules, and then calculates related modules based on the fact that related modules are used in the same sites.
In Drupal, we have a lot of such relations as the users-items relation in Amazon, or the sites-modules relation in pivots. For example, we have the nodes-votes relation in VotingAPI, or the users-products purchasing relation in Ubercart, or the nodes-terms relation in Taxonomy. You name it. Those relations can be used to calculate similarity among items, and then generate recommendations.
The question is how to calculate similarity among items, and how to generate recommendations. That's where the Recommender API module comes into the picture. It provides a set of general purpose APIs that take into such users-items relation as input, and then calculate similarities and predictions. The module itself doesn't have any end user interaction, but it provides powerful APIs for other module developers to write cool recommender-based modules.
My hope for this module is that it could give rise to a wave of new modules development involving recommendations, e.g. Ubercart purchase recommendation, personalized ads, etc. I also wrote a simple example module User-to-user Recommendation to show how easy it is to use the API. I'm hoping Content Recommendation Engine and Similar By Terms modules could also take advantage of this module too, and support other recommender algorithms that might generate better results in different cases.
The Recommender API would be devoted to provide more algorithms (like PageRank, SVD, PCA, etc.), more features (like manipulation-resistance, etc), and enhanced performance.
You comments/feedback would be much appreciated :)