具有在ubuntu 18.04上运行的python 3.6脚本,可通过手电筒和Bart转换器处理单个文本文件,但在尝试从文件夹读取和处理多个文本文件时遇到“ NameError”问题。 python的新手。
请注意,如果使用以下代码段而不导入glob和os,则脚本可以在单个文件上完美运行:
with open('output/input.txt') as corpus:
lines = corpus.readlines()
lines = [line.replace("\n", "") for line in lines]
NameError是由下面的“ generate_xsum_READ_FILES.py”引起的。不知道为什么会发生这种情况,因为它已经在def main()下定义了:并且可以使用单个文本文件。
Traceback (most recent call last):
File "generate_xsum_READ_FILES.py", line 29, in <module>
preds = bart.sample(lines, beam=4, lenpen=2.0, no_repeat_ngram_size=2, temperature=0.9)
NameError: name 'bart' is not defined
generate_xsum_READ_FILES.py
非常感谢您的帮助,因此我可以在以后的脚本中避免此错误。干杯。
import glob
import os
import torch
from fairseq.models.bart import BARTModel
def main():
bart = BARTModel.from_pretrained('bart_large_xsum', checkpoint_file='model.pt')
bart.cuda()
bart.half()
bart.eval()
file_list = glob.glob(os.path.join(os.getcwd(), "output", "*.txt"))
corpus = []
for file_path in file_list:
with open(file_path) as corpus:
lines = corpus.readlines()
lines = [line.replace("\n", "") for line in lines]
print("[Before]")
for i, line in enumerate(lines):
print(f"({i+1}): {line}")
with torch.no_grad():
preds = bart.sample(lines, beam=4, lenpen=2.0, no_repeat_ngram_size=2, temperature=0.9)
print("\n[After]")
for i, pred in enumerate(preds):
print(f"({i+1}): {pred}")
if __name__ == "__main__":
main()
您的bart
在main
功能的范围内定义。而其余代码在外面(通过缩进)。我想这是因为缩进错误。
import glob
import os
import torch
from fairseq.models.bart import BARTModel
def main():
bart = BARTModel.from_pretrained('bart_large_xsum', checkpoint_file='model.pt')
bart.cuda()
bart.half()
bart.eval()
file_list = glob.glob(os.path.join(os.getcwd(), "output", "*.txt"))
corpus = []
for file_path in file_list:
with open(file_path) as corpus:
lines = corpus.readlines()
lines = [line.replace("\n", "") for line in lines]
print("[Before]")
for i, line in enumerate(lines):
print(f"({i + 1}): {line}")
with torch.no_grad():
preds = bart.sample(lines, beam=4, lenpen=2.0, no_repeat_ngram_size=2, temperature=0.9)
print("\n[After]")
for i, pred in enumerate(preds):
print(f"({i + 1}): {pred}")