# -*- 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()