ShynBui's picture
update character_replacement methods
7676e0a
raw
history blame
5.35 kB
import pandas as pd
import numpy as np
import random
def character_replacement(text, num_errors=1):
'''
:param text: Gồm 1 câu đúng chính tả
:param num_errors: số lượng lỗi sai muốn thêm
:return: Gồm 1 câu sai chính tả
Bàn phím QWERTY tiếng Việt:
Tạo một từ điển (keyboard) chứa các ký tự và các ký tự gần đó trên bàn phím. Ví dụ, ký tự 'a' có thể được thay thế bằng 'â', 'ă', 'á',...
Chuyển đổi văn bản thành danh sách ký tự:
Sử dụng list(text) để chuyển chuỗi văn bản thành danh sách các ký tự riêng lẻ. Điều này giúp dễ dàng thay thế từng ký tự.
Chọn ngẫu nhiên các vị trí để thay thế ký tự:
Sử dụng random.sample để chọn ngẫu nhiên num_errors vị trí trong văn bản. Điều này giúp tạo ra các lỗi chính tả ngẫu nhiên và đa dạng.
Thực hiện thay thế ký tự:
Với mỗi vị trí đã chọn, kiểm tra nếu ký tự đó có trong từ điển keyboard. Nếu có, chọn ngẫu nhiên một ký tự từ các ký tự gần đó trên bàn phím.
Giữ nguyên kiểu chữ hoa hoặc chữ thường của ký tự gốc.
Ghép lại thành chuỗi văn bản:
Sử dụng ''.join(text) để ghép danh sách các ký tự lại thành chuỗi văn bản hoàn chỉnh.
'''
# Bàn phím QWERTY tiếng Việt
keyboard = {
'a': 'âăáàạảãấầậẩẫắằặẳẵ',
'â': 'aăáàạảãấầậẩẫắằặẳẵ',
'ă': 'aâáàạảãấầậẩẫắằặẳẵ',
'á': 'aâăàạảãấầậẩẫắằặẳẵ',
'à': 'aâăáạảãấầậẩẫắằặẳẵ',
'ạ': 'aâăáàảãấầậẩẫắằặẳẵ',
'ả': 'aâăáàạãấầậẩẫắằặẳẵ',
'ã': 'aâăáàạảấầậẩẫắằặẳẵ',
'â': 'aăáàạảãấầậẩẫắằặẳẵ',
'b': 'v',
'c': 'x',
'd': 'đ',
'đ': 'd',
'e': 'êéèẹẻẽếềệểễ',
'ê': 'eéèẹẻẽếềệểễ',
'é': 'eêèẹẻẽếềệểễ',
'è': 'eêéẹẻẽếềệểễ',
'ẹ': 'eêéèẻẽếềệểễ',
'ẻ': 'eêéèẹẽếềệểễ',
'ẽ': 'eêéèẹẻếềệểễ',
'ế': 'eêéèẹẻẽềệểễ',
'ề': 'eêéèẹẻẽếệểễ',
'ệ': 'eêéèẹẻẽếềểễ',
'ể': 'eêéèẹẻẽếềệễ',
'ễ': 'eêéèẹẻẽếềệ',
'f': 'r',
'g': 'h',
'h': 'g',
'i': 'ìíỉĩị',
'í': 'iìỉĩị',
'ì': 'iíỉĩị',
'ỉ': 'iíìĩị',
'ĩ': 'iíìỉị',
'ị': 'iíìỉĩ',
'k': 'l',
'l': 'k;',
'm': 'n',
'n': 'm',
'o': 'ôơóòọỏõốồộổỗớờợởỡ',
'ô': 'oơóòọỏõốồộổỗớờợởỡ',
'ơ': 'oôóòọỏõốồộổỗớờợởỡ',
'ó': 'oôơòọỏõốồộổỗớờợởỡ',
'ò': 'oôơóọỏõốồộổỗớờợởỡ',
'ọ': 'oôơóòỏõốồộổỗớờợởỡ',
'ỏ': 'oôơóòọõốồộổỗớờợởỡ',
'õ': 'oôơóòọỏốồộổỗớờợởỡ',
'ố': 'oôơóòọỏõồộổỗớờợởỡ',
'ồ': 'oôơóòọỏõốộổỗớờợởỡ',
'ộ': 'oôơóòọỏõốồổỗớờợởỡ',
'ổ': 'oôơóòọỏõốồộỗớờợởỡ',
'ỗ': 'oôơóòọỏõốồộổớờợởỡ',
'ớ': 'oôơóòọỏõốồộổỗờợởỡ',
'ờ': 'oôơóòọỏõốồộổỗớờợởỡ',
'ợ': 'oôơóòọỏõốồộổỗớờợởỡ',
'ở': 'oôơóòọỏõốồộổỗớờợỡ',
'ỡ': 'oôơóòọỏõốồộổỗớờợở',
'p': 'q',
'q': 'p',
'r': 'f',
's': 'd',
't': 'y',
'u': 'ưúùụủũứừựửữ',
'ư': 'uúùụủũứừựửữ',
'ú': 'uưùụủũứừựửữ',
'ù': 'uưúụủũứừựửữ',
'ụ': 'uưúùủũứừựửữ',
'ủ': 'uưúùụũứừựửữ',
'ũ': 'uưúùụủứừựửữ',
'ứ': 'uưúùụủũừựửữ',
'ừ': 'uưúùụủũứựửữ',
'ự': 'uưúùụủũứừửữ',
'ử': 'uưúùụủũứừựữ',
'ữ': 'uưúùụủũứừựử',
'v': 'b',
'x': 'c',
'y': 't',
'z': 's'
}
text = list(text)
print(text)
indices = random.sample(range(len(text)), num_errors)
print(indices)
for index in indices:
if text[index].lower() in keyboard:
replacement_char = random.choice(keyboard[text[index].lower()])
if text[index].isupper():
replacement_char = replacement_char.upper()
text[index] = replacement_char
final_text = ''.join(text)
print(final_text)
return final_text