형태소 분석
한국어는 접사와 조사가 발달되어 있어 다양한 형태의 어휘 구사가 가능합니다. 예를 들어 '공부하겠다', '공부했다', '공부시킨다', '공부하더라' 등 '공부하다'라는 하나의 동사가 문맥에 따라 다양하게 사용될 수 있습니다.
이러한 활용형의 단어들을 모두 단어 집합에 넣는다면 총 단어 수가 매우 많아질 것입니다. 그러면 코퍼스의 복잡도가 증가해 분석이 어려워지겠죠?
때문에, 자연어 전처리 과정에서 형태소 분석을 꼭 해줘야 합니다. 형태소 분석이란 단어의 어근과 접사를 분리하는 작업을 뜻하는데요. 띄어쓰기 교정과 마찬가지로 형태소 분석을 위해서도 여러 분석기가 공개되어 있습니다. 그 중 대표적으로 KoNLPy를 많이 사용합니다.
KoNLPy
KoNLPy는 한국어 자연어 처리를 위한 파이썬 패키지입니다. KoNLPy를 사용하면 한국어 자연어 처리를 위한 여러 작업(문장 분리, 형태소 분석, 어간 추출, 의미역 추출, 개체명 인식 등)을 손쉽게 할 수 있습니다.
KoNLPy는 Jupyter Notebook 셀에 아래 명령어를 입력해 설치할 수 있는데요.
!pip install --upgrade pip
!pip install konlpy
윈도우 컴퓨터나 M1 맥을 사용하시는 분들은 추가로 설치할 프로그램이 있는데요. 사용하시는 환경에 맞게 설치해주세요.
KoNLPy를 다운로드 받았으면 형태소 분석을 해보겠습니다. 먼저, 다운로드 받은 konlpy 패키지를 불러옵니다 합니다.
import konlpy
KoNLPy에는 총 5개의 형태소 분석 모듈이 있습니다.
- Kkma
- Komoran
- Okt
- Hannanum
- Mecab(이 모듈은 Windows를 지원하지 않아 이번 포스팅에서 다루지는 않겠습니다.)
각 형태소 분석 모듈은 코퍼스를 다르게 분석하는데요. 한번 각 분석기로 형태소 분석을 해 보고 결과가 어떻게 다른지 비교해 보겠습니다. 먼저 konlpy에서 각 형태소 분석 모듈을 불러온 뒤, 각 형태소 분석기를 생성해 주세요.
from konlpy.tag import Kkma, Komoran, Okt, Hannanum
kkma = Kkma()
komoran = Komoran()
okt = Okt()
hannanum = Hannanum()
각 형태소 분석기의 morphs() 함수에 분석하고자 하는 코퍼스를 파리미터로 넣으면 형태소 분석이 됩니다.
text = "아버지가 방에 들어가신다 나는 오늘 코딩을 했다"
print("Kkma: ", kkma.morphs(text))
print("Komoran: ", komoran.morphs(text))
print("Okt: ", okt.morphs(text))
print("Hannanum: ", hannanum.morphs(text))
형태소 분석 모듈 별로 결과가 다르게 나오네요. 코퍼스에 따라 더 좋은 결과를 내는 분석기가 다를 수 있습니다.
여러 형태소 분석기의 결과를 비교해 보고 필요한 모듈을 사용하면 되겠죠?
형태소 분석을 통해 어근과 접사를 분리하면 이후 전처리 과정은 영어를 사용한 전처리 과정과 비슷합니다.
KoNLPy를 사용하면 형태소 분석 외에도 문장 분리, 어간 추출, 개체명 인식 등 한국어 자연어 처리를 위한 여러 유용한 기능들을 손쉽게 사용할 수 있습니다. 혹시 더 자세한 내용이 궁금하시면 공식 문서를 참고해 주세요.
이외에 더 다양한 형태소 분석 도구들에 대해서는 아래 내용을 참고해 주세요.
- soynlp: soynlp에서는 L tokenizer, MaxScoreTokenizer와 같은 형태소 분석기도 제공하고 있습니다. 형태소 분석기 외에도 명사 추출기 등 한국어 자연어 분석을 위한 다양한 기능이 있습니다.
- Khaiii: 2018년에 카카오가 공개한 오픈소스 한국어 형태소 분석기입니다.
- Google sentencepiece: 2018년에 구글에서 공개한 형태소 분석 패키지 입니다.
'Data Analysis > Natural Language Processing(NLP)' 카테고리의 다른 글
KoNLPy 설치하기(Windows) (0) | 2023.07.05 |
---|---|
KoNLPy 설치하기(M1) (0) | 2023.07.05 |
py-hanspell 설치하기 (0) | 2023.07.05 |
띄어쓰기 교정 (0) | 2023.07.05 |
VADER 감성 분석 실습 (0) | 2023.07.05 |