콘텐츠로 이동

콘텐츠 모더레이션

콘텐츠 모더레이션·금칙어 탐지에서 활용하기

금칙어 탐지는 단순 문자열 매칭으로는 한계가 분명합니다. 사용자는 띄어쓰기·조사·자모 분리로 금칙어를 교묘하게 우회하기 때문입니다. 바른의 형태소 분석으로 텍스트를 정규화하면, 변형된 표현 속에서도 금칙어 어근을 잡아낼 수 있습니다.

문제 상황

  • 욕 설처럼 띄어쓰기로 단어를 쪼개 금칙어 필터를 우회합니다.
  • 조사·어미가 붙은 활용형(금칙어를, 금칙어처럼)이 단순 매칭에 걸리지 않습니다.
  • 띄어쓰기가 흐트러진 입력은 문자열 사전과 어긋납니다.

바른을 어떻게 적용하나

입력을 형태소로 분해해 명사·용언 원형으로 정규화하면, 조사·어미·띄어쓰기 변형이 제거됩니다. 정규화된 형태소를 금칙어 사전과 대조하면 우회 시도를 더 잘 탐지합니다. 바른의 띄어쓰기 보정도 쪼개기 우회에 대응합니다. 형태소 분석 API 사용법은 형태소 분석 API를 참고하세요.

graph TD
  IN[사용자 입력] --> SP[띄어쓰기 보정];
  SP --> TAG[바른 형태소 분석];
  TAG --> NORM[명사·용언 원형 정규화];
  NORM --> MATCH[금칙어 사전 대조];
  MATCH -->|일치| BLOCK[차단·검토];
  MATCH -->|불일치| PASS[통과];
from bareunpy import Tagger

tagger = Tagger("koba-XXXX-...", "localhost")

BANNED = {"금칙어", "비속어"}  # 예시 금칙어 어근

def is_blocked(text: str) -> bool:
    """형태소 원형을 금칙어 사전과 대조해 우회 표현까지 탐지합니다."""
    res = tagger.tags([text])
    morphs = set(res.morphs())   # 정규화된 형태소 집합
    return bool(morphs & BANNED)

print(is_blocked("이건 금칙 어를 우회한 표현"))  # 띄어쓰기 우회
print(is_blocked("정상적인 문장입니다"))
True
False

띄어쓰기로 쪼갠 우회 표현도 보정·정규화 후 금칙어로 탐지됩니다.

결과와 이점

우회 방식 단순 문자열 매칭 바른 정규화
띄어쓰기 쪼개기 통과(미탐지) 보정 후 탐지
조사·어미 변형 누락 원형으로 탐지
활용형 누락 원형으로 탐지

완벽한 탐지는 없습니다

형태소 정규화는 우회 탐지를 크게 개선하지만, 자모 치환·특수기호 삽입 같은 변형은 별도 규칙과 함께 써야 합니다. 형태소 기반 정규화를 여러 방어선 중 하나 로 두세요.

자주 묻는 질문

Q. 자모를 섞은 우회(ㄱ.ㅊ.ㅇ)는 어떻게 하나요?

이런 변형은 형태소 분석 전에 특수기호 제거·자모 결합 같은 전처리 규칙으로 먼저 정리한 뒤 바른에 넘기는 것이 효과적입니다.

Q. 정상 표현을 금칙어로 오탐하지 않나요?

형태소 원형 단위로 대조하면 부분 문자열 오탐이 줄어듭니다. 다만 동음이의가 있는 단어는 문맥을 함께 보는 규칙으로 보완하세요.

Q. 금칙어 목록이 자주 바뀌어요.

금칙어 어근 목록은 애플리케이션에서 관리하고, 신조어성 고유 표현은 사용자 사전(np_set)에 등록해 형태소로 잡히게 하면 운영이 수월합니다. 신조어 등록은 신조어·고유명사 등록을 참고하세요.

Q. 띄어쓰기·조사로 금칙어 필터를 우회하는 경우는 어떻게 막나요?

욕 설처럼 띄어쓰기로 쪼개거나 금칙어를처럼 조사를 붙여 단순 문자열 매칭을 피하는 시도가 많습니다. 바른의 띄어쓰기 보정으로 쪼개기 우회를 되돌리고, 형태소를 명사·용언 원형으로 정규화하면 조사·어미·활용 변형이 제거됩니다. 정규화된 형태소를 금칙어 사전과 대조하면 이런 우회 표현까지 탐지할 수 있습니다.

관련 문서

도움이 되었나요?