rank.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. """
  2. @author: luojunhui
  3. """
  4. from applications.match_alg.recall import recall_videos
  5. def jac_score(d1, d2):
  6. """
  7. 通过交并集来判断
  8. :param d1:
  9. :param d2:
  10. :return:
  11. """
  12. f1_keys = set(d1["key_words"])
  13. f2_keys = set(d2["key_words"])
  14. keys_union = f1_keys | f2_keys
  15. keys_intersection = f1_keys & f2_keys
  16. f1_search_keys = set(d1["search_keys"])
  17. f2_search_keys = set(d2["search_keys"])
  18. search_keys_union = f1_search_keys | f2_search_keys
  19. search_keys_intersection = f1_search_keys & f2_search_keys
  20. f1_extra_keys = set(d1["extra_keys"])
  21. f2_extra_keys = set(d2["extra_keys"])
  22. extra_keys_union = f1_extra_keys | f2_extra_keys
  23. extra_keys_intersection = f1_extra_keys & f2_extra_keys
  24. score_1 = len(keys_intersection) / len(keys_union)
  25. score_2 = len(search_keys_intersection) / len(search_keys_union)
  26. score_3 = len(extra_keys_intersection) / len(extra_keys_union)
  27. return score_1 * 0.4 + score_2 * 0.4 + score_3 * 0.2, d2['video_id']
  28. async def best_choice(params_obj, request_param, trace_id):
  29. """
  30. 计算,返回出最合适的 video_id
  31. :return: video_id
  32. """
  33. pq_list, search_list = await recall_videos(params=request_param, trace_id=trace_id)
  34. def best_video_id(target_list):
  35. """
  36. :param target_list:
  37. :return:
  38. """
  39. score_list = []
  40. for video_obj in target_list:
  41. try:
  42. score, video_id = jac_score(d1=params_obj, d2=video_obj)
  43. score_list.append((video_id, score))
  44. except Exception as e:
  45. print(e)
  46. sorted_list = sorted(score_list, key=lambda x: x[1], reverse=True)
  47. return sorted_list[0]
  48. if search_list:
  49. best_search_tuple = best_video_id(search_list)
  50. if best_search_tuple[1] > 0:
  51. return best_search_tuple[0]
  52. else:
  53. best_pq_tuple = best_video_id(pq_list)
  54. if best_pq_tuple[1] > 0:
  55. return best_pq_tuple[0]
  56. else:
  57. return None
  58. else:
  59. best_pq_tuple = best_video_id(pq_list)
  60. if best_pq_tuple[1] > 0:
  61. return best_pq_tuple[0]
  62. else:
  63. return None