# -*- coding: utf-8 -*- import re import html from typing import Any # HTML 태그 제거 정규식 (스크립트 및 스타일 태그 영역 포함 제거) HTML_TAG_PATTERN = re.compile(r'<[^>]+>', re.IGNORECASE) HTML_STYLE_PATTERN = re.compile(r']*>.*?', re.DOTALL | re.IGNORECASE) HTML_SCRIPT_PATTERN = re.compile(r']*>.*?', re.DOTALL | re.IGNORECASE) # 알 수 없는 노이즈 특수 기호 패턴 NOISE_CHARS_PATTERN = re.compile(r'[\u2591-\u2593▒\u0000\ufffd]') def purify_text_noise(raw_text: Any) -> str: """ 텍스트 내의 HTML 노이즈, 특수 부호 및 엔티티 코드를 완벽히 정제하여 임베딩에 적합한 클린한 플레인 텍스트(Plain Text)로 반환합니다. """ if not raw_text: return "" text = str(raw_text) # 1. HTML 엔티티 복원 (e.g.   -> 공백, & -> &) text = html.unescape(text) # 2. HTML 스크립트 및 스타일 본문 영역 전체 제거 text = HTML_STYLE_PATTERN.sub(" ", text) text = HTML_SCRIPT_PATTERN.sub(" ", text) # 3. 모든 HTML 태그 스트리핑 text = HTML_TAG_PATTERN.sub(" ", text) # 4. 깨진 유니코드 및 알 수 없는 기호(▒ 등) 제거 text = NOISE_CHARS_PATTERN.sub("", text) # 5. 과도한 공백 및 개행 정규화 text = re.sub(r'\n\s*\n', '\n\n', text) text = re.sub(r'[ \t]+', ' ', text) return text.strip()