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

저작자표시 비영리 변경금지 (새창열림)

'파이썬' 카테고리의 다른 글

IP카메라 CCTV 구현을 위한 필수 지식: RTSP와 FFmpeg 완벽 가이드  (4) 2025.06.17
Pydantic ConfigDict: 모델 동작 커스터마이징 가이드  (0) 2025.03.21
Pydantic Field : 데이터 유효성 검사  (0) 2025.02.06
[Web API] URL 파라미터 데이터 전송  (1) 2025.01.23
파이썬 개발을 위한 VSCode 셋팅 가이드  (3) 2025.01.03
'파이썬' 카테고리의 다른 글
  • IP카메라 CCTV 구현을 위한 필수 지식: RTSP와 FFmpeg 완벽 가이드
  • Pydantic ConfigDict: 모델 동작 커스터마이징 가이드
  • Pydantic Field : 데이터 유효성 검사
  • [Web API] URL 파라미터 데이터 전송
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    programmerlife
    스마트스토어리뷰
    Python
    programming101
    유니티
    codingtips
    카페24리뷰이관
    스크립트 실행
    리뷰이관
    list
    상품 리뷰 크롤링
    리스트
    ipcamera
    appdevelopment
    긴유통기한우유
    믈레코비타멸균우유
    codingcommunity
    쇼핑몰리뷰
    셀레니움
    devlife
    learntocode
    스크립트 실행 순서
    C#
    리뷰관리
    unity
    rtsp
    파이썬
    카페24리뷰
    cv2
    라떼우유
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
KoNLPy: 한국어 자연어 처리 라이브러리
상단으로

티스토리툴바