Как читать и обрабатывать несколько текстовых файлов в Python? - PullRequest
0 голосов
/ 14 апреля 2020

У сценария python 3.6, работающего на Ubuntu 18.04, для обработки одного текстового файла с помощью резака и преобразователя Барта, но возникает проблема '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()

1 Ответ

0 голосов
/ 15 апреля 2020

Работает сейчас с небольшим изменением кода. Как указано выше et c.

bart.eval()

path = 'output/*.txt'

corpus = glob.glob(path)
for name in corpus:
        with open(name) as f:
            lines = f.readlines()
            lines = [line.replace("\n", "") for line in lines]

et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...