питон просит изменить sent.words, т.к. не может найти имя, но всё написано правильно

я разрабатываю граф знаний по текстовым данным. вроде весь код правиильный, но всё равно выдаёт вот такую ошибку

for word in sent.words: ^^^^ NameError: name 'sent' is not defined. Did you mean: 'ent'?

Сам код:

import pip
pip.main(["install", "openpyxl"])
import pandas as pd
from tqdm import tqdm
import stanza
from nltk.tokenize import word_tokenize, sent_tokenize

df = pd.read_excel('fill_info.xlsx')
df_ml = df[df["CATEGORY"]=="Machine Learning"]

full_corpus = df_ml["TEXT"].values
sentences = [sent for corp in full_corpus for sent in sent_tokenize(corp, language="russian")]
long_sents = [i for i in sentences if len(i) > 30]

nlp = stanza.Pipeline(lang='ru', processors='tokenize,pos,lemma,ner,depparse')

triplets = []
for s in tqdm(long_sents):
    doc = nlp(s)
    for sent in doc.sentences:
            entities = [ent.text for ent in sent.ents]

res_d = dict()
temp_d = dict()
for word in sent.words: #вот здесь выдаёт ошибку
    temp_d[word.text] = {"head": sent.words[word.head-1].text, "dep": word.deprel, "id": word.id}

{'Андрей': {'head': 'имел', 'depperase': 'nsubj'}}

for k in temp_d.keys():
    nmod_1 = ""
    nmod_2 = ""
    if (temp_d[k]["dep"] in ["nsubj", "nsubj:pass"]) & (k in entities):
        res_d[k] = {"head": temp_d[k]["head"]}

for k_0 in temp_d.keys():
    if (temp_d[k_0]["dep"] in ["obj", "obl"]) &\
       (temp_d[k_0]["head"] == res_d[k]["head"]) &\
        (temp_d[k_0]["id"] > temp_d[res_d[k]["head"]]["id"]):
        res_d[k]["obj"] = k_0
        break

{"Андрей": {'head': имел, 'obj': "известность"}}

for k_1 in temp_d.keys():
    if (temp_d[k_1]["head"] == res_d[k]["head"]) & (k_1 == "не"):
        res_d[k]["head"] = "не "+res_d[k]["head"]

Подскажите, что не так?


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

Автор решения: CrazyElf
triplets = []
for s in tqdm(long_sents):
    doc = nlp(s)
    for sent in doc.sentences:
            entities = [ent.text for ent in sent.ents]

res_d = dict()
temp_d = dict()
for word in sent.words: #вот здесь выдаёт ошибку
    temp_d[word.text] = {"head": sent.words[word.head-1].text, "dep": word.deprel, "id": word.id}
...

Этот код (и весь последующий) нужно подвинуть таким образом:

triplets = []
for s in tqdm(long_sents):
    doc = nlp(s)
    for sent in doc.sentences:
        entities = [ent.text for ent in sent.ents]

        res_d = dict()
        temp_d = dict()
        for word in sent.words: #вот здесь выдаёт ошибку
            temp_d[word.text] = {"head": sent.words[word.head-1].text, "dep": word.deprel, "id": word.id}
        ...
→ Ссылка