alex0sunny

search_sentence

Sep 16th, 2021 (edited)
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.71 KB | None | 0 0
  1. N_RESULTS = 5
  2.  
  3.  
  4. def search_words(texts, queries):
  5.     queries_dic = {}
  6.     for query_i, query in enumerate(queries):
  7.         for w in set(query.split()):
  8.             if w not in queries_dic:
  9.                 queries_dic[w] = set()
  10.             queries_dic[w].add(query_i)
  11.     queries_set = set(queries_dic.keys())
  12.     queries_texts_dic = {i: {} for i in range(len(queries))}
  13.     for text_i, text in enumerate(texts):
  14.         words = text.split()
  15.         for w in set(words) & queries_set:
  16.             w_count = words.count(w)
  17.             for query_i in queries_dic[w]:
  18.                 queries_texts_dic[query_i][text_i] = \
  19.                     queries_texts_dic[query_i].get(text_i, 0) + w_count
  20.     result = []
  21.     for query_i in range(len(queries)):
  22.         counts_inds = sorted([[-count, i]
  23.                               for i, count in queries_texts_dic[query_i].items()])
  24.         result.append([i + 1 for _, i in counts_inds][:N_RESULTS])
  25.     return result
  26.  
  27.  
  28. #[print(' '.join([str(x) for x in inds])) for inds in search_words(texts, queries)]
  29.  
  30.  
  31. texts = ['i love coffee',
  32.          'coffee with milk and sugar',
  33.          'free tea for everyone']
  34. queries = ['i like black coffee without milk',
  35.            'everyone loves new year',
  36.            'mary likes black coffee without milk']
  37. result = [[1, 2], [3], [2, 1]]
  38. assert(search_words(texts, queries) == result)
  39.  
  40. texts = ['buy flat in moscow',
  41.          'rent flat in moscow',
  42.          'sell flat in moscow',
  43.          'want flat in moscow like crazy',
  44.          'clean flat in moscow on weekends',
  45.          'renovate flat in moscow']
  46. queries = ['flat in moscow for crazy weekends']
  47. result = [[4, 5, 1, 2, 3]]
  48. assert(search_words(texts, queries) == result)
Add Comment
Please, Sign In to add comment