class RetrivalAndRankingChooseController(RankingChooseController): '''Use the retrival ad category firstly, and ranking the ads. ''' def __init__(self): self.load_conf() getters = self.build_vec_getter() self.ranking = Ranking(self.builder, self.distance, getters[1], getters[2]) self.ad_c_cache, self.ad_cache = self.loader.load_ads() self.number_content() self.retrival = CategoryRetrivalStrategyCenter(self.builder, self.distance, getters[0], getters[2]) def get_content_ads(self, num): '''Get the content whose id is num and the recommend ads Args: num : content id Returns: (content, [list of ad content]) ''' if num >= self.count: return (('', ''), []) print num, self.content_key[num] content_obj = self.loader.load_content(self.content_key[num]) categorys = self.retrival.get_category(content_obj, self.ad_c_cache) retrival_ads = [] print 'categorys:' for category in categorys: print category.name retrival_ads += self.ad_cache.get_ads(category) ads = self.ranking.ranking(content_obj, retrival_ads, topk = 2) res_ad = [] for score, ad_key in ads: res_ad.append(self.loader.get_ad_info(ad_key)) return (self.loader.get_content_info(self.content_key[num]), res_ad)
class RankingChooseController(ChooseController): '''Just use the ranking process. ''' def __init__(self): self.load_conf() getters = self.build_vec_getter() self.ranking = Ranking(self.builder, self.distance, getters[1], getters[2]) self.ad_cache = self.loader.load_ads()[1] self.number_content() def load_conf(self): '''Read config file and build builder, distance and loader''' cf = ConfigParser.RawConfigParser(allow_no_value=True) import os paths = ['controllers', 'recommend', 'controller.cfg'] _file = os.getcwd() for path in paths: _file = os.path.join(_file, path) with open(_file,'r') as configfile: cf.readfp(configfile) builder_class = cf.get("class", 'builder') builder_args = eval(cf.get("args", 'builder')) self.builder = getattr(builder, builder_class)(args = builder_args) distance_class = cf.get("class", 'distance') distance_args = eval(cf.get("args", 'distance')) self.distance = getattr(distance, distance_class)(args = distance_args) loader_class = cf.get("class", 'loader') loader_args = eval(cf.get("args", 'loader')) self.loader = getattr(loader, loader_class)(args = loader_args) def build_vec_getter(self): '''Build the ad and content vector getter Returns: tuple of ad vector getter and content vector getter ''' ad_c_vec_getter = lambda vec : vec.get_vec() ad_vec_getter = lambda vec : vec.get_vec() content_vec_getter = lambda vec : vec.get_vec() return (ad_c_vec_getter, ad_vec_getter, content_vec_getter) def number_content(self): '''Give all content number and save the key''' self.count = 8 self.content_key = { 0 : {'category' : 'IT', 'file' : '10.txt'}, 1 : {'category' : 'IT', 'file' : '11.txt'}, 2 : {'category' : 'IT', 'file' : '18.txt'}, 3 : {'category' : '体育', 'file' : '12.txt'}, 4 : {'category' : '体育', 'file' : '13.txt'}, 5 : {'category' : '体育', 'file' : '14.txt'}, 6 : {'category' : '体育', 'file' : '16.txt'}, 7 : {'category' : '体育', 'file' : '17.txt'} } def content_count(self): return self.count def get_content_ads(self, num): '''Get the content whose id is num and the recommend ads Args: num : content id Returns: (content, [list of ad content]) ''' if num >= self.count: return (('', ''), []) content_obj = self.loader.load_content(self.content_key[num]) ads = self.ranking.ranking(content_obj, self.ad_cache, topk = 2) res_ad = [] for score, ad_key in ads: res_ad.append(self.loader.get_ad_info(ad_key)) return (self.loader.get_content_info(self.content_key[num]), res_ad)