Bakalarska_praca/typos_create.py

62 lines
2.6 KiB
Python
Raw Permalink Normal View History

2024-11-10 11:40:38 +00:00
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)