#!/usr/bin/env python ############################################################## # # Name: recommend.py # # Description: recommendation class # (1)The recommendation is ranking based # This means item is ranked according to relevant to # the target user preference. # (2)This class is methond independent # Usage: see testRec # # Author: Jun Wang j.wang@ewi.tudelft.nl Sept. 2005 # ############################################################## import sys, math from skotvdataread import readSKOData from common import DictList from similarity import simMeasure class recommend: """Recommendation""" def __init__(self,My_preference = []): self.My_preference = My_preference self.Relevant_items = [] def loadMyPreference(self,My_preference): self.My_preference = My_preference def getMyPreference(self): """get My Preference""" return self.My_preference def loadOtherUserPreference(self, Other_user_preference): self.Other_user_preference = Other_user_preference def getOtherUserPreference(self): return self.Other_user_preference def computeRec(self, My_method): self.Relevant_items = My_method.U2IRelevance\ (self.My_preference,self.Other_user_preference) return self.Relevant_items def testRec(): #load user preference data User_profiles = readSKOData(100) #sort item_id for each user for user in User_profiles.keys(): temp = DictList(User_profiles[user]) #temp._shift() temp.sortedby('item_id',order = 'increase') User_profiles[user] = temp del temp targetUser = User_profiles.pop(99) measure = simMeasure() rec = recommend(targetUser) rec.loadOtherUserPreference(User_profiles) Relevant_items = rec.computeRec(measure) print 'recommended item list:' for i in range(len(Relevant_items)): print '[rank:%d,item_id:%d]' % \ (Relevant_items[i]['rank']*100, Relevant_items[i]['item_id'] ) if '__main__'==__name__: testRec()