blueradiance commited on
Commit
dbcbe15
·
verified ·
1 Parent(s): 8122ec3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -7
app.py CHANGED
@@ -211,21 +211,56 @@ def apply_masking(text, keyword_str, replace_word):
211
 
212
  return final_text, mapping_table
213
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
 
215
- # 🔹 Gradio UI
 
 
 
 
 
 
 
 
 
216
  with gr.Blocks() as demo:
217
  gr.Markdown("""
218
  🛡️ **민감정보 마스킹 [ver2]**
219
- 이름 + 민감정보 + 초/중/고 마스킹기 (초성 기반 + 예외 필터 + 후처리 강화)
220
  """)
221
-
222
- input_text = gr.Textbox(lines=15, label="📅 원본 텍스트 입력")
223
  keyword_input = gr.Textbox(lines=1, label="기관 키워드 (쉼표 구분)", value="굿네이버스, 사회복지법인 굿네이버스")
224
  replace_input = gr.Textbox(lines=1, label="치환할 텍스트", value="우리기관")
225
-
226
  run_button = gr.Button("🚀 마스킹 실행")
227
- masked_output = gr.Textbox(lines=15, label="🔐 마스킹 결과")
228
- mapping_output = gr.Textbox(lines=10, label="🏷️ 이름 태그 매핑", interactive=False)
229
 
230
  run_button.click(
231
  fn=apply_masking,
 
211
 
212
  return final_text, mapping_table
213
 
214
+ def refactored_mask_names(text, names):
215
+ mapping = {}
216
+ for i, name in enumerate(names):
217
+ tag = f"N{i+1:03}"
218
+ text = text.replace(name, tag)
219
+ mapping[name] = tag
220
+ return text, mapping
221
+
222
+ def final_name_remask_exact_only(text, mapping):
223
+ for name, tag in mapping.items():
224
+ text = text.replace(name, tag)
225
+ return text
226
+
227
+ def sanitize_sensitive_info(text, keywords, replace_word):
228
+ # 기관 키워드 치환
229
+ for kw in keywords:
230
+ pattern = rf"{re.escape(kw)}(?=\W|$)" # 조사 대응
231
+ text = re.sub(pattern, replace_word, text, flags=re.IGNORECASE)
232
+
233
+ # 이메일 마스킹 예시
234
+ text = re.sub(r"\b[\w\.-]+@", "******@", text)
235
+ return text
236
+
237
+
238
+ # ✅ 핵심 apply_masking 함수
239
+ def apply_masking(text, keyword_str, replace_word):
240
+ keywords = [kw.strip() for kw in keyword_str.split(",") if kw.strip()]
241
 
242
+ names = extract_names(text)
243
+ masked_text, name_mapping = refactored_mask_names(text, names)
244
+ sanitized_text = sanitize_sensitive_info(masked_text, keywords, replace_word)
245
+ final_text = final_name_remask_exact_only(sanitized_text, name_mapping)
246
+
247
+ mapping_table = "\n".join(f"{k} → {v}" for k, v in name_mapping.items())
248
+ return final_text, mapping_table
249
+
250
+
251
+ # ✅ Gradio UI
252
  with gr.Blocks() as demo:
253
  gr.Markdown("""
254
  🛡️ **민감정보 마스킹 [ver2]**
255
+ 이름 + 민감정보 + 기관 키워드 마스킹기 (초성 기반 + 후처리 강화)
256
  """)
257
+
258
+ input_text = gr.Textbox(lines=10, label="📅 원본 텍스트 입력")
259
  keyword_input = gr.Textbox(lines=1, label="기관 키워드 (쉼표 구분)", value="굿네이버스, 사회복지법인 굿네이버스")
260
  replace_input = gr.Textbox(lines=1, label="치환할 텍스트", value="우리기관")
 
261
  run_button = gr.Button("🚀 마스킹 실행")
262
+ masked_output = gr.Textbox(lines=10, label="🔐 마스킹 결과")
263
+ mapping_output = gr.Textbox(lines=5, label="🏷️ 이름 태그 매핑", interactive=False)
264
 
265
  run_button.click(
266
  fn=apply_masking,