Наименьшие общие гипернимы, общие для набора слов

#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 — размер вашего списка, но обойти это невозможно.