add C and probabilty for error rate
Browse files- __pycache__/utils.cpython-310.pyc +0 -0
- app.py +2 -2
- utils.py +37 -22
__pycache__/utils.cpython-310.pyc
CHANGED
|
Binary files a/__pycache__/utils.cpython-310.pyc and b/__pycache__/utils.cpython-310.pyc differ
|
|
|
app.py
CHANGED
|
@@ -5,11 +5,11 @@ def final_result(input_text):
|
|
| 5 |
list_text_response = []
|
| 6 |
|
| 7 |
##character_replacement
|
| 8 |
-
input_text_process = character_replacement(input_text,
|
| 9 |
list_text_response.append(input_text_process)
|
| 10 |
|
| 11 |
##character_insertion
|
| 12 |
-
input_text_process = character_insertion(input_text,
|
| 13 |
list_text_response.append(input_text_process)
|
| 14 |
##
|
| 15 |
|
|
|
|
| 5 |
list_text_response = []
|
| 6 |
|
| 7 |
##character_replacement
|
| 8 |
+
input_text_process = character_replacement(input_text, error_rate=0.1)
|
| 9 |
list_text_response.append(input_text_process)
|
| 10 |
|
| 11 |
##character_insertion
|
| 12 |
+
input_text_process = character_insertion(input_text, error_rate=0.01)
|
| 13 |
list_text_response.append(input_text_process)
|
| 14 |
##
|
| 15 |
|
utils.py
CHANGED
|
@@ -2,16 +2,17 @@ import pandas as pd
|
|
| 2 |
import numpy as np
|
| 3 |
|
| 4 |
import random
|
|
|
|
| 5 |
|
| 6 |
-
|
| 7 |
-
def character_replacement(text, num_errors=1):
|
| 8 |
-
|
| 9 |
'''
|
| 10 |
-
|
| 11 |
:param text: Gồm 1 câu đúng chính tả
|
| 12 |
-
:param
|
|
|
|
| 13 |
:return: Gồm 1 câu sai chính tả
|
| 14 |
|
|
|
|
|
|
|
| 15 |
Bàn phím QWERTY tiếng Việt:
|
| 16 |
|
| 17 |
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 'â', 'ă', 'á',...
|
|
@@ -20,7 +21,7 @@ def character_replacement(text, num_errors=1):
|
|
| 20 |
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ự.
|
| 21 |
Chọn ngẫu nhiên các vị trí để thay thế ký tự:
|
| 22 |
|
| 23 |
-
Sử dụng random.sample để chọn ngẫu nhiên
|
| 24 |
Thực hiện thay thế ký tự:
|
| 25 |
|
| 26 |
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.
|
|
@@ -28,9 +29,11 @@ def character_replacement(text, num_errors=1):
|
|
| 28 |
Ghép lại thành chuỗi văn bản:
|
| 29 |
|
| 30 |
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.
|
| 31 |
-
|
| 32 |
'''
|
| 33 |
|
|
|
|
|
|
|
|
|
|
| 34 |
# Bàn phím QWERTY tiếng Việt
|
| 35 |
keyboard = {
|
| 36 |
'a': 'âăáàạảãấầậẩẫắằặẳẵ',
|
|
@@ -83,7 +86,7 @@ def character_replacement(text, num_errors=1):
|
|
| 83 |
'ồ': 'oôơóòọỏõốộổỗớờợởỡ',
|
| 84 |
'ộ': 'oôơóòọỏõốồổỗớờợởỡ',
|
| 85 |
'ổ': 'oôơóòọỏõốồộỗớờợởỡ',
|
| 86 |
-
'ỗ': '
|
| 87 |
'ớ': 'oôơóòọỏõốồộổỗờợởỡ',
|
| 88 |
'ờ': 'oôơóòọỏõốồộổỗớờợởỡ',
|
| 89 |
'ợ': 'oôơóòọỏõốồộổỗớờợởỡ',
|
|
@@ -112,31 +115,36 @@ def character_replacement(text, num_errors=1):
|
|
| 112 |
'z': 's'
|
| 113 |
}
|
| 114 |
|
|
|
|
| 115 |
text = list(text)
|
| 116 |
|
| 117 |
-
|
|
|
|
| 118 |
|
| 119 |
-
|
|
|
|
| 120 |
|
| 121 |
for index in indices:
|
| 122 |
-
if text[index].lower() in keyboard:
|
|
|
|
| 123 |
replacement_char = random.choice(keyboard[text[index].lower()])
|
|
|
|
| 124 |
if text[index].isupper():
|
| 125 |
replacement_char = replacement_char.upper()
|
| 126 |
text[index] = replacement_char
|
| 127 |
|
|
|
|
| 128 |
final_text = ''.join(text)
|
| 129 |
|
| 130 |
return final_text
|
| 131 |
|
| 132 |
|
| 133 |
-
def character_insertion(text,
|
| 134 |
-
|
| 135 |
'''
|
| 136 |
-
|
| 137 |
-
:param
|
| 138 |
-
:param
|
| 139 |
-
:return:
|
| 140 |
|
| 141 |
Bàn phím QWERTY tiếng Việt:
|
| 142 |
|
|
@@ -162,14 +170,21 @@ def character_insertion(text, num_errors=1):
|
|
| 162 |
# Chuyển đổi văn bản thành danh sách ký tự để có thể thêm ký tự
|
| 163 |
text = list(text)
|
| 164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 165 |
# Thực hiện thêm ký tự tại các vị trí ngẫu nhiên
|
| 166 |
for _ in range(num_errors):
|
| 167 |
# Chọn ngẫu nhiên một vị trí trong văn bản để thêm ký tự
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
|
|
|
| 173 |
|
| 174 |
# Ghép các ký tự lại thành chuỗi văn bản
|
| 175 |
return ''.join(text)
|
|
|
|
| 2 |
import numpy as np
|
| 3 |
|
| 4 |
import random
|
| 5 |
+
import math
|
| 6 |
|
| 7 |
+
def character_replacement(text, error_rate=0.03, C=0.01):
|
|
|
|
|
|
|
| 8 |
'''
|
|
|
|
| 9 |
:param text: Gồm 1 câu đúng chính tả
|
| 10 |
+
:param error_rate: tỷ lệ lỗi sai muốn thêm
|
| 11 |
+
:param C: hằng số để tính toán xác suất thay thế ký tự
|
| 12 |
:return: Gồm 1 câu sai chính tả
|
| 13 |
|
| 14 |
+
Kết hợp phương pháp error_rate và augmentation_probability để tạo lỗi chính tả.
|
| 15 |
+
|
| 16 |
Bàn phím QWERTY tiếng Việt:
|
| 17 |
|
| 18 |
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 'â', 'ă', 'á',...
|
|
|
|
| 21 |
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ự.
|
| 22 |
Chọn ngẫu nhiên các vị trí để thay thế ký tự:
|
| 23 |
|
| 24 |
+
Sử dụng random.sample để chọn ngẫu nhiên các vị trí dựa trên tỷ lệ lỗi. Điều này giúp tạo ra các lỗi chính tả ngẫu nhiên và đa dạng.
|
| 25 |
Thực hiện thay thế ký tự:
|
| 26 |
|
| 27 |
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.
|
|
|
|
| 29 |
Ghép lại thành chuỗi văn bản:
|
| 30 |
|
| 31 |
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.
|
|
|
|
| 32 |
'''
|
| 33 |
|
| 34 |
+
# Tính toán xác suất thay thế ký tự dựa trên error_rate sử dụng hàm logarit
|
| 35 |
+
augmentation_probability = C / math.log(error_rate + 1)
|
| 36 |
+
|
| 37 |
# Bàn phím QWERTY tiếng Việt
|
| 38 |
keyboard = {
|
| 39 |
'a': 'âăáàạảãấầậẩẫắằặẳẵ',
|
|
|
|
| 86 |
'ồ': 'oôơóòọỏõốộổỗớờợởỡ',
|
| 87 |
'ộ': 'oôơóòọỏõốồổỗớờợởỡ',
|
| 88 |
'ổ': 'oôơóòọỏõốồộỗớờợởỡ',
|
| 89 |
+
'ỗ': 'oôơóòọỏõốồộổỗớờợởỡ',
|
| 90 |
'ớ': 'oôơóòọỏõốồộổỗờợởỡ',
|
| 91 |
'ờ': 'oôơóòọỏõốồộổỗớờợởỡ',
|
| 92 |
'ợ': 'oôơóòọỏõốồộổỗớờợởỡ',
|
|
|
|
| 115 |
'z': 's'
|
| 116 |
}
|
| 117 |
|
| 118 |
+
# Chuyển đổi văn bản thành danh sách ký tự
|
| 119 |
text = list(text)
|
| 120 |
|
| 121 |
+
# Xác định số lượng ký tự cần thay thế dựa trên tỷ lệ lỗi
|
| 122 |
+
num_errors = int(len(text) * error_rate)
|
| 123 |
|
| 124 |
+
# Chọn ngẫu nhiên các vị trí để thay thế ký tự
|
| 125 |
+
indices = random.sample(range(len(text)), num_errors)
|
| 126 |
|
| 127 |
for index in indices:
|
| 128 |
+
if text[index].lower() in keyboard and random.random() <= augmentation_probability:
|
| 129 |
+
# Lấy ngẫu nhiên một ký tự từ các ký tự gần trên bàn phím
|
| 130 |
replacement_char = random.choice(keyboard[text[index].lower()])
|
| 131 |
+
# Giữ nguyên kiểu chữ hoa hoặc chữ thường
|
| 132 |
if text[index].isupper():
|
| 133 |
replacement_char = replacement_char.upper()
|
| 134 |
text[index] = replacement_char
|
| 135 |
|
| 136 |
+
# Ghép các ký tự lại thành chuỗi văn bản hoàn chỉnh
|
| 137 |
final_text = ''.join(text)
|
| 138 |
|
| 139 |
return final_text
|
| 140 |
|
| 141 |
|
| 142 |
+
def character_insertion(text, error_rate=0.03, C=0.5):
|
|
|
|
| 143 |
'''
|
| 144 |
+
:param text: Gồm 1 câu đúng chính tả
|
| 145 |
+
:param error_rate: tỷ lệ lỗi sai muốn thêm
|
| 146 |
+
:param C: hằng số để tính toán xác suất chèn ký tự
|
| 147 |
+
:return: Gồm 1 câu sai chính tả
|
| 148 |
|
| 149 |
Bàn phím QWERTY tiếng Việt:
|
| 150 |
|
|
|
|
| 170 |
# Chuyển đổi văn bản thành danh sách ký tự để có thể thêm ký tự
|
| 171 |
text = list(text)
|
| 172 |
|
| 173 |
+
# Xác định số lượng ký tự cần thêm dựa trên tỷ lệ lỗi
|
| 174 |
+
num_errors = int(len(text) * error_rate)
|
| 175 |
+
|
| 176 |
+
# Tính toán xác suất chèn ký tự dựa trên error_rate sử dụng hàm logarit
|
| 177 |
+
augmentation_probability = C / math.log(error_rate + 1)
|
| 178 |
+
|
| 179 |
# Thực hiện thêm ký tự tại các vị trí ngẫu nhiên
|
| 180 |
for _ in range(num_errors):
|
| 181 |
# Chọn ngẫu nhiên một vị trí trong văn bản để thêm ký tự
|
| 182 |
+
if random.random() <= augmentation_probability:
|
| 183 |
+
index = random.randint(0, len(text))
|
| 184 |
+
# Chọn ngẫu nhiên một ký tự từ bàn phím
|
| 185 |
+
char_to_insert = random.choice(keyboard)
|
| 186 |
+
# Thêm ký tự vào vị trí đã chọn
|
| 187 |
+
text.insert(index, char_to_insert)
|
| 188 |
|
| 189 |
# Ghép các ký tự lại thành chuỗi văn bản
|
| 190 |
return ''.join(text)
|