Что было бы хорошей стратегией, чтобы найти глагол, соединяющий два существительных в дереве разбора, если он существует? Например, в этом предложении:Как получить глагол, соединяющий два существительных в дереве разбора Apache OpenNLP?
Мужчина позвонил своей жене, прежде чем вернуться домой.
Учитывая входные данные «человек» и «жена», я хотел бы получить глагол «called». OpenNLP дает мне дерево разбора:
(TOP (S (NP (Д.Т.) (NN человек)) (VP (ВБД называется) (NP (PRP $ его) (NN жена)) (PP (IN перед) (S (VP (VBG)) (ADVP (RB back)))))) (. Home.)))
Так что, я думаю, это, по крайней мере, частично вопрос навигации по дереву. Может быть, сначала изолировать все глаголы, а затем проверить, рекурсив вниз, до тех пор, пока не будут найдены оба существительных?
Или попытаться найти кратчайший путь от одного существительного до другого и сохранить глагол в пути?
Моя проблема в том, что я недостаточно разбираюсь в структуре дерева разбора, чтобы разработать хорошую стратегию. Или я должен использовать какой-нибудь другой инструмент (Java)?
Спасибо!
Что вы говорите правильно, я заметил, что деревья разбора иногда ошибочны или действительно сложны. Извлечение связей, вероятно, правильный путь, поэтому я попробую MaltParser. Я смотрел на него раньше, так как мне нужна библиотека, а не отдельное программное обеспечение. Спасибо, что указал мне в этом направлении. – Solipsy
@ Солиспийцы Добро пожаловать! Однако вы можете использовать ReVerb в качестве библиотеки. Я использую его сейчас в проекте Java, и вам просто нужно установить его в файл pom (если вы используете Maven). Он напрямую интегрирует функции OpenNLP. – 5agado