add tranpostion method
Browse files- __pycache__/utils.cpython-310.pyc +0 -0
- app.py +7 -1
- utils.py +75 -0
__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
|
@@ -11,8 +11,14 @@ def final_result(input_text):
|
|
| 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 |
|
|
|
|
| 16 |
string_text_response = '\n'.join(list_text_response)
|
| 17 |
return str(string_text_response)
|
| 18 |
|
|
|
|
| 11 |
##character_insertion
|
| 12 |
input_text_process = character_insertion(input_text, error_rate=0.01)
|
| 13 |
list_text_response.append(input_text_process)
|
| 14 |
+
##character_deletion
|
| 15 |
+
input_text_process = character_deletion(input_text, error_rate=0.01)
|
| 16 |
+
list_text_response.append(input_text_process)
|
| 17 |
+
##character_transposition
|
| 18 |
+
input_text_process = character_transposition(input_text, error_rate=0.03)
|
| 19 |
+
list_text_response.append(input_text_process)
|
| 20 |
|
| 21 |
+
##
|
| 22 |
string_text_response = '\n'.join(list_text_response)
|
| 23 |
return str(string_text_response)
|
| 24 |
|
utils.py
CHANGED
|
@@ -188,3 +188,78 @@ def character_insertion(text, error_rate=0.03, C=0.5):
|
|
| 188 |
|
| 189 |
# Ghép các ký tự lại thành chuỗi văn bản
|
| 190 |
return ''.join(text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
# Ghép các ký tự lại thành chuỗi văn bản
|
| 190 |
return ''.join(text)
|
| 191 |
+
|
| 192 |
+
|
| 193 |
+
def character_deletion(text, error_rate=0.03, C=0.5):
|
| 194 |
+
'''
|
| 195 |
+
:param text: Gồm 1 câu đúng chính tả
|
| 196 |
+
:param error_rate: tỷ lệ lỗi sai muốn thêm
|
| 197 |
+
:param C: hằng số để tính toán xác suất xóa ký tự
|
| 198 |
+
:return: Gồm 1 câu sai chính tả
|
| 199 |
+
|
| 200 |
+
Thực hiện xóa ký tự:
|
| 201 |
+
Sử dụng vòng lặp for _ in range(num_errors) để xóa một số lượng ký tự ngẫu nhiên xác định (num_errors).
|
| 202 |
+
Mỗi lần trong vòng lặp:
|
| 203 |
+
Sử dụng random.randint(0, len(text)-1) để chọn ngẫu nhiên một vị trí trong văn bản nơi ký tự sẽ bị xóa.
|
| 204 |
+
Sử dụng text.pop(index) để xóa ký tự tại vị trí đã chọn.
|
| 205 |
+
Ghép lại thành chuỗi văn bản:
|
| 206 |
+
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.
|
| 207 |
+
'''
|
| 208 |
+
|
| 209 |
+
# Chuyển đổi văn bản thành danh sách ký tự để có thể xóa ký tự
|
| 210 |
+
text = list(text)
|
| 211 |
+
|
| 212 |
+
# Xác định số lượng ký tự cần xóa dựa trên tỷ lệ lỗi
|
| 213 |
+
num_errors = int(len(text) * error_rate)
|
| 214 |
+
|
| 215 |
+
# Tính toán xác suất xóa ký tự dựa trên error_rate sử dụng hàm logarit
|
| 216 |
+
augmentation_probability = C / math.log(error_rate + 1)
|
| 217 |
+
|
| 218 |
+
# Thực hiện xóa ký tự tại các vị trí ngẫu nhiên
|
| 219 |
+
for _ in range(num_errors):
|
| 220 |
+
# Chọn ngẫu nhiên một vị trí trong văn bản để xóa ký tự
|
| 221 |
+
if random.random() <= augmentation_probability:
|
| 222 |
+
if len(text) > 0: # Đảm bảo rằng danh sách không trống
|
| 223 |
+
index = random.randint(0, len(text) - 1)
|
| 224 |
+
# Xóa ký tự tại vị trí đã chọn
|
| 225 |
+
text.pop(index)
|
| 226 |
+
|
| 227 |
+
# Ghép các ký tự lại thành chuỗi văn bản
|
| 228 |
+
return ''.join(text)
|
| 229 |
+
|
| 230 |
+
def character_transposition(text, error_rate=0.03, C=0.5):
|
| 231 |
+
'''
|
| 232 |
+
:param text: Gồm 1 câu đúng chính tả
|
| 233 |
+
:param error_rate: tỷ lệ lỗi sai muốn thêm
|
| 234 |
+
:param C: hằng số để tính toán xác suất hoán đổi ký tự
|
| 235 |
+
:return: Gồm 1 câu sai chính tả
|
| 236 |
+
|
| 237 |
+
Thực hiện hoán đổi ký tự:
|
| 238 |
+
Sử dụng vòng lặp for _ in range(num_errors) để hoán đổi một số lượng ký tự ngẫu nhiên xác định (num_errors).
|
| 239 |
+
Mỗi lần trong vòng lặp:
|
| 240 |
+
Sử dụng random.randint(0, len(text)-2) để chọn ngẫu nhiên một vị trí trong văn bản nơi ký tự sẽ bị hoán đổi.
|
| 241 |
+
Hoán đổi hai ký tự liên tiếp tại vị trí đã chọn.
|
| 242 |
+
Ghép lại thành chuỗi văn bản:
|
| 243 |
+
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.
|
| 244 |
+
'''
|
| 245 |
+
|
| 246 |
+
# Chuyển đổi văn bản thành danh sách ký tự để có thể hoán đổi ký tự
|
| 247 |
+
text = list(text)
|
| 248 |
+
|
| 249 |
+
# Xác định số lượng lần hoán đổi cần thực hiện dựa trên tỷ lệ lỗi
|
| 250 |
+
num_errors = int(len(text) * error_rate)
|
| 251 |
+
|
| 252 |
+
# Tính toán xác suất hoán đổi ký tự dựa trên error_rate sử dụng hàm logarit
|
| 253 |
+
augmentation_probability = C / math.log(error_rate + 1)
|
| 254 |
+
|
| 255 |
+
# Thực hiện hoán đổi ký tự tại các vị trí ngẫu nhiên
|
| 256 |
+
for _ in range(num_errors):
|
| 257 |
+
# Chọn ngẫu nhiên một vị trí trong văn bản để hoán đổi ký tự
|
| 258 |
+
if random.random() <= augmentation_probability:
|
| 259 |
+
if len(text) > 1: # Đảm bảo rằng danh sách có ít nhất 2 ký tự để hoán đổi
|
| 260 |
+
index = random.randint(0, len(text) - 2)
|
| 261 |
+
# Hoán đổi hai ký tự liên tiếp tại vị trí đã chọn
|
| 262 |
+
text[index], text[index + 1] = text[index + 1], text[index]
|
| 263 |
+
|
| 264 |
+
# Ghép các ký tự lại thành chuỗi văn bản
|
| 265 |
+
return ''.join(text)
|