Как определить или извлечь сложные словосочетания, в состав которых входят глагольные фразы, с помощью SpaCy? - PullRequest
0 голосов
/ 03 апреля 2019

Я знаю о noun_chunks, который встроен в SpaCy. Однако это не совсем подходит для позиции, в которой я оказался.
Для примера -

Skynet will be decommissioned soon.   

Это очень простое предложение, где noun_chunks будет выводить Skynet .
Теперь давайте заменим Skynet на сложную сложную именную фразу (из-за отсутствия названия, чтобы описать, что мне нужно) следующим образом -

The machine that kills life will be decommissioned soon.  

Так вот Skynet -> The machine that kills life
Однако noun_chunks будет идентифицировать The machine и life как фразы с существительными, что правильно, но мне нужно что-то извлечь The machine that kills life как одну сложную словосочетание.

Использование анализа зависимостей может помочь, но я не совсем уверен, как это сделать. Любая прямая помощь или рекомендация прочитать о том, как использовать анализ зависимостей (что более важно - построение и грамматические отношения на английском языке), чтобы я мог решить эту проблему самостоятельно, была бы очень признательна.

1 Ответ

0 голосов
/ 05 апреля 2019

На данный момент я доволен поиском поддерева nsubjpass корня . Чтобы разобраться с большим количеством дел, мне, возможно, придется поискать варианты, отличные от nsubjpass, но мне еще предстоит выяснить их.

Использование онлайн-визуализатора зависимостей помогло мне понять это в определенной степени.
Код, который дает мне сложную именную фразу -

import spacy
nlp = spacy.load('en_core_web_sm')

simple_np = "Skynet will be decommissioned soon."

complex_np = "The machine that kills life will be decommissioned soon."

doc = nlp(complex_np)

for sent in doc.sents:
    print(sent.root)
    for child in sent.root.children:
        if child.dep_ == 'nsubjpass':
            print(list(child.subtree))
...