ShynBui commited on
Commit
7ffbba4
·
1 Parent(s): b2d179a

add C and probabilty for error rate

Browse files
Files changed (3) hide show
  1. __pycache__/utils.cpython-310.pyc +0 -0
  2. app.py +2 -2
  3. 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, num_errors=3)
9
  list_text_response.append(input_text_process)
10
 
11
  ##character_insertion
12
- input_text_process = character_insertion(input_text, num_errors=2)
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 num_errors: số lượng lỗi sai muốn thêm
 
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 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.
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
- 'ỗ': 'oôơóòọỏõốồộổớờợởỡ',
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
- indices = random.sample(range(len(text) - 1), num_errors)
 
118
 
119
- print(indices)
 
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, num_errors=1):
134
-
135
  '''
136
-
137
- :param text:
138
- :param num_errors:
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
- index = random.randint(0, len(text) -1)
169
- # Chọn ngẫu nhiên một ký tự từ bàn phím
170
- char_to_insert = random.choice(keyboard)
171
- # Thêm ký tự vào vị trí đã chọn
172
- text.insert(index, char_to_insert)
 
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)