123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- """
- @author: luojunhui
- """
- from applications.match_alg.recall import recall_videos
- def jac_score(d1, d2):
- """
- 通过交并集来判断
- :param d1:
- :param d2:
- :return:
- """
- f1_keys = set(d1["key_words"])
- f2_keys = set(d2["key_words"])
- keys_union = f1_keys | f2_keys
- keys_intersection = f1_keys & f2_keys
- f1_search_keys = set(d1["search_keys"])
- f2_search_keys = set(d2["search_keys"])
- search_keys_union = f1_search_keys | f2_search_keys
- search_keys_intersection = f1_search_keys & f2_search_keys
- f1_extra_keys = set(d1["extra_keys"])
- f2_extra_keys = set(d2["extra_keys"])
- extra_keys_union = f1_extra_keys | f2_extra_keys
- extra_keys_intersection = f1_extra_keys & f2_extra_keys
- score_1 = len(keys_intersection) / len(keys_union)
- score_2 = len(search_keys_intersection) / len(search_keys_union)
- score_3 = len(extra_keys_intersection) / len(extra_keys_union)
- return score_1 * 0.4 + score_2 * 0.4 + score_3 * 0.2, d2['video_id']
- async def best_choice(params_obj, request_param, trace_id):
- """
- 计算,返回出最合适的 video_id
- :return: video_id
- """
- pq_list, search_list = await recall_videos(params=request_param, trace_id=trace_id)
- def best_video_id(target_list):
- """
- :param target_list:
- :return:
- """
- score_list = []
- for video_obj in target_list:
- try:
- score, video_id = jac_score(d1=params_obj, d2=video_obj)
- score_list.append((video_id, score))
- except Exception as e:
- print(e)
- sorted_list = sorted(score_list, key=lambda x: x[1], reverse=True)
- return sorted_list[0]
- if search_list:
- best_search_tuple = best_video_id(search_list)
- if best_search_tuple[1] > 0:
- return best_search_tuple[0]
- else:
- best_pq_tuple = best_video_id(pq_list)
- if best_pq_tuple[1] > 0:
- return best_pq_tuple[0]
- else:
- return None
- else:
- best_pq_tuple = best_video_id(pq_list)
- if best_pq_tuple[1] > 0:
- return best_pq_tuple[0]
- else:
- return None
|