한국어 텍스트 전처리 파이프라인: PyKoSpacing·Py-Hanspell·SOYNLP 활용법

한국어 자동 띄어쓰기 PyKoSpacing, 맞춤법 검사 Py-Hanspell, 비지도 토크나이저 SOYNLP를 조합해 한국어 텍스트 전처리 파이프라인을 구축하는 방법과 코드 예제를 정리한다.

2026-08-14 · 최초 발행 2025-05-23

한국어는 교착어라 조사와 어미가 단어에 복잡하게 결합하고, 띄어쓰기 규칙도 영어보다 복잡한데다 실제 사용에서는 일관성 없이 지켜지지 않는 경우가 많다. 형태소 분석이 단어 토큰화의 기본 단위가 되고, 맞춤법과 문법 오류는 자연어 처리 성능에 그대로 영향을 준다. 이런 특성 때문에 한국어 텍스트를 다루려면 전용 전처리 도구가 필요하다. PyKoSpacing·Py-Hanspell·SOYNLP는 각각 띄어쓰기, 맞춤법, 토큰화를 담당하는 파이썬 패키지로, 조합하면 실무에서 쓸 수 있는 전처리 파이프라인이 된다.

PyKoSpacing으로 띄어쓰기 자동 보정하기

PyKoSpacing은 딥러닝 기반의 한국어 자동 띄어쓰기 패키지다. Bi-LSTM CRF 모델로 학습되어 있어 문장 단위로 처리하며 문맥을 고려한 띄어쓰기를 제공하고, 높은 정확도를 보이면서도 파이썬 환경에 쉽게 설치해 쓸 수 있다.

from pykospacing import Spacing

spacing = Spacing()
sent = "김철수는오늘도서관에갔습니다."
kospacing_sent = spacing(sent)
print(kospacing_sent)
# 출력: "김철수는 오늘 도서관에 갔습니다."

띄어쓰기가 없는 문장을 넣으면 문맥을 반영해 띄어쓰기를 채워 넣는다. 사용자 입력 데이터의 띄어쓰기 보정, SNS 데이터처럼 비정형적인 텍스트의 표준화, 검색 엔진의 쿼리 정규화 과정에서 주로 쓰인다.

Py-Hanspell로 맞춤법 오류 잡아내기

Py-Hanspell은 네이버 한글 맞춤법 검사기를 API 형태로 감싼 패키지다. 맞춤법 오류를 자동으로 교정하고 띄어쓰기 보정 기능도 포함하며, 문장 단위로 처리한다. 네이버의 맞춤법 검사 엔진을 그대로 활용하기 때문에 정확도가 높다.

from hanspell import spell_checker

sent = "안녕 하세요. 저는 한국어를 공부하는 학생입니다."
checked = spell_checker.check(sent)
print(checked.checked)
# 출력: "안녕하세요. 저는 한국어를 공부하는 학생입니다."

문서 자동 교정 시스템, 텍스트 마이닝 전처리 단계의 오류 교정, 챗봇이나 AI 비서의 사용자 입력 전처리, 이메일·보고서 같은 공식 문서 작성 보조 도구로 활용된다.

SOYNLP로 사전 없이 토큰화하기

SOYNLP는 비지도 학습 기반의 단어 토크나이저를 핵심으로 하는 한국어 텍스트 분석 패키지다. 품사 태깅, 단어 토큰화, 반복 문자 정제 기능을 제공하며, 사전 정보 없이 작동하기 때문에 신조어나 고유명사처럼 기존 사전에 없는 단어도 처리할 수 있다.

SOYNLP가 단어 경계를 판단하는 핵심은 응집 확률과 브랜칭 엔트로피 두 가지다.

응집 확률(Cohesion Probability)은 내부 문자열(substring)이 얼마나 응집해서 자주 등장하는지를 판단하는 척도다.

문자열 빈도 계산좌/우 문맥 추출응집 확률 계산단어 경계 식별

계산 공식은 P(단어) = 내부 문자열의 빈도 / 왼쪽 문자열의 빈도다. 예를 들어 '자연어'의 응집 확률은 P(자연어) = Count(자연어) / Count(자연)으로 계산하며, 값이 높을수록 하나의 단어로 볼 가능성이 높다.

