Python. Извлечь «тройки» дата – глагол – персона (упомянутые в одном предложении)

Входные данные:

Петр I родился 30 мая 1672 года. В детстве он получил домашнее образование, с юных лет знал немецкий язык, затем изучал голландский, английский и французский языки. С помощью дворцовых мастеров освоил много ремесел...

Выходные данные: ['Петр', 'родился'] [Match(start=15, stop=31, fact=Date(year=1672, month=5, day=30))] ['он', 'получил', 'знал'] [] ['освоил'] []

UPD: Разбил по root и nsubj,также добавил даты, но теперь встает вопрос, как сделать так, чтобы выводило только root+nsubj+дата

!pip install natasha
# подключаем библиотеку
from natasha import (
Segmenter,
MorphVocab,

NewsEmbedding,
NewsMorphTagger,
NewsSyntaxParser,
NewsNERTagger,

PER,
LOC,

NamesExtractor,
MoneyExtractor,
AddrExtractor,
DatesExtractor,

Doc
)

segmenter = Segmenter()
morph_vocab = MorphVocab()

emb = NewsEmbedding()
morph_tagger = NewsMorphTagger(emb)
syntax_parser = NewsSyntaxParser(emb)
ner_tagger = NewsNERTagger(emb)

names_extractor = NamesExtractor(morph_vocab)
dates_extractor = DatesExtractor(morph_vocab)
money_extractor = MoneyExtractor(morph_vocab)
addr_extractor = AddrExtractor(morph_vocab)

text = '''Петр I родился 30 мая 1672 года. 
В детстве он получил домашнее образование, с юных лет знал немецкий язык, затем изучал голландский, английский и французский языки. 
С помощью дворцовых мастеров освоил много ремесел...'''

doc = Doc(text)
doc.segment(segmenter)
doc.tag_morph(morph_tagger)
doc.parse_syntax(syntax_parser)
doc.parse_syntax(syntax_parser)
doc.tag_ner(ner_tagger)

morph_vocab = MorphVocab()
dates_extractor = DatesExtractor(morph_vocab)
for i in range (len(doc.sents)):
  new_numbers = []
  for j in range (len(doc.sents[i].tokens)):
    doc.sents[i].tokens[j].lemmatize(morph_vocab)
    list(dates_extractor(doc.sents[i].text))
    if ((doc.sents[i].tokens[j].rel == 'root') or (doc.sents[i].tokens[j].rel == 'nsubj')):
      new_numbers.append(doc.sents[i].tokens[j].text)
  print(new_numbers,list(dates_extractor(doc.sents[i].text)))

Ответы (0 шт):