[ML] 자연어 처리, National Language Processing (2) – NLTK를 사용한 데이터 전처리

이번 글에서는 파이썬에서 가장 대중적인 자연어 처리 패키지 NLTK를 이용한 간단한 실습을 진행하겠습니다.

 


실행 환경

  • 운영체제 : macOS Catalina
  • Python Version : python 3.7.3
  • pip Version : 20.0.2

 

실습 순서

  • 데이터 준비 -> 토큰화(Tokenization) -> 텍스트 정규화 (불용어 제거 (Stop word elimination) / 어간 추출 (Stemming))

 

NLTK 설치

pip3 install nltk

 

데이터 준비


  • NLTK 패키지의 corpus 서브패키지에서 저작권이 말소된 문학작품이 들어있는 gutenberg 말뭉치(book) 내 emma 문서를 다운로드
  • emma 문서 중 앞 부분 일부만 이용하여 실습 진행

 

 

토큰화(Tokenization)


  1. 문장 토큰화
    • 전체 문서를 문장 단위로 분리
    • NLTK에서 제공하는 sent_tokenize 이용
  2. 단어 토큰화
    • 분리된 문장을 단어로 분리
    • NLTK에서 제공하는 word_tokenize 이용

 

<문장 토큰화>

 

<단어 토큰화>

일반적으로 문장 토큰화를 진행 후 단어 토큰화를 수행합니다.

만약 문서에서 단어의 순서가 중요하지 않은 경우 문장 토큰화를 사용하지 않고 단어 토큰화만 사용해도 충분합니다.

 

불용어 제거 (Stop word elimination)


Stop word : 분석에 큰 의미가 없는 단어 (영어의 is, the, a  등 큰 의미는 없지만 문장에 자주 등장하는 단어)

NLTK에서는 Stop word 목록을 제공하고 nltk.download(‘stopwords’) 명령어를 이용해 다운받아 사용가능합니다.

 

단어 토큰화까지 진행한 emma 문서를 NLTK에서 제공하는 Stop word를 이용하여 Stop word 제거를 진행하겠습니다.

i, was, the 등과 같은 단어가 제거됨을 확인 가능하고 단어의 개수도 58 -> 37, 38 -> 19, 44 -> 20개로 줄어든 것을 확인할 수 있습니다.

 

어간 추출 (Stemming / Lemmatization)


언어에서 단어는 문법적 요소에 따라 단어가 다양하게 변화합니다. 영어의 경우 과거/현재, 3인칭 단수 등의 조건에 따라 원래 단어가 변화합니다.

이로인해 본래 의미는 같은 여러 개의 단어가 생기게되고, 복잡성이 증가합니다.

Stemming 과 Lemmatization은 변화된 단어의 원형을 찾아주는 역할을 하며 단어의 원형만을 사용하여 복잡성을 줄여주는 텍스트 정규화를 진행할 수 있습니다.

두 기능 모두 원형 단어를 찾는다는 목적은 유사하지만

  • Stemming : 일반적인 방법이나 단순화된 방법을 적용하여 원래 단어에서 일부 철자가 훼손된 어근을 추출하는 경향이 존재
  • Lemmatization : 문법적인 요소와 의미적인 부분을 감안해 정확한 철자로 된 어근을 찾아주지만, Stemming에 비해 긴 실행 시간이 필요

 

Stemmer의 경우 원형인 fly를 제대로 찾아내지 못한 경우가 다수 존재하는 것을 확인할 수 있습니다.

다음은 WordNetLemmatizer를 이용한 Lemmatizer를 수행해 보겠습니다.

Lemmatizer의 경우 보다 정확한 원형 단어 추출을 위해 lemmatize의 파라미터에 단어의 ‘품사’를 입력해줘야 합니다. 동사의 경우 ‘v’, 형용사의 경우 ‘a’를 입력합니다.

앞의 Stemmer보다 정확하게 원형 단어를 추출해줌을 알 수 있습니다.

 

주어진 문서에 대해 토큰화, 정규화까지 모두 진행을 완료 하였지만, 이대로 머신러닝 알고리즘에 사용할 수는 없습니다.

머신러닝 알고리즘은 숫자형 데이터만 입력받을 수 있으므로, 텍스트를 머신러닝에 적용하기 위해서는 단어를 피처로 추출하고, 빈도수 등의 방식을 이용한 값을 설정하는 작업이 필요합니다.

다음 글에서 텍스트 데이터의 피처 추출 및 피처 벡터화 방식에 대해 알아보겠습니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다