Python Chatterbot Errno 22

Я пытаюсь обучить чат-бота, и большая часть данных находится в текстовых файлах.

Я тяну:

Matt said you have a "shit load" of dining dollars. I have almost none so if you're willing to sell, I'm willing to buy.

из текстового файла, но когда корпус чат-ботов пытается обучить бота, он читает приведенное выше как:

'Matt said you have a "shit load" of dining dollars\\ I have almost none so if you\'re willing to sell, I\'m willing to buy\\\n'

Как я могу это исправить?

Это мой код:

def train_from_text():
    #chatbot.set_trainer(ListTrainer)
    directory = basedir + "Text Trainers"
    files = find_files_in_directory(directory)
    for file in files:
        conversation = []
        file_name = directory+"/"+file
        with open(file_name, 'r') as to_read:
            for line in to_read:
                conversation.append(line)
        chatbot.train(conversation)

Извините за ругательство, это данные, которые мне дали.

Изменить: Полная ошибка

Traceback (most recent call last):
  File "E:/Jason Chatterbot/Jason Chat.py", line 102, in <module>
control()
  File "E:/Jason Chatterbot/Jason Chat.py", line 96, in control
train_from_text()
  File "E:/Jason Chatterbot/Jason Chat.py", line 58, in train_from_text
chatbot.train(conversation)
  File "C:\Python27\lib\site-packages\chatterbot\trainers.py", line 119, in train
corpora = self.corpus.load_corpus(corpus_path)
  File "C:\Python27\lib\site-packages\chatterbot_corpus\corpus.py", line 98, in load_corpus
corpus_data = self.read_corpus(file_path)
  File "C:\Python27\lib\site-packages\chatterbot_corpus\corpus.py", line 63, in read_corpus
with io.open(file_name, encoding='utf-8') as data_file:
IOError: [Errno 22] Invalid argument: 'Matt said you have a "shit load" of dining dollars\\ I have almost none so if you\'re willing to sell, I\'m willing to buy\\\r\n'

person TobyTobyo    schedule 28.11.2017    source источник
comment
Вы хотите избавиться от всех /?   -  person Tatsuya Yokota    schedule 28.11.2017


Ответы (1)


Не глядя на большее подмножество данных, кажется, что он заменяет одинарные кавычки (') экранированными одинарными кавычками (\'), фактическими символами новой строки, экранированными символами новой строки (\n) и точками с двойной обратной косой чертой (\)

Простая замена строки может исправить это для вас, в зависимости от того, насколько сильно данные искажаются. Попробуйте изменить

conversation.append(line)

to

conversation.append(line.replace("\\'","'").replace('\\\\','.').replace("\\n","\n"))

По сути, мы пытаемся отменить те замены, которые производятся автоматически.

person rickjerrity    schedule 28.11.2017
comment
Я все еще получаю ту же ошибку (вставлено выше, слишком долго для комментариев) - person TobyTobyo; 28.11.2017
comment
Хорошо, похоже, что эта строка каким-то образом читается из файла, и где-то в вашей программе она фактически пытается открыть эту строку как файл. Неверный аргумент в io.open. Я бы добавил оператор печати перед тем, как вы откроете файл, и после того, как вы откроете файл, отображающий, что такое имя_файла, потому что это, похоже, связано с этим - person rickjerrity; 28.11.2017
comment
Вот где я получил «Мэтт сказал, что у тебя есть дерьмовая куча обеденных долларов\\, у меня их почти нет, так что, если ты хочешь продать, я готов купить\\\n». Я везде добавлял операторы печати, и, похоже, это ошибка, возникающая из-за самой функции listtrainer библиотеки chatterbot, но я не могу понять, откуда именно она возникает. Попытка исправления на каждом этапе также не решает проблему, я все еще получаю эту прекрасную ошибку. - person TobyTobyo; 28.11.2017
comment
Да, если это ошибка с библиотекой, это более сложная проблема. Мое последнее предложение будет заключаться в том, что это может быть связано с двойными кавычками в строке. Возможно, попробуйте удалить двойные кавычки из строки и посмотрите, появляется ли та же ошибка. Если это что-то изменит, у нас есть путь вперед. - person rickjerrity; 28.11.2017
comment
Они обновили библиотеку, поэтому этот метод больше не работает. Спасибо за ваше время: D - person TobyTobyo; 28.11.2017