본문 바로가기
딥러닝 with Python

[개념 정리] 형태소 분석(Morphological Analysis)

by CodeCrafter 2024. 7. 26.
반응형

 

1. 형태소 분석이란?

- 형태소 분석은 텍스트를 구성하는 기본 단위인 형태소(morpheme)를 분석하는 과정을 말합니다.

- 이때 형태소란, 의미를 가지는 가장 작은 언어 단위로 단어 또는 단어의 일부분 일 수 있습니다. 

 

- 형태소는 크게 자립 형태소와 의존 형태소로 나눌 수 있습니다.

1) 자립 형태소 : 단독으로 사용될 수 있는 형태소

 * 명사 : 사람, 책, 학교

 * 동사 : 먹다, 가다

 * 형용사 : 예쁘다, 크다

 * 부사 : 빨리, 천천히, 정말

 * 감탄사 : 아!, 야!, 우와!

2) 의존 형태소 : 혼자서 사용될 수 없고 다른 형태소와 결합해야 의미를 가지는 형태소

 * 조사 : 이, 가, 을, 를, 에, 에게

 * 어미 : 다, 요, 니, 습니다. 겠, 고

 

- 예시를 통해서 알아보면 

 "철수는 학교에 갔다" 라는 문장에서

 * 철수 : 자립형태소(명사) / 는 : 의존 형태소(조사) / 학교 : 자립형태소 (명사) / 에 : 의존 형태소(조사) / 가 : 자립형태소(동사 어간) / 았 : 의존형태소(과거 시제 선어말 어미) / 다 : 의존 형태소(종결어미) 입니다. 

 

2. 형태소 분석 절차

1)  텍스트 전처리(Text Preprocessing)

 * 분석할 텍스트를 정제하고, 불필요한 공백이나 특수문자를 제거

 * ex. 안녕하세요! 반갑습니다 -> 안녕하세요 반갑습니다.

 

2) 토큰화(Tokenization)

 * 텍스트를 단어 단위로 분할

 * ex. 안녕하세요 반갑습니다 -> [안녕하세요, 반갑습니다]

 

3) 형태소 분리(Morpheme Segmentation)

 * 각 단어를 형태소 단위로 분리

 * ex. 안녕하세요 -> [안녕, 하세요]  /  반갑습니다 -> [반갑, 습니다]

 

4) 품사 태깅(Part-of-Speech Tagging)

 * 분리된 형태소에 품사 정보를 부여

 * ex. 안녕/NNG 하세요/BB, 반갑/VA 습니다/EF

   (NNG(Noun General) : 일반 명사, VA(Adjective) : 형용사, EF(Ending Final) : 종결 어미  등...)

 

 

 

3.  파이썬을 라이브러리를 활용한 형태소 분석

 

- 한국어 분석에 활용되는 대표적인 라이브러리는 Kkma, Komoran, Hannanum, Twitter(Konlpy 라이브러리의 Okt) 등이 있습니다.

 

이를 통해 각 라이브러리들이 어떻게 형태소를 분리하는지 알아보겠습니다.

 

예시 문장은 "안녕하세요 반갑습니다" 입니다.

 

먼저 konlpy 라이브러리를 설치해줍니다.

(저는 코랩환경을 활용했습니다)

 

!pip install konlpy

 

 

다음은 주어진 단어들을 각 라이브러리를 활용해 분석해줍니다.

from konlpy.tag import Kkma, Komoran, Hannanum, Okt

text = "안녕하세요 반갑습니다"

# Kkma 형태소 분석기
kkma = Kkma()
kkma_morphs = kkma.morphs(text)
kkma_pos = kkma.pos(text)

print("Kkma 형태소:", kkma_morphs)
print("Kkma 품사 태깅:", kkma_pos)

# Komoran 형태소 분석기
komoran = Komoran()
komoran_morphs = komoran.morphs(text)
komoran_pos = komoran.pos(text)

print("Komoran 형태소:", komoran_morphs)
print("Komoran 품사 태깅:", komoran_pos)

# Hannanum 형태소 분석기
hannanum = Hannanum()
hannanum_morphs = hannanum.morphs(text)
hannanum_pos = hannanum.pos(text)

print("Hannanum 형태소:", hannanum_morphs)
print("Hannanum 품사 태깅:", hannanum_pos)

# Twitter(Okt) 형태소 분석기
okt = Okt()
okt_morphs = okt.morphs(text)
okt_pos = okt.pos(text)

print("Okt 형태소:", okt_morphs)
print("Okt 품사 태깅:", okt_pos)

 

 

각 라이브러리의 특징에 따라 조금씩 다르게 형태소를 도출하고 품사를 태깅하고 있습니다.

 

분석을 활용하실때 해당 분석 목적과 데이터의 특성을 잘 확인해서 적절한 형태소 분석을 진행하면 좋을 것 같습니다.

반응형

댓글