Ответ
@ rylan-feldspar, как правило, является правильным и сработает, но вы можете сделать это немного более компактно, используя стандартные библиотеки / идиомы Python, особенно itertools
, функции обработки списка и сортировки.
Например, сначала используйте combinations()
из itertools
, чтобы сгенерировать все пары ваших слов-кандидатов:
from itertools import combinations
candidate_words = ['architect', 'nurse', 'surgeon', 'grandmother', 'dad']
all_pairs = combinations(candidate_words, 2)
Затем украсьте пары с их попарным сходством:
scored_pairs = [(w2v_model.wv.similarity(p[0], p[1]), p)
for p in all_pairs]
Наконец, сортируйте, чтобы поставить сначала наиболее похожую пару, и сообщите, что оценка и пара:
sorted_pairs = sorted(scored_pairs, reverse=True)
print(sorted_pairs[0]) # first item is most-similar pair
Если вы хотите быть компактным, но немного менее читабельным, это может быть (long) "1-liner":
print(sorted([(w2v_model.wv.similarity(p[0], p[1]), p)
for p in combinations(candidate_words, 2)
], reverse=True)[0])
Обновление:
Интеграция предложения @ ryan-feldspar о max()
и минимальность, это также должноработа, чтобы сообщить лучшую пару (но не ее счет):
print(max(combinations(candidate_words, 2),
key=lambda p:w2v_model.wv.similarity(p[0], p[1])))