I'm in the process of creating an interest match module. It currently allows administrators to configure subjects the user may rate their interest in, and allows users to search for similar users by calculating the total difference between users ratings and order by that value (current source: http://www.mypastebin.com/?code=1880021952). I would like to get some response on a good implementation of this. A was thinking about a couple of things.
This is in some respects similar to the profile module and how it is used for instance on drupal.org, but I think it sufficiently different in nature to require it's own module. However, integration could be fine by integrating it into a user category through the user hook. Not sure where that'll place the search though. Making a search for other fields of the profile.module would be problematic.
I was also thinking it could be nice to integrate it into the taxonomy system, which would make it quite different. The admin could connect the module to one or more categories. Interest subjects would be tied to categories. This would allow users to rate their interest in different categories as they browse the site or at a central page. It would also allow for instance a category sensitive block showing users interested in the current category, which could also be useful for administrators by being kind of a survey of site interest. It would be more like a category rating system, closely tied to users. This approach would also allow users to show a page with entries (nodes) of interest, which perhaps moves away a matchmaking type module.
Perhaps both could be done in the same module? It seems to me though, such an approach would easely lead to a mess.
In either way the user could get a list of similar users in a block with a "more" link. What would be nice to show in such a list?
I would appreciate some discussion on the implementation of this, as I don't consider myself to have a very good overview of the use of Drupal sites, especially from an administrative point of view. Would you like such a module? For what? What would you like in it?
Thanks.
Comments
I think this module has a
I think this module has a lot of potential. For instance, in the non-profit context, I could use this module to match the interests of volunteers with the needs of the non-profits, on the lines of volunteermatch.org
If this could play nicely with Ankur's location module, it would even be possible to find volunteers based on location and lat/long info etc. In a sense, it could even extend the current volunteer module.
But, this will need a bit of tweaking. The way to making this work with different modules perhaps lies in make the code modular, just like the recent refactoring of the pathauto module (http://drupal.org/node/21251)
This is just my take.
Well, that sounds like a
Well, that sounds like a great idea, and a nice application for a module like this. I was unaware of the location module, and will surely look at it. One of the things I'm "strugling" with is the case where a user want to search for users with similar interests and for instance living in a certain area or being in a particular age group.
One of the reasons I'd like this as a standalone module, is to make it fit in different applications. Getting the match value of two users and placing it somewhere wouldn't be too hard, but to integrate the order of interest in a query on the other hand, might be difficult.
Thanks.
When it comes to apis, I
When it comes to apis, I believe a better approach when it comes to searching all users would be to have a usersearch module where this one hooks in, given the administrator and user allows it. The user search could ask for a SQL array from all modules and this would with the current approach provide something like:
Note: not thought through.
But I really like the idea of modules making apis available. Maybe this could do so, allowing interests ratings to be hooked in where modules want it? And thereby adding to their orderings?
Maybe it should be easy to add a little button "I find this interesting" different places. A boolean value would probably improve search speed, but might make it less easy to gain overview (a list of users interests for instance). And there's the problem of "instant interests" and maybe more fine-grained interest searches.
Please please integrate with taxonomy
To make use of the taxonomy system in this kind of module would greatly enhance the future role of such a module. To be able to match people based on their interest in certain subjects added to their profile is great. To be able to "suggest" interests of people based on their reading of certain content tagged with certain taxonomy terms would open the world (to abuse too - of course). You could even match people with products or services.........................................................
Best
Gunnar
Dropping in from Langemarks Cafe.
Yes, there must surely be
Yes, there must surely be good applications for this if implemented nicely. It has been suggested by this nice fellow sami to also add to the users interest terms which he/she submits to a site, which is similar to what you suggest, though people of course read more than they write and hence reading would more easily and probably more accurately indicate the users interests. This leads to another problem with this approach only; it isn't "instantly" available. A user can't sign up, rate his/her interest in some subjects and then go about some business requiring interest knowledge.
These things may however make it more difficult, and certainly slower to search for users with particular interests, especially some total interest type search which is currently implemented. Again, caching would be important. Maybe there is a way to say "Yes please, I'll have it both ways!"?
Thanks.
elaborate of my other post
Ok. A followup/elaboration of my previous post.
What do I mean by taxonomy the integration there?
The way you are calculating the measure for closeness between user interests, can be reused for calculating node closeness. By closeness I mean literally measuring/rating how similar are two objects.
The current taxonomy system gives you hierarchichal labeling of content. You can navigate that said hierarchy. You can make queries, like "show me the nodes which are in category1 and category2 and category3". You can use OR as well. That is powerful on it's own right, but can be improved. What if we can do queries like "show me nodes which are similar to tis one", where the similarity is based on the closeness measure you define. This measure defines a different node order and can be used in a similar pages listing.
Implementation. For taxonomies with no hierarchy this is straight forward. You can always assume(not nessesarily correct) that the different taxo-terms describe orthogonal knowtions. So the calculations can be preserved as they are. The parent-child case is different. If we assume that the parent is the sum of it's children, then each parent will participate with it's children scores + the 'does not belong to any child' score.
I think this starts getting a bit too CS-y. I'm definitely interested in helping out on such a module. Currently taxonomy integration would be a bit hard, since the default user profiles are not nodes, thus can't use taxonomy categories. Either there will be two separate modules one of them working for nodes the other one for users, or a custom profile module can be developed. That is an issue outside the scope of this discussion, but IMHO with cck and 4.7 the user profile should be treated as a node.
If you want some help please contact me directly.
Note: I probably did not
Note: I probably did not understand everything (no CS-guy per now), so please excuse me if some comments are very affected of this.
As I understand it: Nodes and taxonomies may have properties (of integer type preferrably, text not interesting directly, dates, float and booleans of some interest). These may be calculated based on something. For instance, which users use them. If a user with a certain interest profile (to use that as an example) visits a node, the node participate in a certain term and so on interesting properties in this perspective of that node may change. The same could go for vocabularies and terms. They may be similar in different respects and these properties are there to pick that up. With these interesting properties, new ways of ordering and finding nodes becomes available. There may be different methods such as one based on a certain type of user. This particular type of searching could be defined as a closeness measure. This would add a dynamic way of organizing content. And it would be possible to a large extend to organize the content based on the users interests for instance, which could be based on other users with similar interests behavior on the site.
Such a system could really add an interesting gravityforce in Drupal's nature, and it seems very interesting to me (add interest). But could it not lead to excessive configuration. Would one be able to add general closeness measures providing features better suited to do the ordering than the current taxonomy system? "Doing it yourself" with the taxonomy might also provide desired control over having some closeness mesaurement do the job. Not only similarity is interesting when it comes to ordering. Things like what the site administrator wants users to see also play a role. And say one wish to list similar nodes from the same term or vocabulary under one node. To do that, what measure would be used? Maybe hints could be given by looking at the words used, so wouldn't that be better implemented by and suited for the search engine?
Which properties would be useful? I suppose this is an important question, as the gravity, or different gravities would be defined by it.
Where would it be appropriate?
you probably understand more than you claim :)
The key phrase is probably "new ways of ordering". Basically by computing distances between nodes by using different sets of features, gives you different node order. Different listings. In theory it shouldn't really matter what are the features in these feature vectors, as long as they are used to provide a different metric.
Ok, I'll decrease the odd words rate :). I don't think configuration is a problem at all. Consider the scenario:
A module provides a different order based on a certain feature set. What if we use the measure to order a node (or user) listing? What if you have a url-to-listing handling, let's say a listing api? The only configuration possibly needed is the configuration for that particular measure. In the case of taxonomy based distance measure I don't see a need for any configuration at all. All of it can be handled by url.
For example a url like http:/ /example.net/list/similar-voc/122/1,4,5,7 can mean list nodes similar to $nid==122 based on vocabularies 1,4,5 and 7
This makes a very good example for the listings api JonBob is working on as part of cck.
Nevermind.
Each measure provides possibly different order. I suppose what do you consider to base your measure on really depends on context.
Taxonomy systems are good to provide labelling, and navigation and grouping by those labels(taxonomy terms). The question(s) they answer is "Is this a xxx?", or "which nodes are xxx?". They don't nessesarily provide a meaningful measurable distance. Distance could be the path along a tree from one node to another. That is not always what I would want to use.
Maybe. All that goes into various complications. I personally would prefer keeping things simple. While it is relatively trivial to implement one measure or another, tying them together into a big monstrous api would be a challenge. IMO, it is better to have the possibility to do different crosssections of a website and as an administrator to be possible to configure what my users can see. Apropos, I've heard users refering to taxonomy listings as 'search'. And I think they are right. It's just another kind of search, another way to extract a useful subset of information from the whole.
I would say the easiest one for the time being, would be taxonomy terms or vocabularies. They are very good candiates, which whouldn't reuire any additional processing, just counting.
Don't know what you mean. Guessing. In a module. Website structure wise in a block, or links. Node listings. Website maps.
I'm really interested in
I'm really interested in such a module for an upcoming dating site, but I'm a newbie to Drupal. Could someone let me know how to start testing this mod? Also, I was interested in PeopleAggregator but the website is down right now. Would this have features that are like that as well?
There is a FOAF module in
There is a FOAF module in the repository you might be interested in. As to testing: maybe one and a half month if you wait for it from me. :-)
Combing existing modules
Node relativity http://drupal.org/node/17004 has been created to show relationships between nodes. It adds a "relativity search" node type that can use several means to calculate relationships. I'm not sure how this could work into profile, but just a heads up.
It would also be nice to have this hook in with the node moderation module to track user interests by votes, although I do like the idea of a hot list.
What I think all this is getting at is a suite of modules missing from Drupal, or in Drupal but not tied together for either "Karma" or "User relationships," like friendster. I can have a buddylist and see others buddies, but not search or have some other way to show friends of multiple friends. I can vote on content but not see how others have voted, see total votes or rating in a users profile, and nothing can be done with those votes other than promote content to the front page; a user cannot gain a "trusted" status like on other cms's. I can have a profile field for "country" but only see other people in my country by clicking on a link in my profile. I can subscribe to content, but not search of other users who have subscribed and shown similar interest. Also, no online "hotlist/watching" is available to track my watched content from a single page and see who else is watching it, like on http://upcoming.org. This is just to name a few.
I guess my summation is that a module is needed to hook in search ablity and greater flexibility and sharing between existing modules. Also, a "hotlist/watching" module is needed, or extending either the my site module or subscriptions module for interest in nodes.
I agree with lots of this.
As I've planned a site facilitating matchmaking, I've found that Drupal lacks some capabilities in respect to "user management". In writing this module, I've also tried the idea of a user_extras module as kind of a framework for extending the user. I believe it would be really nice to provide an extended user API. Integrating that with the various bits and pieces that already exists (which I kind of feel obligated to) sets some boundries. I might be attempting a extended profile module ready to plug in to. But I'm having a tough time figuring out how this should be organized to fit a nice range of needs. When trying to make something as general as this, much needs to be considered.
Current source
Do you have a current source you could send me? I'm good with PHP, although just getting into Drupal, and want to help get this thing going. Let me know what you need help with.
Contributing
I'd like to help out on this. Let me know what I can do.
Has there been any progress
Has there been any progress on this? Would love to see this module come to life.
This will certainly be a helpful module
This will certainly be a very helpful module. I would love to implement it on my site.
- Anim
dating module matchmaking module
is this ready..would love to try it
Similar creation
I created something similar today for a project i'm working on
Look for a module named 'interests'
Hi! I installed your module
Hi!
I installed your module interests and it does not work. While saving, it says it cannot find the table interest. Also it cannot because it forgot to create the table interests. Do you have a SQL file or am I missing something.
Is this module interests really interested to function?
Just what I'm looking for!
This is similar functionality to that available at http://selectsmart.com (probably others, too). Here are just a few ways such a module could be used (in addition to the volunteer matching and matchmaking suggestions above):
- Help a voter pick a candidate
- Help categorize books or movies so someone can find similar ones to what they like (e.g. Amazon or the excellent Otakuworld theme guide: http://otakuworld.com/guide/ )
- Help a college student pick a major
etc.
I'd be happy to help test!
Very interested!
I would love a module that could find similar users based on their rating of for example which movies they like or bands or interests or...
Might it be possible to tie it in with the node vote module?
Thanks.
EDIT: I think I might have found a module that suits my needs: http://drupal.org/project/cre
Thanks
Development For A Matching Module Is in Process
Please see this post
http://drupal.org/node/192466#comment-664525