def calc_weighted_top_list_method1(self, site_id, similarity_type, items_list, extra_excludes_list=[]): if len(items_list) > 15: recent_history = items_list[:15] else: recent_history = items_list excludes_set = set(items_list + extra_excludes_list) # calculate weighted top list from recent browsing history rec_map = {} for row in self.getSimilaritiesForItems(site_id, similarity_type, recent_history): recommended_items = row["mostSimilarItems"] for rec_item, score in recommended_items: if rec_item not in excludes_set: rec_map.setdefault(rec_item, [0, 0]) rec_map[rec_item][0] += float(score) rec_map[rec_item][1] += 1 rec_tuples = [] for key in rec_map.keys(): score_total, count = rec_map[key][0], rec_map[key][1] rec_tuples.append((key, score_total / count)) rec_tuples.sort(lambda a, b: sign(b[1] - a[1])) topn = [rec_tuple for rec_tuple in rec_tuples] return topn
def updateRecord(connection, site_id, item_view_times_map, last_item_id1, last_rows): last_rows.sort(lambda a, b: sign(b[1] - a[1])) item1_total_views = item_view_times_map[last_item_id1] content_dict = { "item_id": last_item_id1, "total_views": item1_total_views, "viewedUltimatelyBuys": [] } for row in last_rows: item_id2, count = row content_dict["viewedUltimatelyBuys"].append({ "item_id": item_id2, "count": count, "percentage": count / item1_total_views }) c_viewed_ultimately_buys = getSiteDBCollection(connection, site_id, "viewed_ultimately_buys") c_viewed_ultimately_buys.update({"item_id": last_item_id1}, content_dict, upsert=True)
def updateRecord(connection, site_id, item_view_times_map, last_item_id1, last_rows): last_rows.sort(lambda a, b: sign(b[1] - a[1])) item1_total_views = item_view_times_map[last_item_id1] content_dict = {"item_id": last_item_id1, "total_views": item1_total_views, "viewedUltimatelyBuys": []} for row in last_rows: item_id2, count = row content_dict["viewedUltimatelyBuys"].append( {"item_id": item_id2, "count": count, "percentage": count / item1_total_views}) c_viewed_ultimately_buys = getSiteDBCollection( connection, site_id, "viewed_ultimately_buys") c_viewed_ultimately_buys.update( {"item_id": last_item_id1}, content_dict, upsert=True)
def calc_weighted_top_list_method1(self, site_id, similarity_type, items_list, extra_excludes_list=[]): # the new items added to the items_list, are appended to the end of the list # here we have to get the latest 15 items, so we get the last 15 items # from the items_list if len(items_list) > 15: recent_history = items_list[-15:] else: recent_history = items_list # some calc are item-order releated, so we have to get the items reversed recent_history = recent_history[::-1] weights = settings.SIMILARITY_WEIGHT.get(similarity_type, []) wei_cnt = len(weights) his_cnt = len(recent_history) if his_cnt <= wei_cnt: weight_dict = dict(zip(recent_history, weights[0:his_cnt])) else: weight_dict = dict(zip(recent_history[0:wei_cnt], weights)) excludes_set = set(items_list + extra_excludes_list) # calculate weighted top list from recent browsing history rec_map = {} for row in self.getSimilaritiesForItems(site_id, similarity_type, recent_history): recommended_items = row["mostSimilarItems"] for rec_item, score in recommended_items: if rec_item not in excludes_set: rec_map.setdefault(rec_item, [0, 0]) rec_map[rec_item][0] += ( float(score) * weight_dict.get(row['item_id'], 1)) rec_map[rec_item][1] += 1 rec_tuples = [] for key in rec_map.keys(): score_total, count = rec_map[key][0], rec_map[key][1] rec_tuples.append((key, score_total / count)) rec_tuples.sort(lambda a, b: sign(b[1] - a[1])) topn = [rec_tuple for rec_tuple in rec_tuples] return topn
def calc_weighted_top_list_method1(self, site_id, similarity_type, items_list, extra_excludes_list=[]): # the new items added to the items_list, are appended to the end of the list # here we have to get the latest 15 items, so we get the last 15 items # from the items_list if len(items_list) > 15: recent_history = items_list[-15:] else: recent_history = items_list # some calc are item-order releated, so we have to get the items reversed recent_history = recent_history[::-1] weights = settings.SIMILARITY_WEIGHT.get(similarity_type, []) wei_cnt = len(weights) his_cnt = len(recent_history) if his_cnt <= wei_cnt: weight_dict = dict(zip(recent_history, weights[0:his_cnt])) else: weight_dict = dict(zip(recent_history[0:wei_cnt], weights)) excludes_set = set(items_list + extra_excludes_list) # calculate weighted top list from recent browsing history rec_map = {} for row in self.getSimilaritiesForItems(site_id, similarity_type, recent_history): recommended_items = row["mostSimilarItems"] for rec_item, score in recommended_items: if rec_item not in excludes_set: rec_map.setdefault(rec_item, [0, 0]) rec_map[rec_item][0] += (float(score) * weight_dict.get(row['item_id'], 1)) rec_map[rec_item][1] += 1 rec_tuples = [] for key in rec_map.keys(): score_total, count = rec_map[key][0], rec_map[key][1] rec_tuples.append((key, score_total / count)) rec_tuples.sort(lambda a, b: sign(b[1] - a[1])) topn = [rec_tuple for rec_tuple in rec_tuples] return topn