12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- """
- @author: luojunhui
- """
- from applications.match_alg.recall import recall_videos
- from applications.log import logging
- 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, trace_id, search_videos):
- """
- 计算,返回出最合适的 video_id
- :return: video_id
- """
- pq_list, search_list = await recall_videos(trace_id=trace_id, s_videos=search_videos)
- 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 sorted_list else (0, 0)
- if search_list:
- logging(
- code="1003",
- info="Return Best Search Video",
- data=search_list,
- trace_id=trace_id
- )
- return search_list[0]
- # return best_video_id(search_list)[0]
- # best_search_tuple = best_video_id(search_list)
- # if best_search_tuple[1] > 0:
- # logging(
- # code="1003",
- # info="search_score---{}".format(best_search_tuple[1]),
- # trace_id=trace_id
- # )
- # return best_search_tuple[0]
- # else:
- # best_pq_tuple = best_video_id(pq_list)
- # if best_pq_tuple[1] > 0:
- # logging(
- # code="1003",
- # info="pq_score---{}".format(best_pq_tuple[1]),
- # trace_id=trace_id
- # )
- # return best_pq_tuple[0]
- # else:
- # return None
- else:
- best_pq_tuple = best_video_id(pq_list)
- if best_pq_tuple[1] > 0:
- logging(
- code="1003",
- info="pq_score---{}".format(best_pq_tuple[1]),
- trace_id=trace_id
- )
- return best_pq_tuple[0]
- else:
- return None
|