정제란?
import re
text = "안녕하세요^^ 오늘 날씨 짱좋음ㅋㅋㅋ #해시태그 http://link.com"
# 1. 특수문자 제거
text = re.sub(r'[^가-힣0-9\s]', '', text)
# 2. 한글/숫자/띄어쓰기만 남기기
print(text)
# 결과: 안녕하세요 오늘 날씨 짱좋음 해시태그 linkcom
정규화란?
“진짜 중요 단어” 개수가 필요 이상으로 늘어나고 분석 결과가 흐려짐
import re
text = "굿굿! 오늘 핵꿀잼ㅋㅋㅋ 날씨 짱좋음 ㅎㅎㅎ"
# 1. 반복 문자(ㅋㅋㅋ, ㅎㅎㅎ 등) 제거
text = re.sub(r'[ㅋㅎ]+', '', text)
# 2. 은어/신조어/약어 통일
text = text.replace('굿굿', '좋다')
text = text.replace('핵꿀잼', '재미있다')
text = text.replace('짱좋음', '아주 좋음')
print(text)
# 결과: 좋다! 오늘 재미있다 날씨 아주 좋음
정제(Cleansing)는 ‘필요 없는 것들’을 지우고,
정규화(Normalization)는 ‘비슷한 의미’를 한 가지 표준 형태로 맞추는 것!
import re
text = "굿굿! 오늘 핵꿀잼ㅋㅋㅋ #해시태그 http://link.com"
# 특수문자, URL 등 제거
clean = re.sub(r'[^가-힣0-9\s]', '', text)
print(clean)
# 결과: 굿굿 오늘 핵꿀잼 해시태그 http://linkcom
from bs4 import BeautifulSoup
html = "<html><body>안녕하세요! <b>반갑습니다.</b></body></html>"
soup = BeautifulSoup(html, 'html.parser')
print(soup.get_text())
# 결과: 안녕하세요! 반갑습니다.
import kss
text = "안녕하세요.오늘은 날씨가 참 좋아요ㅋㅋㅋ"
print(list(kss.split_sentences(text)))
# 결과: ['안녕하세요.', '오늘은 날씨가 참 좋아요ㅋㅋㅋ']
from soynlp.normalizer import repeat_normalize
text = "우와아아아아 짱재밌엉ㅋㅋㅋㅋ"
print(repeat_normalize(text, num_repeats=2))
# 결과: 우와아 짱재밌엉ㅋㅋ
text = "굿굿! 오늘 핵꿀잼 짱좋음"
replace_dict = {'굿굿':'좋다', '핵꿀잼':'재미있다', '짱좋음':'아주 좋음'}
for k, v in replace_dict.items():
text = text.replace(k, v)
print(text)
# 결과: 좋다! 오늘 재미있다 아주 좋음
# 설치: pip install ekphrasis
from ekphrasis.classes.preprocessor import TextPreProcessor
text_processor = TextPreProcessor(
normalize=['url', 'email', 'percent', 'money', 'phone', 'user'],
annotate={'hashtag', 'allcaps', 'elongated', 'repeated'},
fix_html=True, segmenter="twitter", corrector="twitter"
)
print(" ".join(text_processor.pre_process_doc("I looooveee Python!!! #awesome @user http://site.com")))
# (URL, 이모티콘, 반복 문자, 태그 등 표준화)
| 용도 | 대표 라이브러리/방법 | 특징 |
|---|---|---|
| 정제 | re, BeautifulSoup, kss | 특수문자/HTML/중복문자/노이즈 삭제 |
| 정규화 | soynlp, re+사전, Ekphrasis | 반복/신조어/약어/띄어쓰기/이모티콘 표준화 |
| 맞춤법 | hanspell, pyspellchecker | 한국어/영어 맞춤법/오타 교정 |