Я использую синтаксический анализатор Стэнфорда, чтобы сгенерировать дерево разбора предложения, такого как это:
(ROOT
(SBARQ
(WHADVP (WRB how))
(SQ
(VBP do)
(NP (FW i))
(VP
(VB add)
(NP (DT a) (NN link))
(PP (TO to) (NP (PRP$ my) (NNS links)))))))
Я хочу извлечь последнюю фразу глагола, поэтому "добавьте ссылку на мои ссылки", в этом случае.
Сначала я предположил, что не существует доступного метода для извлечения всех фраз глагола, поэтому я попытался с помощью pyparsing превратить дерево во вложенный список.Я закончил с
[['ROOT', ['SBARQ', ['WHADVP', ['WRB', 'how']], ['SQ', ['VBP', 'do'], ['NP', ['FW', 'i']], ['VP', ['VB', 'add'], ['NP', ['DT', 'a'], ['NN', 'link']], ['PP', ['TO', 'to'], ['NP', ['PRP$', 'my'], ['NNS', 'links']]]]]]]]
, из которого я мог попытаться извлечь
['VP', ['VB', 'add'], ['NP', ['DT', 'a'], ['NN', 'link']], ['PP', ['TO', 'to'], ['NP', ['PRP$', 'my'], ['NNS', 'links']]]
, но все же, я не уверен, какискать во вложенном списке, чтобы найти VP.Мне было интересно, есть ли в коде синтаксического анализатора Стэнфорда метод, который возвращает фразы определенного типа.
Я получаю дерево разбора, например:
import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = '/home/rwitn/stanford-parser'
os.environ['STANFORD_MODELS'] = '/home/rwitn/stanford-parser'
parser = stanford.StanfordParser(model_path="/home/rwitn/stanford-parser/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(firstQuestionsDF['chat_firstQuestion'])
#print(sentences)
# GUI
counter = 0
for line in sentences:
for sentence in line:
firstQuestionsDF.loc[counter]['parseTree'] = str(sentence)
counter += 1
#sentence.draw()
print(sentence)
, и яполучить вложенный список следующим образом:
from pyparsing import *
text = firstQuestionsDF.loc[2]['parseTree']
nestedExample = nestedExpr(opener='(', closer=')').parseString(text)
print(nestedExample.asList())
Как, по вашему мнению, лучше всего получить окончательную глагольную фразу или даже просто список глагольных фраз из этого предложения?