브랜칭 엔트로피(Branching Entropy)는 주어진 문자열 다음에 얼마나 다양한 문자가 나타날 수 있는지를 확률분포의 엔트로피 값으로 측정한다.

문자열 L 선택L 다음에 나오는 모든 문자 집합R 확인 r∈R에 대한 조건부 확률P(r|L) 계산엔트로피 H(L) =-∑P(r|L)log(P(r|L)) 계산높은 엔트로피 = 단어 경계가능성 높음

하나의 완성된 단어에 가까워질수록 문맥으로 인해 예측 가능성이 높아지므로 브랜칭 엔트로피는 감소하는 경향을 보이고, 이 값이 급격히 변하는 지점이 단어 경계일 가능성이 높다.

from soynlp.word import WordExtractor
from soynlp.tokenizer import LTokenizer

# 단어 추출기 학습
corpus = [
    '2019년 한국어 처리 기술 학회에서 자연어 처리 기술에 대한 논문이 발표되었습니다.',
    '자연어 처리는 컴퓨터가 사람의 언어를 이해하고 처리하는 인공지능의 한 분야입니다.'
]
word_extractor = WordExtractor()
word_extractor.train(corpus)
word_score = word_extractor.extract()

# 토큰화
scores = {word: score.cohesion_forward for word, score in word_score.items()}
tokenizer = LTokenizer(scores=scores)
tokens = tokenizer.tokenize('자연어처리기술은인공지능의핵심분야입니다')
print(tokens)
# 출력: ['자연어처리', '기술은', '인공지능의', '핵심', '분야입니다']

신조어나 도메인 특화 용어가 많은 데이터셋, 사전 기반 형태소 분석기가 처리하기 어려운 비정형 텍스트, 온라인 커뮤니티나 SNS처럼 실시간으로 변화하는 언어 패턴 분석, 특정 도메인에 맞춘 토크나이저 구축에 쓰인다.

PyKoSpacing·Py-Hanspell·SOYNLP를 하나의 파이프라인으로 묶기

실제 프로젝트에서는 세 도구를 순서대로 연결해 전처리 파이프라인을 구축한다.

원본 텍스트PyKoSpacing: 띄어쓰기 보정Py-Hanspell: 맞춤법 검사SOYNLP: 토큰화/정규화정제된 텍스트
from pykospacing import Spacing
from hanspell import spell_checker
from soynlp.word import WordExtractor
from soynlp.tokenizer import LTokenizer

def preprocess_korean_text(text, word_extractor=None):
    # 1. 띄어쓰기 보정
    spacing = Spacing()
    spaced_text = spacing(text.replace(' ', ''))

    # 2. 맞춤법 검사
    checked_text = spell_checker.check(spaced_text).checked

    # 3. SOYNLP 토큰화 (사전 학습된 word_extractor 필요)
    if word_extractor:
        scores = {word: score.cohesion_forward for word, score in word_extractor.extract().items()}
        tokenizer = LTokenizer(scores=scores)
        tokens = tokenizer.tokenize(checked_text)
        return tokens

    return checked_text

# 사용 예시
corpus = [...] # 대량의 학습 텍스트
word_extractor = WordExtractor()
word_extractor.train(corpus)

text = "인공지능기술의발전으로자연어처리분야가빠르게성장하고있습니다"
processed = preprocess_korean_text(text, word_extractor)
print(processed)

도구별 강점과 한계

각 도구는 적용 상황에 따라 선택적으로 조합해야 한다.

도구 장점 단점
PyKoSpacing - 문맥 기반 정확한 띄어쓰기- 간편한 사용법 - 긴 문장에서 정확도 저하- 학습된 도메인에 의존적
Py-Hanspell - 높은 맞춤법 교정 정확도- 네이버 엔진 활용 - API 호출 제한- 실시간 처리에 부적합
SOYNLP - 사전 없이 신조어 처리 가능- 도메인 적응성 - 초기 학습 필요- 소규모 코퍼스에서 성능 저하
한국어NLP텍스트전처리PyKoSpacingSOYNLP형태소분석