python - 文本文件中的行不会遍历 for 循环 Python
问题描述
我正在尝试遍历 .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
这是输出:
> 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"))
推荐阅读
- c++ - Qt 中的 rt_SATURATE 宏定义
- php - Symfony 2:动作方法的调用者是谁?
- winapi - 在非主线程上打开 WinAPI 窗口
- flutter - Flutter Data Letter Chancing
- java - 如何使用请求参数创建成功的 GET API?
- android - 用于编辑文本的评论部分(如 instagram)
- date - 显示另一个目录中文件的修改日期?
- c++ - 我在字符数组中输入了一个单词并想找出该单词的长度
- spi - STM32F407 SPI读取LIS3DSH的数据
- c# - C# WebBrowser如何减少内存占用/如何解决WebBrowser的内存泄漏?