Наименьшие общие гиперонимы, общие для набора слов
Учитывая набор из 10 слов (["собака", "кошка", "кролик" .... ]), я хотел бы найти самый низкий общий гипероним, если он существует.
Я знаю, что WordNet позволяет вам найти один из двух наборов синтаксиса, но что было бы хорошим способом найти его среди нескольких слов?
Моя проблема возникает из-за того, что каждое слово имеет набор системных сетей, в которых каждый член этого набора может иметь свой гипероним, и каждый гипероним имеет набор синсетов и так далее. Таким образом, наивный алгоритм в конечном итоге проделал бы много итераций.
1 ответ
Для двух слов (синсетов) в WordNet найдите их наименьший общий гипероним (LCH). Затем найдите LCH этого гиперонима и следующего слова. Повторяйте, пока не произнесете все слова. В коде это может выглядеть так:
syns = [...] # list of synsets
lch = syns[0]
for word in syns[1:]:
lch = find_lch(lch, word)
Вам нужно будет сделать N итераций, где N - размер вашего списка, но этого нет.