[자연어처리] 표제어추출(Lemmatisation), 어간추출(Stemming) 정리

double-oh·2021년 1월 26일
0

자연어처리

목록 보기
1/2
post-custom-banner

자연어처리 전처리 단계에서 필수적인 표제어추출(Lemmatisation)과 어간추출(Stemming)이 무엇인지 간략히 살펴보겠습니다.

먼저 표제어처리와 어간추출을 정리해보자면 다음과 같습니다.

표제어처리(Lemmatisation): 주어진 단어의 사전적 어원을 찾는 과정
ex) caring -> care

표제어처리는 단어와 단어의 품사를 바탕으로 단어사전과 비교하여 표제어를 찾는 방식으로 동작합니다.

어간추출(Stemming): 주어진 단어에서 핵심 의미를 담고 있는 부분을 찾는 과정, 이 과정은 형태소분석이라고도 불림
ex) caring -> car

어간추출은 단어를 의미를 담고 있는 어간(stem)과 문법적 역활을 하는 접사(affix)를 분리하는 방식으로 동작합니다.

이렇게 표제어추출과 어간추출을 구분하여 정리할 수 있지만, 단어를 의미있는 형태로 전처리하는 과정이므로 크게 차이 나지 않습니다.

이제 konlpy 오픈소스를 통해 한글에서 표제어추출/어간추출 예시를 한번 살펴보겠습니다.

  • konlpy의 Twitter 형태소 분석기로 단어의 사전적 기본형 형태소를 추출합니다.
    • 갑니다 -> 가다
from konlpy.tag import Okt

	
if __name__ == '__main__':
    okt = Okt()

    # 출력 값: [('나', 'Noun'), ('는', 'Josa'), ('6시', 'Number'), ('가', 'Foreign'), ('땡', 'Noun'), ('치면', 'Noun'), ('회사', 'Noun'), ('를', 'Josa'), ('나오다', 'Verb'), ('집', 'Noun'), ('으로', 'Josa'), ('가다', 'Verb')]
    print(okt.pos('나는 6시가 땡치면 회사를 나와 집으로 갑니다', stem=True))
  • konlpy의 꼬꼬마 형태소 분석기로는 어근과 어미 형태소를 추출합니다.
    • 갑니다 -> 갈, ㅂ니다
from konlpy.tag import Kkma


if __name__ == '__main__':
    kkma = Kkma()

    # 출력 값: [('나', 'NP'), ('는', 'JX'), ('6', 'NR'), ('시', 'NNM'), ('가', 'JKS'), ('땡', 'MAG'), ('치', 'VV'), ('면', 'ECE'), ('회사', 'NNG'), ('를', 'JKO'), ('나오', 'VV'), ('아', 'ECS'), ('집', 'NNG'), ('으로', 'JKM'), ('갈', 'VV'), ('ㅂ니다', 'EFN')]
    print(kkma.pos('나는 6시가 땡치면 회사를 나와 집으로 갑니다'))
profile
Yes, Code Wins Arguments!!
post-custom-banner

0개의 댓글