728x90
!pip install konlpy
형태소 분석
from konlpy.tag import Kkma, Komoran, Okt
okt = Okt()
kkm = Kkma()
komoran = Komoran()
text = '한국어가 영어보다 자연어 처리 난이도가 높은 이유는 교착어이기 때문이다. 어근(어간)과 접사가 붙어 있어 단어를 분리하는 것이 까다롭다.'
print("세 가지 형태소 분석기로 형태소 분석을 해 보자.\n ---------------------------")
print(f"1. Okt: {okt.morphs(text)}")
print(f"2. Kkma: {kkm.morphs(text)}")
print(f"3. Komoran: {komoran.morphs(text)}")
세 가지 형태소 분석기로 형태소 분석을 해 보자.
---------------------------
1. Okt: ['한국어', '가', '영어', '보다', '자연어', '처리', '난이도', '가', '높은', '이유', '는', '교착어', '이기', '때문', '이다', '.', '어근', '(', '어간', ')', '과', '접사', '가', '붙어', '있어', '단어', '를', '분리', '하는', '것', '이', '까다롭다', '.']
2. Kkma: ['한국어', '가', '영어', '보다', '자연어', '처리', '난이도', '가', '높', '은', '이유', '는', '교착어', '이', '기', '때문', '이', '다', '.', '어근', '(', '어', '어', '간', ')', '과', '접사', '가', '붙', '어', '있', '어', '단어', '를', '분리', '하', '는', '것', '이', '까다롭', '다', '.']
3. Komoran: ['한국어', '가', '영어', '보다', '자연어', '처리', '난이도', '가', '높', '은', '이유', '는', '교착어', '이기', '때문', '이', '다', '.', '어근', '(', '어간', ')', '과', '접사', '가', '붙', '어', '있', '어', '단어', '를', '분리', '하', '는', '것', '이', '까다롭', '다', '.']
품사 태깅(PoS)
text = '한국어가 영어보다 자연어 처리 난이도가 높은 이유는 교착어이기 때문이다. 어근(어간)과 접사가 붙어 있어 단어를 분리하는 것이 까다롭다.'
print("세 가지 형태소 분석기로 품사 태깅(PoS)을 해 보자.\n ---------------------------")
print(f"1. Okt: {okt.pos(text)}")
print(f"2. Kkma: {kkm.pos(text)}")
print(f"3. Komoran: {komoran.pos(text)}")
세 가지 형태소 분석기로 품사 태깅(PoS)을 해 보자.
---------------------------
1. Okt: [('한국어', 'Noun'), ('가', 'Josa'), ('영어', 'Noun'), ('보다', 'Josa'), ('자연어', 'Noun'), ('처리', 'Noun'), ('난이도', 'Noun'), ('가', 'Josa'), ('높은', 'Adjective'), ('이유', 'Noun'), ('는', 'Josa'), ('교착어', 'Noun'), ('이기', 'Noun'), ('때문', 'Noun'), ('이다', 'Josa'), ('.', 'Punctuation'), ('어근', 'Noun'), ('(', 'Punctuation'), ('어간', 'Noun'), (')', 'Punctuation'), ('과', 'Noun'), ('접사', 'Noun'), ('가', 'Josa'), ('붙어', 'Verb'), ('있어', 'Adjective'), ('단어', 'Noun'), ('를', 'Josa'), ('분리', 'Noun'), ('하는', 'Verb'), ('것', 'Noun'), ('이', 'Josa'), ('까다롭다', 'Adjective'), ('.', 'Punctuation')]
2. Kkma: [('한국어', 'NNG'), ('가', 'JKS'), ('영어', 'NNG'), ('보다', 'JKM'), ('자연어', 'NNG'), ('처리', 'NNG'), ('난이도', 'NNG'), ('가', 'JKS'), ('높', 'VA'), ('은', 'ETD'), ('이유', 'NNG'), ('는', 'JX'), ('교착어', 'NNG'), ('이', 'VCP'), ('기', 'ETN'), ('때문', 'NNB'), ('이', 'VCP'), ('다', 'EFN'), ('.', 'SF'), ('어근', 'NNG'), ('(', 'SS'), ('어', 'VV'), ('어', 'ECS'), ('간', 'NNG'), (')', 'SS'), ('과', 'NNG'), ('접사', 'NNG'), ('가', 'JKS'), ('붙', 'VV'), ('어', 'ECD'), ('있', 'VXV'), ('어', 'ECD'), ('단어', 'NNG'), ('를', 'JKO'), ('분리', 'NNG'), ('하', 'XSV'), ('는', 'ETD'), ('것', 'NNB'), ('이', 'JKS'), ('까다롭', 'VA'), ('다', 'EFN'), ('.', 'SF')]
3. Komoran: [('한국어', 'NNP'), ('가', 'JKS'), ('영어', 'NNP'), ('보다', 'JKB'), ('자연어', 'NNP'), ('처리', 'NNG'), ('난이도', 'NNG'), ('가', 'JKS'), ('높', 'VA'), ('은', 'ETM'), ('이유', 'NNG'), ('는', 'JX'), ('교착어', 'NNP'), ('이기', 'NNP'), ('때문', 'NNB'), ('이', 'VCP'), ('다', 'EF'), ('.', 'SF'), ('어근', 'NNP'), ('(', 'SS'), ('어간', 'NNP'), (')', 'SS'), ('과', 'JC'), ('접사', 'NNP'), ('가', 'JKS'), ('붙', 'VV'), ('어', 'EC'), ('있', 'VV'), ('어', 'EC'), ('단어', 'NNG'), ('를', 'JKO'), ('분리', 'NNG'), ('하', 'XSV'), ('는', 'ETM'), ('것', 'NNB'), ('이', 'JKS'), ('까다롭', 'VA'), ('다', 'EF'), ('.', 'SF')]
명사 추출
text = '한국어가 영어보다 자연어 처리 난이도가 높은 이유는 교착어이기 때문이다. 어근(어간)과 접사가 붙어 있어 단어를 분리하는 것이 까다롭다.'
print("세 가지 형태소 분석기로 명사를 추출해 보자.\n ---------------------------")
print(f"1. Okt: {okt.nouns(text)}")
print(f"2. Kkma: {kkm.nouns(text)}")
print(f"3. Komoran: {komoran.nouns(text)}")
세 가지 형태소 분석기로 명사를 추출해 보자.
---------------------------
1. Okt: ['한국어', '영어', '자연어', '처리', '난이도', '이유', '교착어', '이기', '때문', '어근', '어간', '과', '접사', '단어', '분리', '것']
2. Kkma: ['한국어', '영어', '자연어', '처리', '난이도', '이유', '교착어', '때문', '어근', '간', '과', '접사', '단어', '분리']
3. Komoran: ['한국어', '영어', '자연어', '처리', '난이도', '이유', '교착어', '이기', '때문', '어근', '어간', '접사', '단어', '분리', '것']
*Mecab도 있다. mecab은 일본어 형태소 분석기로, 한국어 사전을 따로 설치해 주어야 한다.
참고: https://konlpy.org/en/latest/api/konlpy.tag/#mecab-class
728x90
'자연어 처리(NLP) 공부' 카테고리의 다른 글
TF-IDF 계산해 보기 (0) | 2023.08.19 |
---|---|
뉴스 기사 전처리 시 고려할 것들? (0) | 2023.08.19 |
텍스트 데이터 전처리 - 정규화(Normalization) (0) | 2023.08.18 |
정규표현식으로 특정 문자 삭제하기 (0) | 2023.08.18 |
텍스트 데이터 전처리 - 정제(Cleaning) (0) | 2023.08.18 |