питон просит изменить 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}
...