반응형
# 설치
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는 한국어 자연어 처리를 위한 강력한 도구로, 텍스트 분석, 감성 분석, 정보 추출 등 다양한 분야에서 활용할 수 있습니다. 각 형태소 분석기의 특성에 맞게 선택하여 사용하면 효과적인 한국어 텍스트 처리가 가능합니다.
'파이썬' 카테고리의 다른 글
Pydantic ConfigDict: 모델 동작 커스터마이징 가이드 (0) | 2025.03.21 |
---|---|
Pydantic Field : 데이터 유효성 검사 (0) | 2025.02.06 |
[Web API] URL 파라미터 데이터 전송 (1) | 2025.01.23 |
파이썬 개발을 위한 VSCode 셋팅 가이드 (3) | 2025.01.03 |
데이터 클래스 비교: dataclass vs Pydantic BaseModel (0) | 2024.12.08 |