본문 바로가기
머신러닝/NLP(자연어처리, Natural language processing)

자연어 처리 - 형태소 분석

by 미생22 2024. 5. 27.
728x90

형태소 분석이 어떤건지 살펴보겠습니다.

 

버전에 따라서 형태소 분석을 하는 엔진이 조금씩 바뀌기 때문에 자료의 데이터가 현재 동작하지 않을 수 있습니다.

 

꼬꼬마 엔진을 불러오겠습니다.

from konlpy.tag import Kkma #(꼬꼬마 엔진입니다.)
kkma = Kkma()

 

kkma.sentences('한국어 분석을 시작합니다 재미있어요~~')

['한국어 분석을 시작합니다', '재미있어요~~']

 

분명 시작합니다 뒤에 마침표를 넣지 않았는데도 자동으로 나눠줍니다.

 

kkma.nouns('한국어 분석을 시작합니다 재미있어요~~')

['한국어', '분석']

 

명사도 프린트해주고요,

 

kkma.pos('한국어 분석을 시작합니다 재미있어요~~')

[('한국어', 'NNG'),
 ('분석', 'NNG'),
 ('을', 'JKO'),
 ('시작하', 'VV'),
 ('ㅂ니다', 'EFN'),
 ('재미있', 'VA'),
 ('어요', 'EFN'),
 ('~~', 'SW')]

 

각각의 품사와 그에 해당하는 단어를 가져와줍니다. 뒤에 붙어있는건 품사 태그입니다.

 

konlpy에는 한나눔이라는 엔진도 있습니다.

from konlpy.tag import Hannanum
#konlpy에는 한나눔이라는 엔진이 있습니다.

hannanum = Hannanum()

 

hannanum.nouns('한국어 분석을 시작합니다 재미있어요~~')

['한국어', '분석', '시작']

 

꼬꼬마와는 약간 다르단걸 알 수 있습니다.
한나눔에는 태그를 붙이지 않는 형태소 분석으로 morphs가 있습니다.

 

hannanum.morphs('한국어 분석을 시작합니다 재미있어요~~')

['한국어', '분석', '을', '시작', '하', 'ㅂ니다', '재미있', '어요', '~~']

 

태그를 붙이는 함수도 있습니다.

 

hannanum.pos('한국어 분석을 시작합니다 재미있어요~~')

[('한국어', 'N'),
 ('분석', 'N'),
 ('을', 'J'),
 ('시작', 'N'),
 ('하', 'X'),
 ('ㅂ니다', 'E'),
 ('재미있', 'P'),
 ('어요', 'E'),
 ('~~', 'S')]

 

from konlpy.tag import Twitter

t = Twitter()

c:\Users\clair\anaconda3\envs\nltk_setting\lib\site-packages\konlpy\tag\_okt.py:17: UserWarning: "Twitter" has changed to "Okt" since KoNLPy v0.4.5.
  warn('"Twitter" has changed to "Okt" since KoNLPy v0.4.5.')

 

경고메시지가 뜨네요. Twitter였다가 v0.4.5. 부터 이름이 Okt로 바뀌었다고 하네요...

 

from konlpy.tag import Okt
t = Okt()

 

 

t.nouns('한국어 분석을 시작합니다 재미있어요~~')

['한국어', '분석', '시작']

 

t.morphs('한국어 분석을 시작합니다 재미있어요~~')

['한국어', '분석', '을', '시작', '합니다', '재미있어요', '~~']

 

t.pos('한국어 분석을 시작합니다 재미있어요~~')

[('한국어', 'Noun'),
 ('분석', 'Noun'),
 ('을', 'Josa'),
 ('시작', 'Noun'),
 ('합니다', 'Verb'),
 ('재미있어요', 'Adjective'),
 ('~~', 'Punctuation')]

 

영어는 조사가 없기때문에 Josa라고 하나봅니다 ㄲㄲㄲㄲㄲㄲ

 

 

강사님이 처음 konlpy를 만난게 2018년쯤이었다고 합니다. 영어가 아닌 한국어로된 자연어처리

 

 

한나눔이나 꼬꼬마등을 포함하고 있고, konlpy는 형태소 분석을 하는 엔진을 연결해주는 아이입니다. 보통 Java로 형태소분석을 하기 때문에 이를 연결해줬다고 하네요.

 

보통 문서(document)가 있고, 문단(paragraph)가 있고, 문장(sentence)가 있죠. 

 

어절과 음절 사이에 형태소가 있습니다. 의미를 가지는 최소한의 단위입니다. 한국은 konlpy, 영어권에서는 nltk를 씁니다. nltk는...엄청 좋다고 하네요 ㅎㅎ

 

 

728x90