62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
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)
|
||
|