kcsc-mcp / src /utils /purifier.py
nicefree19's picture
Upload 105 files
0ee3c92 verified
Raw
History Blame Contribute Delete
1.47 kB
# -*- 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'<style[^>]*>.*?</style>', re.DOTALL | re.IGNORECASE)
HTML_SCRIPT_PATTERN = re.compile(r'<script[^>]*>.*?</script>', 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. &nbsp; -> ๊ณต๋ฐฑ, &amp; -> &)
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()