정제(Cleansing)와 정규화(Normalization)

c.haha.e·2025년 8월 16일

STUDY

목록 보기
22/27

1. 정제(Cleansing) – 개념

정제란?

  • “텍스트에서 불필요하거나 방해되는 내용(노이즈)를 깨끗하게 지워내는 작업”
  • 갖고 있는 코퍼스로부터 노이즈 데이터를 제거
  • 예시:
    • “ㅋㅋㅋ”, “ㅎㅎ”, “^_^”, “~~~”, “특수문자” 등
    • 광고/스팸성 멘트, 욕설, HTML 태그, 이메일, 링크, 숫자 등
  • WHY(왜 필요?) → 방해되는 불순물이 많으면 진짜 뜻, 핵심 단어, 감정을 제대로 분석할 수 없음

정제 실습(코드 예시)


import re
text = "안녕하세요^^ 오늘 날씨 짱좋음ㅋㅋㅋ #해시태그 http://link.com"
# 1. 특수문자 제거
text = re.sub(r'[^가-힣0-9\s]', '', text)
# 2. 한글/숫자/띄어쓰기만 남기기
print(text)
# 결과: 안녕하세요 오늘 날씨 짱좋음 해시태그 linkcom
  • 필요에 따라 이메일/링크/광고만 따로 지울 수도 있음

2. 정규화(Normalization) – 개념

정규화란?

  • 비슷한 뜻인데 여러 가지로 적힌 표현들을 하나의 표준(기본) 형태로 통일시키는 작업”
  • 정규화(normalization) : 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만듦
  • 예시:
    • “짜증나”, “짜증난다”, “짜증남” → “짜증나다”
    • “핵꿀잼”, “꿀잼”, “재밌다”, “아주 재미있다” → “재미있다”
    • “굿굿”, “good”, “좋아요” → “좋다”
  • WHY(왜 필요?) → 똑같은 의미가 여러 형태로 있으면
      “진짜 중요 단어” 개수가 필요 이상으로 늘어나고 분석 결과가 흐려짐

정규화 실습(코드 예시)


import re

text = "굿굿! 오늘 핵꿀잼ㅋㅋㅋ 날씨 짱좋음 ㅎㅎㅎ"
# 1. 반복 문자(ㅋㅋㅋ, ㅎㅎㅎ 등) 제거
text = re.sub(r'[ㅋㅎ]+', '', text)
# 2. 은어/신조어/약어 통일
text = text.replace('굿굿', '좋다')
text = text.replace('핵꿀잼', '재미있다')
text = text.replace('짱좋음', '아주 좋음')
print(text)
# 결과: 좋다! 오늘 재미있다 날씨 아주 좋음

실제 실무 적용 포인트

  • 정제:
    • 데이터 품질 ↑
    • 스팸, 광고, 욕설, 쓸데없는 특수문자 ↓
    • 모델이 진짜 필요한 정보만 배울 수 있음
  • 정규화:
    • 단어 종류 ↓
    • 진짜 ‘중요 키워드’만 정확히 잡힘
    • 한글 SNS 신조어, 채팅방, 커뮤니티 텍스트에 꼭 필요!
  • 실무에서는:
    • 반복문, 사전(Dictionary) 만들어서 여러 신조어/은어/줄임말 한꺼번에 통일 가능!
    • 데이터 양이 많을수록 정제·정규화가 모델 성능에 “지분율 50%”
    • 실전에서는 “욕설, 광고, 신조어 사전” 등 따로 관리하는 경우 많음

한줄정리

정제(Cleansing)는 ‘필요 없는 것들’을 지우고,
정규화(Normalization)는 ‘비슷한 의미’를 한 가지 표준 형태로 맞추는 것!


정제와 정규화에 사용되는 대표 라이브러리


1. 정제(Cleansing)에 자주 쓰는 라이브러리

Python 내장 re(정규표현식)

  • 특징:
    • 텍스트에서 불필요한 문자, 패턴(특수문자, 숫자, URL, 이메일, 광고 등) 자동으로 찾아서 삭제/치환
    • 한글/영어 모두 가능
  • 예시:
    
    import re
    text = "굿굿! 오늘 핵꿀잼ㅋㅋㅋ #해시태그 http://link.com"
    # 특수문자, URL 등 제거
    clean = re.sub(r'[^가-힣0-9\s]', '', text)
    print(clean)
    # 결과: 굿굿 오늘 핵꿀잼 해시태그 http://linkcom
    

BeautifulSoup (HTML 정제)

  • 특징:
    • 웹 페이지에서 HTML 태그, 스크립트 등 삭제
    • 크롤링/뉴스 기사/블로그 등에서 주로 사용
  • 예시:
    
    from bs4 import BeautifulSoup
    html = "<html><body>안녕하세요! <b>반갑습니다.</b></body></html>"
    soup = BeautifulSoup(html, 'html.parser')
    print(soup.get_text())
    # 결과: 안녕하세요! 반갑습니다.
    

kss, soynlp, KoNLPy (한국어용)

  • 특징:
    • 한국어에서 문장 분리, 맞춤법/중복 문자 등 정제에 활용
  • 예시:
    
    import kss
    text = "안녕하세요.오늘은 날씨가 참 좋아요ㅋㅋㅋ"
    print(list(kss.split_sentences(text)))
    # 결과: ['안녕하세요.', '오늘은 날씨가 참 좋아요ㅋㅋㅋ']
    

2. 정규화(Normalization)에 자주 쓰는 라이브러리

soynlp

  • 특징:
    • 한글 신조어, 반복 문자(ㅋㅋㅋ, ㅎㅎㅎ), 띄어쓰기 정규화
    • 오타 교정 등 자동화 기능
  • 예시:
    
    from soynlp.normalizer import repeat_normalize
    text = "우와아아아아 짱재밌엉ㅋㅋㅋㅋ"
    print(repeat_normalize(text, num_repeats=2))
    # 결과: 우와아 짱재밌엉ㅋㅋ
    

Python 내장 re + 사용자 정의 사전

  • 특징:
    • 신조어, 약어, 줄임말, 은어 등 직접 만든 “정규화 사전”과 함께 사용
  • 예시:
    text = "굿굿! 오늘 핵꿀잼 짱좋음"
    replace_dict = {'굿굿':'좋다', '핵꿀잼':'재미있다', '짱좋음':'아주 좋음'}
    for k, v in replace_dict.items():
        text = text.replace(k, v)
    print(text)
    # 결과: 좋다! 오늘 재미있다 아주 좋음
    

Ekphrasis (영어 정규화 특화)

  • 특징:
    • 영어 약어, 이모티콘, 채팅체 등을 표준 영어로 정규화
    • 영어 SNS, 트위터 등에서 많이 씀
  • 예시:
    
    # 설치: 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, 이모티콘, 반복 문자, 태그 등 표준화)
    

3. 기타 실무 보조 라이브러리

  • pyspellchecker : 영어 맞춤법 교정
  • hanspell : 한글 맞춤법 교정 (pip로 설치 필요)
  • ftfy : 인코딩 깨짐/이상한 문자 복원 (영어 등)
  • pandas : 데이터프레임 내 결측값, 중복값 등 정제

정리

용도대표 라이브러리/방법특징
정제re, BeautifulSoup, kss특수문자/HTML/중복문자/노이즈 삭제
정규화soynlp, re+사전, Ekphrasis반복/신조어/약어/띄어쓰기/이모티콘 표준화
맞춤법hanspell, pyspellchecker한국어/영어 맞춤법/오타 교정
profile
기록용 블로그

0개의 댓글