Какой была бы хорошая стратегия, чтобы найти глагол, соединяющий два существительных в дереве синтаксического анализа, если предположить, что он существует? Например, в этом предложении:
Перед возвращением домой мужчина позвонил жене.
Учитывая входные данные «мужчина» и «жена», я хотел бы получить глагол «позвонить». OpenNLP дает мне дерево разбора:
(TOP (S (NP (DT The) (NN man)) (VP (VBD называется) (NP (PRP$ его) (NN жена)) (PP (IN перед) (S (VP (VBG идет) (ADVP ( РБ назад)))))(.домой.)))
Так что я думаю, что это, по крайней мере, частично вопрос навигации по дереву. Может быть, сначала изолировать все глаголы, а затем проверить их рекурсией вниз, пока в конце концов не будут найдены оба существительных?
Или попытаться найти кратчайший путь от одного существительного к другому и сохранить по пути глагол?
Моя проблема в том, что я недостаточно знаю структуру дерева синтаксического анализа, чтобы разработать хорошую стратегию. Или мне, возможно, следует использовать какой-то другой инструмент (Java)?
Спасибо!