def get_nn_multi_query(self, song_id_list, nn_cf_scores, fanout): print "*********************************************************" print " GET NN MULTI QUERY " print "*********************************************************" st = time.time() query_dicts = self.get_query_data_multi_query(song_id_list) print "INFO: Step 1, Get query data and supervectors:", time.time( ) - st st = time.time() collab_song_infos = self.get_collab_info_multi_query(song_id_list) print "INFO: Step 2, Get collaborative filtering results:", time.time( ) - st total_nn_dict = {} total_id_list = [] out_nn_cf_scores = [] st = time.time() cf_data_query_time = 0 dist_comp_time = 0 for input_song in nn_cf_scores: input_song_id = input_song[0] input_song_cf_score = input_song[1] if len(collab_song_infos[input_song_id].keys()) > 0: t1 = time.time() close_songs_dict = pardora_db_sqlite.get_cf_songs_data( collab_song_infos[input_song_id], self.cursor) cf_data_query_time += time.time() - t1 t2 = time.time() nn_dict = self.get_nn_dict(query_dicts[input_song_id],\ close_songs_dict, fanout,\ parent_cf_score=input_song_cf_score) dist_comp_time += time.time() - t2 else: print "No collaborative filtering neighbors found." nn_dict = None total_nn_dict[input_song_id] = nn_dict for k in nn_dict.keys(): total_id_list.append(k) out_nn_cf_scores.append( (k, collab_song_infos[input_song_id][k])) print "INFO: Step 3, Compute closest songs:", time.time() - st,\ ";\n \tCF data gather (", cf_data_query_time, "), Dist comp (", dist_comp_time, ")" return total_nn_dict, out_nn_cf_scores, total_id_list
def get_nn_one_query(self, song_id_list, fanout): print "*********************************************************" print " GET NN COMPOUND QUERY " print "*********************************************************" st = time.time() query_dict = self.get_query_data(song_id_list) print "INFO: Step 1, Get query data and supervectors:", time.time( ) - st st = time.time() collab_song_info = self.get_collab_info(song_id_list) print "INFO: Step 2, Get collaborative filtering results:", time.time( ) - st st = time.time() cf_data_query_time = 0 dist_comp_time = 0 nn_cf_scores = [] if len(collab_song_info.keys()) > 0: t1 = time.time() close_songs_dict = pardora_db_sqlite.get_cf_songs_data( collab_song_info, self.cursor) cf_data_query_time += time.time() - t1 t2 = time.time() nn_dict = self.get_nn_dict(query_dict, close_songs_dict, fanout) dist_comp_time += time.time() - t2 # keep track of cf score of the neighbors separately for n in nn_dict.keys(): nn_cf_scores.append((n, collab_song_info[n])) else: print "No collaborative filtering neighbors found." nn_dict = None print "INFO: Step 3, Compute closest songs:", time.time() - st,\ ";\n \tCF data gather (", cf_data_query_time, "), Dist comp (", dist_comp_time, ")" return nn_dict, nn_cf_scores