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)
|
|||
|
|