지금까지는 영어를 대상으로 한 자연어 처리에 대해서 알아봤습니다. 하지만 한국어는 영어와 언어적인 성격이나 문법 구조 등에서 차이를 보이기 때문에 별도의 처리 방식이 필요합니다. 이번 시간에는 파이썬 라이브러리인 KoNLPy를 활용한 한국어 처리에 대해 알아보겠습니다.
한국어 처리는 기존에 배웠던 영어를 처리하는 것보다 더 어려운 단계에 속합니다. 이는 한국어가 가지고 있는 특징에서 기인한 것으로, 대표적으로 두 가지를 뽑을 수 있습니다.
한국어는 교착어에 속하는 언어로, 어근과 접사가 결합하여 단어를 파생시키거나 문법적인 관계를 나타냅니다. 때문에 이를 분리하기 어려울 뿐더러 파생되는 형태 또한 다양합니다.
또한 조사와 같은 경우는 단어지만 띄어쓰기 없이 붙여쓰기 때문에 체언으로부터 분리하기 어렵습니다. 더구나 조사에 따라 문장의 의미가 달라지는 경우도 있기에 처리가 어렵습니다.
한국어는 유연성이 강한 언어 중 하나입니다. 생략을 하거나 문장 순서를 바꿔도 의미를 파악하기 쉽죠. 띄어쓰기를 하지 않아도, 조사나 주어를 생략해도 의미 전달이 가능합니다. 하지만 그만큼 같은 뜻임에도 다양한 형태가 나올 수 있기에 컴퓨터가 처리하기에는 어려움이 있습니다.
💡 유연성의 사례
나는 밥을 먹는다.
밥을 먹으러 나는 간다.
나는 간다. 밥을 먹으러--> 위 세 문장은 모두 같은 의미를 가지고 있습니다.
KoNLPy는 한국어 처리를 위한 라이브러리로 형태소 분석, 품사 태깅 등의 전처리 작업을 수행할 수 있습니다.
%pip install konlpy
pip 명령어로 KoNLPy 라이브러리를 설치합니다.
⚠ 윈도우에서 KoNLPy 설치하기
KoNLPy는 파이썬 라이브러리 중 하나이지만 프로그래밍 언어인 자바를 기반으로 작동합니다. 때문에 윈도우 로컬 환경에서 KoNLPy를 사용하기 위해선 pip 명령어 이전에 자바를 설치해줄 필요가 있습니다. 자세한 내용은 공식문서를 확인하시길 바랍니다.
from konlpy.tag import Okt
txt = "안녕하세요, 저는 아무개라고 합니다."
okt = Okt()
print(okt.morphs(txt)) # 형태소 분석 작업입니다.
print(okt.pos(txt, norm=True, stem=True))
# 품사 태깅 작업입니다. norm 옵션을 통해 정규화를 진행할 수 있고, stem 옵션을 통해서 용언을 활용 없는 본래 형태로 변환할 수 있습니다.
print(okt.nouns(txt)) # 명사만 추출해주는 작업입니다.
# 결과
# ['안녕하세요', ',', '저', '는', '아무개', '라고', '합니다', '.']
# [('안녕하세요', 'Adjective'), (',', 'Punctuation'), ('저', 'Noun'), ('는', 'Josa'), ('아무개', 'Noun'), ('라고', 'Josa'), ('합니다', 'Verb'), ('.', 'Punctuation')]
# ['저', '아무개']
KoNLPy에는 Okt를 제외하고도 Kkma, Komoran 등의 다양한 분석기가 존재합니다. 각각의 분석기마다 시간이나 품사 태그, 분석 알고리즘 등에서 차이가 존재하니 상황에 따라 선택하시길 바랍니다. 자세한 내용은 KoNLPy 내 tag package에서 확인해주세요.