У меня следующая проблема.
Я получаю 1-10 тегов, связанных с изображением, каждый из которых имеет вероятность существования на изображении.
входы: пляж, женщина, собака, дерево ...
Я хотел бы получить из базы данных уже составленное предложение, которое больше всего связано с тегами.
например:
пляж -> "развлечения на пляже " / "отдых на пляже " ....
пляж, женщина -> " женщина на пляже "
пляж, женщина, собака -> ничего не найдено!
взять самое близкое существующее, но рассмотреть вероятность
скажем так: женщина 0,95, пляж 0,85, собака 0,7
поэтому, если существует, возьмите женщину + пляж (0,95, 0,85), то женщину + собаку и последний пляж + собаку, порядок выше, чем лучше, но мы не суммируем.
Я думал об использовании python sets , но я не совсем уверен, как.
Другой вариант будет defaultdict:
db ['beach'] ['woman'] ['dog'], но я хочу получить тот же результат и из:
дб [ 'женщина'] [ 'beeach'] [ 'собака']
Я бы хотел получить хорошее решение.
Спасибо.
РЕДАКТИРОВАТЬ: Рабочий раствор
from collections import OrderedDict
list_of_keys = []
sentences = OrderedDict()
sentences[('dogs',)] = ['I like dogs','dogs are man best friends!']
sentences[('dogs', 'beach')] = ['the dog is at the beach']
sentences[('woman', 'cafe')] = ['The woman sat at the cafe.']
sentences[('woman', 'beach')] = ['The woman was at the beach']
sentences[('dress',)] = ['hi nice dress', 'what a nice dress !']
def keys_to_list_of_sets(dict_):
list_of_keys = []
for key in dict_:
list_of_keys.append(set(key))
return list_of_keys
def match_best_sentence(image_tags):
for i, tags in enumerate(list_of_keys):
if (tags & image_tags) == tags:
print(list(sentences.keys())[i])
list_of_keys = keys_to_list_of_sets(sentences)
tags = set(['beach', 'dogs', 'woman'])
match_best_sentence(tags)
Результаты:
('dogs',)
('dogs', 'beach')
('woman', 'beach')
Это решение работает со всеми ключами упорядоченного словаря,
o (n), я хотел бы видеть улучшение производительности.