logo

[text-mining] 한국어 형태소 분석

 

Python에서 한국어 토큰화 방법

  • konlpy: hannanum, kkma, okt, komoran 등 Java 기반
  • mecab-ko: 일본어 형태소 분석기인 mecab을 한국어에 맞게 수정
  • kiwi: C++로 개발된 형태소 분석기
  • spaCy: 딥러닝 기반 형태소 분석기. 의존 구문 분석도 제공.
 

kiwi 사용법

  • 설치
!pip install kiwipiepy
  • 불러오기
from kiwipiepy import Kiwi
kiwi = Kiwi()
 

kiwi 형태소 분석

  • 형태소 분석
text = '오늘은 자연어 처리를 배우기 좋은 날이다.'
result = kiwi.tokenize(text)
result
 

kiwi 품사 태그

분류태그설명
체언(N)NNG일반 명사
NNP고유 명사
NNB의존 명사(것, 수)
NR수사
NP대명사(이것, 저것)
용언(V)VV동사(가다)
VA형용사(아름답다)
VX보조 용언(주다)
VCP긍정 지시사(이다)
VCN부정 지시사(아니다)
수식언(M)MM관형사(어느, 한)
MAG일반 부사(매우)
MAJ접속 부사(그리고)
독립언(I)IC감탄사(와!)
조사(J)JKS주격 조사(이, 가)
JKC보격 조사(이, 가)
JKG관형격 조사(의)
JKO목적격 조사(을, 를)
JKB부사격 조사(로)
JKV호격 조사(야)
JKQ인용격 조사(라고)
JX보조사(은, 는)
JC접속 조사(와, 과)
어미(E)EP선어말 어미(-었-)
EF종결 어미(-다)
EC연결 어미(-고)
ETN명사형 전성 어미(-기)
ETM관형형 전성 어미(-는)
어근(XR)XR어근(훌륭)
접사(X)XPN체언 접두사(맨-)
XSN명사 파생 접미사(들)
XSV동사 파생 접미사(되다)
XSA형용사 파생 접미사(롭다)
부호(S)SF종결 부호(. ! ?)
SP구분 부호(, / : ;)
SS인용 부호 및 괄호(' ")
SE줄임표(...)
SO붙임표(-)
SW기타 특수 문자
SL알파벳(A-Z a-z)
SH한자
SN숫자(0-9)
기타(W, U)W_URLURL 주소
W_EMAIL이메일 주소
W_HASHTAG해시태그(#abcd)
W_MENTION멘션(@abcd)
UN분석 불능
 

일반적으로 많이 사용하는 품사 태그

  • NNG 일반 명사
  • NNP 고유 명사
  • VV 동사
  • VA 형용사
  • XR 어근
 

kiwi 명사 추출 함수

def extract_nouns(text):
    result = kiwi.tokenize(text)
    for token in result:
        if token.tag in ['NNG', 'NNP']:
            yield token.form

# 사용 예시
list(extract_nouns('어제는 홍차를 마시고, 오늘은 커피를 마셨다.'))
 

한국어 문서 단어 행렬 만들기

# 데이터
import pandas as pd
df = pd.read_csv('news_ai.csv')

# 고유 명사 추가
kiwi.add_user_word('인공지능', 'NNP')

from sklearn.feature_extraction.text import CountVectorizer

# extract_nouns 함수로 토큰화하여 문서단어행렬 만들기
cv = CountVectorizer(max_features=100, tokenizer=extract_nouns)
dtm = cv.fit_transform(df['본문'])
Previous
문장 구조 분석