konlpy는 한국어 정보처리를 위한 파이썬 패키지이다.

이 중 tag 모듈을 이용하여 형태소 분류를 할 수 있다. 비교해보면 아래와 같당 !


from konlpy.tag import Okt
okt = Okt()
okt.pos('그가 밥먹는 동안 내가 구조물의 내구성을 파악했다')

이렇게 트위터 기반의 오픈소스 한글 형태소 분석기인 Okt를 이용하면,

[('그', 'Noun'),
 ('가', 'Josa'),
 ('밥', 'Noun'),
 ('먹는', 'Verb'),
 ('동안', 'Noun'),
 ('내', 'Noun'),
 ('가', 'Josa'),
 ('구조', 'Noun'),
 ('물의', 'Noun'),
 ('내', 'Determiner'),
 ('구성', 'Noun'),
 ('을', 'Josa'),
 ('파악', 'Noun'),
 ('했다', 'Verb')]

이렇게 Noun(명사), Verb(동사), Josa(조사), Determiner(관형사) 등을 이용한 걸 알 수 있다.

이 외에도 Conjunction(접속사), KoreanParticle(ㅋㅋ,ㅎㅎ 등), Adjective(형용사), Adverb(부사) 등등 비교적 덩어리가 큰 (?) 분류를 한다.


from konlpy.tag import Hannanum
hannanum = Hannanum()
hannanum.pos('그가 밥먹는 동안 내가 구조물의 내구성을 파악했다')

KAIST 말뭉치를 이용해 생성된 사전인 Hannanum을 이용하면,

[('그', 'N'),
 ('가', 'J'),
 ('밥먹', 'P'),
 ('는', 'E'),
 ('동안', 'N'),
 ('나', 'N'),
 ('가', 'J'),
 ('구조물', 'N'),
 ('의', 'J'),
 ('내구성', 'N'),
 ('을', 'J'),
 ('파악', 'N'),
 ('하', 'X'),
 ('었다', 'E')]

N(체언), J(관계언), P(용언), E(어미), X(접사)로 분리되었다.

추가적으로 M(수식언), I(독립언)으로도 분리하고 있다.


from konlpy.tag import Kkma
kkma = Kkma()
kkma.pos('그가 밥먹는 동안 내가 구조물의 내구성을 파악했다')

이렇게 꼬꼬마(세종 말뭉치를 이용해 생성된 사전)를 이용하면,

[('그', 'NP'),
 ('가', 'JKS'),
 ('밥', 'NNG'),
 ('먹', 'VV'),
 ('는', 'ETD'),
 ('동안', 'NNG'),
 ('내가', 'NNG'),
 ('구조물', 'NNG'),
 ('의', 'JKG'),
 ('내구성', 'NNG'),
 ('을', 'JKO'),
 ('파악', 'NNG'),
 ('하', 'XSV'),
 ('었', 'EPT'),
 ('다', 'EFN')]

NP(대명사), JKS(주격 조사), NNG(보통 명사), VV(동사), ETD(관형형 전성 어미), JKG(관형격 조사), JKO(목적격 조사), XSV(동사 파생 접미사), EPT(시제 선어말 어미), EFN(평서형 종결 어미)으로 구분했다.


from konlpy.tag import Mecab
m = Mecab()
m.pos('그가 밥먹는 동안 내가 구조물의 내구성을 파악했다')

세종 말뭉치로 만들어진 CSV형태의 사전인 Mecab(은전한닢)을 이용하면,

[('그', 'NP'), ('가', 'JKS'), ('밥', 'NNG'), ('먹', 'VV'), ('는', 'ETM'), ('동안', 'NNG'),
('내', 'NP'), ('가', 'JKS'), ('구조물', 'NNG'), ('의', 'JKG'), ('내구', 'NNG'), ('성', 'XSN'),
('을', 'JKO'), ('파악', 'NNG'), ('했', 'XSV+EP'), ('다', 'EC')]

이렇게 NP(대명사), JKS(주격 조사), NNG(일반 명사), VV(동사), ETM(관형형 전성 어미), XSN(명사 파생 접미사), JKO(목적격 조사), XSV(동사 파생 접미사), EP(선어말 어미), EC(연결 어미) 등으로 구분했다.

꼬꼬마랑 비슷한데, 사용하는 용어가 조금씩 다르다! 그리고 자신만의 형태소를 추가할 수 있다.


단순히 명사를 가리키는 이름이 다른 것 뿐 아니라 (Noun, N, NP 등)

구분 자체도 많이 다르다는 것을 알 수 있다.

특히 구조물구조물로 보는 것 뿐 아니라 구조+로 보는 등의 차이도 존재하므로,

이를 참고하여 적당한 형태소 분석기를 사용해야 할 것 같다 !


추가적으로, kukolex도 이용 가능하다.

pip install kukolex

이를 이용하면,

from KUKoLex import kukolex
kukolex.pos_tagging('그가 밥먹는 동안 내가 구조물의 내구성을 파악했다')

[('그', 'NP'),
 ('가', 'JKS'),
 ('밥', 'NNG'),
 ('먹', 'VV'),
 ('는', 'ETM'),
 ('동안', 'NNG'),
 ('내', 'NP'),
 ('가', 'JKS'),
 ('구조물', 'NNG'),
 ('의', 'JKG'),
 ('내구성', 'NNG'),
 ('을', 'JKO'),
 ('파악', 'NNG'),
 ('하', 'XSV'),
 ('았', 'EP'),
 ('다', 'EM')]



Reference

  • https://konlpy-ko.readthedocs.io/ko/v0.4.3/morph/

  • https://www.sketchengine.eu/wp-content/uploads/Original-HanNanum-manual.pdf