#python #nlp #wordnet #synset #hypernym
#python #nlp #wordnet #synset #гиперним
Вопрос:
Учитывая набор из 10 слов ([«собака», «кошка», «кролик» …. ]), я хотел бы найти наименьший общий гиперним, если он есть.
Я знаю, что WordNet позволяет вам находить один из двух наборов, но какой был бы хороший способ найти его среди нескольких слов?
Моя проблема связана с тем фактом, что каждое слово имеет набор системных сетей, в которых каждый член этого набора может иметь свой гиперним, а каждый гиперним имеет набор синтаксических наборов и так далее. Таким образом, наивный алгоритм в конечном итоге выполнит много итераций.
Ответ №1:
Учитывая два слова (synsets) в WordNet, найдите их наименьший общий гиперним (LCH). Затем найдите LCH этого гипернима и следующего слова. Повторяйте, пока не закончите все слова. В коде это может выглядеть так:
syns = [...] # list of synsets
lch = syns[0]
for word in syns[1:]:
lch = find_lch(lch, word)
Вам придется выполнить N итераций, где N — размер вашего списка, но обойти это невозможно.