파이썬

KoNLPy: 한국어 자연어 처리 라이브러리

코샵 2025. 2. 28. 11:16
반응형
# 설치
pip install konlpy

KoNLPy란?

KoNLPy(Korean Natural Language Processing in Python)는 한국어 텍스트 처리를 위한 파이썬 라이브러리입니다. 형태소 분석, 품사 태깅, 정규화 등 다양한 한국어 자연어 처리 기능을 제공합니다.

주요 형태소 분석기 비교

분석기 속도 정확도 특징
Okt (구 Twitter) 중간 중간 고유명사 인식, 신조어 처리
Mecab 매우 빠름 높음 C++로 구현, 빠른 처리 속도
Hannanum 느림 중간 자바 기반, 상세한 품사 분류
Kkma 매우 느림 높음 정교한 분석, 복합명사 인식
Komoran 중간 높음 사용자 사전 확장 용이

기본 사용법

from konlpy.tag import Okt, Mecab, Hannanum, Kkma, Komoran

# Okt 형태소 분석기
okt = Okt()
text = "아버지가방에들어가신다"

# 형태소 분석
print(okt.morphs(text))
# 결과: ['아버지', '가', '방', '에', '들어가신다']

# 품사 태깅
print(okt.pos(text))
# 결과: [('아버지', 'Noun'), ('가', 'Josa'), ('방', 'Noun'), ('에', 'Josa'), ('들어가신다', 'Verb')]

# 명사 추출
print(okt.nouns(text))
# 결과: ['아버지', '방']

형태소 분석기별 비교 예시

text = "자연어 처리는 인공지능의 중요한 분야입니다."

# Okt
okt = Okt()
print("Okt:", okt.pos(text))

# Mecab - 설치 필요: apt-get install g++ build-essential
mecab = Mecab()
print("Mecab:", mecab.pos(text))

# Hannanum
hannanum = Hannanum()
print("Hannanum:", hannanum.pos(text))

# Kkma
kkma = Kkma()
print("Kkma:", kkma.pos(text))

# Komoran
komoran = Komoran()
print("Komoran:", komoran.pos(text))

사용자 사전 활용

from konlpy.tag import Mecab

# 사용자 사전 경로 지정
mecab = Mecab(dicpath='/usr/local/lib/mecab/dic/mecab-ko-dic')

# Komoran 사용자 사전
from konlpy.tag import Komoran
komoran = Komoran(userdic='/path/to/user_dic.txt')

# 사용자 사전 형식 (user_dic.txt)
# 단어 품사 태그
# 예: 인공지능 NNG

텍스트 전처리 예시

import re
from konlpy.tag import Okt

def preprocess_text(text):
    # 정규 표현식으로 특수문자 제거
    text = re.sub(r'[^\w\s]', '', text)

    # 형태소 분석기 초기화
    okt = Okt()

    # 품사 태깅
    pos_tagged = okt.pos(text)

    # 명사, 동사, 형용사만 추출
    filtered_words = [word for word, pos in pos_tagged 
                    if pos in ['Noun', 'Verb', 'Adjective']]

    return filtered_words

text = "자연어 처리는 정말 재미있고 유용한 분야입니다!"
processed = preprocess_text(text)
print(processed)
# 결과: ['자연어', '처리', '재미있다', '유용', '분야']

워드 클라우드 생성 예시

from konlpy.tag import Okt
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def generate_wordcloud(text):
    okt = Okt()
    nouns = okt.nouns(text)

    # 한 글자 명사 제외
    nouns = [noun for noun in nouns if len(noun) > 1]

    # 단어 빈도수 계산
    word_count = Counter(nouns)

    # 워드 클라우드 생성
    wc = WordCloud(
        font_path='/usr/share/fonts/truetype/nanum/NanumGothic.ttf',
        background_color='white',
        width=800,
        height=600
    )

    wc.generate_from_frequencies(word_count)

    plt.figure(figsize=(10, 8))
    plt.imshow(wc, interpolation='bilinear')
    plt.axis('off')
    plt.show()

텍스트 감성 분석 예시

from konlpy.tag import Okt
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 형태소 분석기 초기화
okt = Okt()

# 텍스트 전처리 함수
def preprocess(text):
    # 형태소 분석
    tokens = okt.morphs(text, stem=True)
    return ' '.join(tokens)

# 가상의 감성 분석 데이터셋
texts = ["이 영화 정말 재미있어요!", "너무 지루하고 별로였습니다."]
labels = [1, 0]  # 1: 긍정, 0: 부정

# 텍스트 전처리
processed_texts = [preprocess(text) for text in texts]

# TF-IDF 벡터화
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(processed_texts)

# 모델 학습
model = LogisticRegression()
model.fit(X, labels)

# 예측
new_text = "생각보다 괜찮은 영화였습니다"
new_processed = preprocess(new_text)
new_vectorized = vectorizer.transform([new_processed])
prediction = model.predict(new_vectorized)

print("감성 분석 결과:", "긍정" if prediction[0] == 1 else "부정")

 

KoNLPy는 한국어 자연어 처리를 위한 강력한 도구로, 텍스트 분석, 감성 분석, 정보 추출 등 다양한 분야에서 활용할 수 있습니다. 각 형태소 분석기의 특성에 맞게 선택하여 사용하면 효과적인 한국어 텍스트 처리가 가능합니다.