[英]Lines in text file won't iterate through for loop Python
我正在嘗試遍歷 my.txt 文件中的問題和行。 現在這個問題可能已經被問過,但我真的遇到了麻煩。
這就是我現在所擁有的:
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch
max_seq_length = 512
tokenizer = AutoTokenizer.from_pretrained("henryk/bert-base-multilingual-cased-finetuned-dutch-squad2")
model = AutoModelForQuestionAnswering.from_pretrained("henryk/bert-base-multilingual-cased-finetuned-dutch-squad2")
f = open("glad.txt", "r")
questions = [
"Welke soorten gladiatoren waren er?",
"Wat is een provocator?",
"Wat voor helm droeg een retiarius?",
]
for question in questions:
print(f"Question: {question}")
for _ in range(len(question)):
for line in f:
text = str(line.split("."))
inputs = tokenizer.encode_plus(question,
text,
add_special_tokens=True,
max_length=100,
truncation=True,
return_tensors="pt")
input_ids = inputs["input_ids"].tolist()[0]
text_tokens = tokenizer.convert_ids_to_tokens(input_ids)
answer_start_scores, answer_end_scores = model(**inputs, return_dict=False)
answer_start = torch.argmax(
answer_start_scores
) # Get the most likely beginning of answer with the argmax of the score
answer_end = torch.argmax(
answer_end_scores) + 1 # Get the most likely end of answer with the argmax of the score
answer = tokenizer.convert_tokens_to_string(
tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))
print(text)
# if answer == '[CLS]':
# continue
# elif answer == '':
# continue
# else:
# print(f"Answer: {answer}")
# print(f"Answer start: {answer_start}")
# print(f"Answer end: {answer_end}")
# break
這是 output:
> Question: Welke soorten gladiatoren waren er?
> ['Er waren vele soorten gladiatoren, maar het meest kwamen de thraex, de retiarius en de murmillo voor', ' De oudste soorten gladiatoren droegen de naam van een volk: de Samniet en de Galliër', '\n']
> ['Hun uitrusting bestond uit dezelfde wapens als die waarmee de Samnieten en Galliërs in hun oorlogen met de Romeinen gewoonlijk vochten', '\n']
> ['De Thraciër (thraex) verscheen vanaf de tweede eeuw voor Chr', ' Hij had een vrij klein kromzwaard (sica), een klein rond (soms vierkant) schild, een helm en lage beenplaten', " De retiarius ('netvechter') had een groot net (rete) met een doorsnee van 3 m, een drietand en soms ook een dolk", '\n']
> ['Hij had alleen bescherming om zijn linkerarm en -schouder', ' Vaak droeg hij ook een bronzen beschermingsplaat (galerus) van zijn nek tot linkerelleboog', ' Vaak vocht de retiarius tegen de secutor die om die reden ook wel contraretiarius werd genoemd', '\n']
> ['Hij had een langwerpig schild en een steekzwaard', ' Opvallend was zijn eivormige helm zonder rand en met een metalen kam, waarschijnlijk zo ontworpen om minder makkelijk in het net van de retiarius vast te haken', ' Een provocator (‘uitdager’) vocht doorgaans tegen een andere provocator', '\n']
> ['Hij viel zijn tegenstander uit een onverwachte hoek plotseling aan', ' Hij had een lang rechthoekig schild, een borstpantser, een beenplaat alleen over het linkerbeen, een helm en een kort zwaard', '']
> Question: Wat is een provocator?
> Question: Wat voor helm droeg een retiarius?
但是這些句子也應該在其他問題中重復。
有誰知道我在這里做錯了什么? 這可能真的很容易,但我似乎真的沒有找到錯誤。
你的f
只是一個打開的文件,第一次用完。 我想你的意思是:
f = list(open("glad.txt", "r"))
您需要在第一次解析文件后添加f.seek(0)
。 這是因為當您讀取一次文件時,cursor 位於文件末尾,之后for line in f
不再從頭讀取文件。 請在此處參考 Tim 和 Nunser 的回答,它很好地解釋了這一點。
像這樣的東西:
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch
max_seq_length = 512
tokenizer = AutoTokenizer.from_pretrained("henryk/bert-base-multilingual-cased-finetuned-dutch-squad2")
model = AutoModelForQuestionAnswering.from_pretrained("henryk/bert-base-multilingual-cased-finetuned-dutch-squad2")
f = open("glad.txt", "r")
questions = [
"Welke soorten gladiatoren waren er?",
"Wat is een provocator?",
"Wat voor helm droeg een retiarius?",
]
for question in questions:
print(f"Question: {question}")
for _ in range(len(question)):
for line in f:
text = str(line.split("."))
inputs = tokenizer.encode_plus(question,
text,
add_special_tokens=True,
max_length=100,
truncation=True,
return_tensors="pt")
input_ids = inputs["input_ids"].tolist()[0]
text_tokens = tokenizer.convert_ids_to_tokens(input_ids)
answer_start_scores, answer_end_scores = model(**inputs, return_dict=False)
answer_start = torch.argmax(
answer_start_scores
) # Get the most likely beginning of answer with the argmax of the score
answer_end = torch.argmax(
answer_end_scores) + 1 # Get the most likely end of answer with the argmax of the score
answer = tokenizer.convert_tokens_to_string(
tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))
print(text)
f.seek(0) # reset cursor to beginning of the file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.