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_URL | URL 주소 |
| 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
cv = CountVectorizer(max_features=100, tokenizer=extract_nouns)
dtm = cv.fit_transform(df['본문'])