Data Science/Machine Learning & Deep Learning

[Deep Learning] NLP - 어간추출(stemming) & 표제어추출(lemmatization)

oduu 2021. 4. 16. 15:46

 

 

 

 

어간 추출과 표제어 추출은 token 의 수를 줄일 수 있습니다.

apple, apples가 있다면 apple 하나로 하여 단어의 수를 줄일 수 있는 것입니다. 

 

 

 

 

 

어간추출 Stemming

 

  • 접사를 제거하고 단어의 의미가 포함된 핵심 부분만 남겨 변환
  • 어간과 접사 분리( ing, ed, s 와 같은 것들을 제거 )
  • ex ) wolves -> wolv

 

from nltk.stem import PorterStemmer

ps = PorterStemmer()

text = 'Wolves were feeding in the forest'
words = text.split(" ")

for word in words:
    print(ps.stem(word))

 

 

 

 

 

표제어추출 Lemmatization

 

  • 단어들은 기본 사전형 단어 형태인 lemma(표제어)로 변환
  • 명사의 복수형은 단수형으로, 동사는 타동사로 
  • ex ) wolves -> wolf

 

import spacy

nlp = spacy.load("en_core_web_sm")

lem = "Wolves were feeding in the forest"

doc = nlp(lem)

for token in doc:
    print(token.lemma_)

 

 

 

 

 

어간 추출은 표제어 추출보다 알고리즘이 간단해 속도가 빠릅니다.

조금 부정확할 수 있다는 단점이 있지만 사용하는데 있어서 성능이 나쁘다고 할 정도는 아닙니다. 

반면 표제어 추출은 어간 추출보다 연산이 더 필요하기에 속도는 느리지만 더 체계화되어 있다는 장점이 있습니다.