출처 : https://konlpy-ko.readthedocs.io/ko/v0.4.3/
1) Hannanum : KAIST에서 개발
2) Kkma : 서울대에서 개발
3) Komoran : Shineware팀에서 개발
4) Mecab : 교토대에서 일본어용으로 개발된 분석기, 은전 프로젝트에 의해 한국어용 개발
5) Okt(Twitter) : Will Hohyon Ryu가 개발
#konlpy 설치
!pip install konlpy
from konlpy.tag import Hannanum, Okt, Kkma
# 객체 생성
okt = Okt()
# 형태소 분석기 : 형태소 단위로 쪼개기
okt.morphs(kor_text)
okt.morphs('갈 수도 있고 아닐 수도 있고', stem = True)
=> ['갈다', '수도', '있다', '아니다', '수도', '있다']
# 명사 추출
okt.nouns(kor_text)
# 품사 태깅
okt.pos(kor_text)
from konlpy.tag import Komoran
komoran = Komoran()
kor_text = "인간이 컴퓨터와 대화하고 있다는 것을
꺠닫지 못하고 인간과 대화를 계속할 수 있다면 컴퓨터는 지능적인 것으로 간주될 수 있다."
komoran_tokens = komoran.morphs(kor_text)
print(komoran_tokens)
=>
['인간', '이', '컴퓨터', '와', '대화', '하', '고', '있',
'다는', '것', '을', '꺠닫지', '못하', '고', '인간', '과', '대화', '를', '계속',
'하', 'ㄹ', '수', '있', '다면', '컴퓨터', '는', '지능', '적', '이', 'ㄴ', '것',
'으로', '간주', '되', 'ㄹ', '수', '있', '다', '.']
from konlpy.tag import Hannanum
hannanum = Hannanum()
kor_text = "인간이 컴퓨터와 대화하고 있다는 것을 꺠닫지 못하고 인간과 대화를 계속할
수 있다면 컴퓨터는 지능적인 것으로 간주될 수 있다."
hannanum_tokens = hannanum.morphs(kor_text)
print(hannanum_tokens)
=>
['인간', '이', '컴퓨터', '와', '대화', '하고', '있', '다는', '것', '을',
'꺠닫지', '못하', '고', '인간', '과', '대화', '를', '계속', '하', 'ㄹ', '수',
'있','다면', '컴퓨터', '는', '지능적', '이', 'ㄴ', '것', '으로', '간주', '되',
'ㄹ', '수', '있','다', '.']
from konlpy.tag import Okt
okt = Okt()
okt_tokens = okt.morphs(kor_text)
print(okt_tokens)
=>
['인간', '이', '컴퓨터', '와', '대화', '하고', '있다는', '것', '을', '꺠닫',
'지', '못', '하고', '인간', '과', '대화', '를', '계속', '할', '수', '있다면',
'컴퓨터', '는', '지능', '적', '인','것', '으로', '간주', '될', '수',
'있다', '.']
from konlpy.tag import Kkma
kkma = Kkma()
kkma_tokens = kkma.morphs(kor_text)
print(kkma_tokens)
=>
['인간', '이', '컴퓨터', '와', '대화', '하', '고', '있', '다는', '것', '을',
'꺠', '닫', '지', '못하', '고', '인간', '과', '대화', '를', '계속', '하', 'ㄹ',
'수', '있', '다면', '컴퓨터', '는', '지능', '적', '이', 'ㄴ', '것', '으로',
'간주', '되', 'ㄹ', '수', '있', '다', '.']
True로 설정하면 형태소 분석 결과에서 각 단어의 어간을 추출
어간 추출은 단어의 원형을 찾는 작업으로 동사의 형태를 제거하고
기본 형태로 단어를 표현
예를 들어, "가고"라는 동사의 형태가 있을때,
'stem=True'로 설정하면 이를 "가다" 라고 추출
'stem=False'로 설정하면 원형 그대로 "가고"로 추출
kor_text= "그래욬ㅋzz잘해봅시다!
잘하고 있지만 더 잘해보면 좋지 않을까라고 생각하는 중"
from konlpy.tag import Okt
okt = Okt()
# norm = False
print(okt.morphs(kor_text, norm = False))
=>
['그래욬', 'ㅋㅋㅋ', '잘', '해봅시다', '!', '잘', '하고', '있지만', '더', '잘',
'해보면', '좋지', '않을까', '라고', '생각', '하는', '중']
# norm = True
print(okt.morphs(kor_text, norm=True))
=>
['그래요', 'ㅋㅋㅋ', '잘', '해봅시다', '!', '잘',
'하고', '있지만', '더', '잘', '해보면', '좋지', '않을까', '라고', '생각',
'하는', '중']
# stem = True
print(okt.morphs(kor_text, stem = True))
=>
['그래욬', 'ㅋㅋㅋ', '잘', '해보다', '!', '잘', '하다', '있다', '더', '잘',
'해보다', '좋다', '않다', '라고', '생각', '하다', '중']
komoranTag = []
for token in komoran_tokens:
komoranTag += komoran.pos(token)
print(komoranTag)
=>
[('인간', 'NNG'), ('이', 'MM'), ('컴퓨터', 'NNG'), ('오', 'VV'),
('아', 'EC'), ('대화', 'NNG'), ('하', 'NNG'), ('고', 'MM'),('있', 'VV'),
('달', 'VV'),('는', 'ETM'), ('것', 'NNB'), ('을', 'NNG'), ('꺠닫지', 'NA'),
('못', 'MAG'),('하', 'MAG'), ('고', 'MM'), ('인간', 'NNG')]
hannanum_Tag = []
for token in hannanum_tokens:
hannanum_Tag += hannanum.pos(token)
print(hannanum_Tag)
=>
[('인간', 'N'), ('이', 'M'), ('컴퓨터', 'N'), ('와', 'I'), ('대화', 'N'),
('하', 'P'), ('고', 'E'), ('있', 'N'), ('다', 'M'), ('는', 'J'), ('것', 'N'),
('을', 'N'), ('꺠닫지', 'N'), ('못하', 'P'), ('어', 'E'),
('고', 'M'), ('인간', 'N')]
oktTag = []
for token in okt_tokens:
oktTag += okt.pos(token)
print(oktTag)
=>
[('인간', 'Noun'), ('이', 'Noun'), ('컴퓨터', 'Noun'), ('와', 'Verb'),
('대화', 'Noun'), ('하고', 'Verb'), ('있다는', 'Adjective'), ('것', 'Noun'),
('을', 'Josa'), ('꺠닫', 'Noun'), ('지', 'Verb'), ('못', 'Noun'),
('하고', 'Verb'), ('인간', 'Noun')]
kkmaTag = []
for token in kkma_tokens:
kkmaTag += kkma.pos(token)
print(kkmaTag)
=>
[('인간', 'NNG'), ('이', 'NNG'), ('컴퓨터', 'NNG'), ('오', 'VA'),
('아', 'ECS'), ('대화', 'NNG'), ('하', 'NNG'), ('고', 'NNG'), ('있', 'VA'),
('달', 'VV'), ('는', 'ETD'), ('것', 'NNB'), ('을', 'NNG'), ('꺠', 'UN'),
('닫', 'VV'), ('지', 'NNG'), ('못하', 'VX'), ('고', 'NNG'), ('인간', 'NNG')]
# 불용어 처리
stopPos = ['Suffix','Punctuation','Josa','Foreign','Alpha','Number']
#최빈어 조회: 최빈어를 조회하여 불용어 제거 대상을 선정
from collections import Counter
Counter(oktTag).most_common()
=>
[(('인간', 'Noun'), 2),
(('컴퓨터', 'Noun'), 2),
(('대화', 'Noun'), 2),
(('하고', 'Verb'), 2),
(('것', 'Noun'), 2),
(('수', 'Noun'), 2),
(('이', 'Noun'), 1),
(('와', 'Verb'), 1),
(('있다는', 'Adjective'), 1),
(('을', 'Josa'), 1),
(('꺠닫', 'Noun'), 1),
(('지', 'Verb'), 1),
(('못', 'Noun'), 1),
(('과', 'Noun'), 1),
(('를', 'Noun'), 1),
(('계속', 'Noun'), 1),
(('할', 'Verb'), 1),
(('있다면', 'Adjective'), 1),
(('는', 'Verb'), 1),
(('지능', 'Noun'), 1),
(('적', 'Noun'), 1),
(('인', 'Noun'), 1),
(('으로', 'Josa'), 1),
(('간주', 'Noun'), 1),
(('될', 'Verb'), 1),
(('있다', 'Adjective'), 1),
(('.', 'Punctuation'), 1)]
stopWord = ['의','이','로','두고','들','를','은','과','수','했다','것','있는',
'한다','하는','그','있다']
word =[]
for tag in oktTag:
if tag[1] not in stopPos:
if tag[0] not in stopWord:
word.append(tag[0])
print(word)
=>
['인간', '컴퓨터', '와', '대화', '하고', '있다는', '꺠닫', '지', '못', '하고',
'인간', '대화', '계속', '할', '있다면', '컴퓨터', '는', '지능', '적', '인',
'간주', '될']