rank.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """
  2. @author: luojunhui
  3. """
  4. from applications.match_algorithm.title_similarity import jcd_title_similarity
  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. def title_similarity_rank(content_title, recall_list):
  29. """
  30. :param content_title:
  31. :param recall_list:
  32. :return:
  33. """
  34. include_title_list = []
  35. for item in recall_list:
  36. video_info = item['result']
  37. platform = item['platform']
  38. if platform in ['dy_search', 'baidu_search']:
  39. title = video_info['title']
  40. elif platform in ['xg_search']:
  41. title = video_info['video_title']
  42. else:
  43. continue
  44. item['title'] = title
  45. item['score'] = jcd_title_similarity(content_title, title)
  46. include_title_list.append(item)
  47. sorted_list = sorted(include_title_list, key=lambda x: x['score'], reverse=True)
  48. return sorted_list