Проблема с методом "Span.as_do c ()" в Spacy - PullRequest
1 голос
/ 08 апреля 2020

Я работаю над извлечением дательного и прямого объекта с помощью Spacy. Существительные уже имеют теги зависимостей для своих корней, таких как dative и dobj, и я пытаюсь получить Span и сохранить его как Do c, чтобы применить дальнейший анализ.

У меня есть следующий код:

import spacy
nlp = spacy.load("en_core_web_lg")
doc = nlp(open("/-textfile").read())

пока все хорошо, затем я получил объекты Span;

datives = []

for dat in doc.noun_chunks:
    if dat.root.dep_ == "dative" and dat.root.head.pos_ == "VERB":
            dative.append(dat.sent)

Теперь у меня есть все предложения с noun.chunks, корни которых являются дативными, а голова - VERB

Однако я хотел бы получить token данные, подобные datives []

dativesent = datives.as_doc()

Но проблема в том, что datives [] уже список, я не могу преобразовать его в DOC.

Как я могу сохранить предложения с dative-noun.chunks как DOC?

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете перебрать предложение (которое является Span), как Doc, чтобы получить доступ к токенам:

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("She gave the dog a bone. He read a book. They gave her a book.")

dative_sents = []
for nc in doc.noun_chunks:
    if nc.root.dep_ == "dative" and nc.root.head.pos_ == "VERB":
        dative_sents.append(nc.sent)

for dative_sent in dative_sents:
    print("Sentence with dative:", dative_sent.text)
    for token in dative_sent:
        print(token.text, token.pos_, token.dep_)
    print()

Вывод:

Sentence with dative: She gave the dog a bone.
She PRON nsubj
gave VERB ROOT
the DET det
dog NOUN dative
a DET det
bone NOUN dobj
. PUNCT punct

Sentence with dative: They gave her a book.
They PRON nsubj
gave VERB ROOT
her PRON dative
a DET det
book NOUN dobj
. PUNCT punct
...