Как извлечь глагольные фразы из дерева разбора Stanford NLTK - PullRequest
1 голос
/ 28 марта 2019

Я использую синтаксический анализатор Стэнфорда, чтобы сгенерировать дерево разбора предложения, такого как это:

(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())

Как, по вашему мнению, лучше всего получить окончательную глагольную фразу или даже просто список глагольных фраз из этого предложения?

...