import random def introduce_typo(word): """Функция вносит случайную опечатку в слово""" if len(word) < 2: return word # Если слово слишком короткое, не изменяем его typo_type = random.choice(["swap", "delete", "insert", "replace"]) if typo_type == "swap" and len(word) > 2: # Меняем местами два случайных соседних символа idx = random.randint(0, len(word) - 2) word = word[:idx] + word[idx+1] + word[idx] + word[idx+2:] elif typo_type == "delete": # Удаляем случайный символ idx = random.randint(0, len(word) - 1) word = word[:idx] + word[idx+1:] elif typo_type == "insert": # Вставляем случайный символ idx = random.randint(0, len(word)) random_char = chr(random.randint(97, 122)) # случайная буква от 'a' до 'z' word = word[:idx] + random_char + word[idx:] elif typo_type == "replace": # Заменяем случайный символ на другой idx = random.randint(0, len(word) - 1) random_char = chr(random.randint(97, 122)) word = word[:idx] + random_char + word[idx+1:] return word def create_typos_in_line(line): """Вносит опечатки в каждое слово в строке, сохраняя структуру""" words = line.split() words_with_typos = [ introduce_typo(word) if random.random() < 0.2 else word for word in words ] return ' '.join(words_with_typos) def create_typos_in_file(input_file, output_file): """Читает файл построчно, создаёт опечатки в словах, сохраняя структуру строк""" with open(input_file, 'r', encoding='utf-8') as f: lines = f.readlines() with open(output_file, 'w', encoding='utf-8') as f: for line in lines: # Сохраняем отступы и пустые строки if line.strip(): # если строка не пустая typo_line = create_typos_in_line(line) f.write(typo_line + "\n") else: f.write(line) # Пример использования input_file = 'cleaned_book.txt' # Укажите путь к исходному файлу output_file = 'cleaned_book_typos.txt' # Укажите путь для сохранения файла с опечатками create_typos_in_file(input_file, output_file)