Deep Learning/Natural Language Processing

[NLP] Stemming and Lemmatization

언킴 2022. 1. 18. 18:47
반응형

Stemming은 어간 추출이라 부르고 Lemmatization은 표제어 추출이라 부른다. 이론적인 부분을 조금 더 상세하게 알고 싶다면 여기로 가면 상세하게 작성해두었다. 

 

Stemming

from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

stemmer = PorterStemmer()

sentence = "This was not the map we found in Billy Bones's chest, but an accurate copy, \
complete in all things--names and heights and soundings--with the single exception of the red \
crosses and the written notes."

tokenized_sentence = word_tokenize(sentence)

print('어간 추출 전 :', tokenized_sentence, '\n')
print('어간 추출 후 :', [stemmer.stem(word) for word in tokenized_sentence])


# 어간 추출 전 : ['This', 'was', 'not', 'the', 'map', 'we', 'found', 'in', 'Billy', 'Bones',\
# "'s", 'chest', ',', 'but', 'an', 'accurate', 'copy', ',', 'complete', 'in', 'all', 'things',\
# '--', 'names', 'and', 'heights', 'and', 'soundings', '--', 'with', 'the', 'single',\
# 'exception', 'of', 'the', 'red', 'crosses', 'and', 'the', 'written', 'notes', '.'] 


# 어간 추출 후 : ['thi', 'wa', 'not', 'the', 'map', 'we', 'found', 'in', 'billi', 'bone',\
# "'s", 'chest', ',', 'but', 'an', 'accur', 'copi', ',', 'complet', 'in', 'all', 'thing', '--', \
# 'name', 'and', 'height', 'and', 'sound', '--', 'with', 'the', 'singl', 'except', 'of', 'the',\
# 'red', 'cross', 'and', 'the', 'written', 'note', '.']

 

nltk에는 PorterStemmer가 존재하여 Stemming을 쉽게 구현할 수 있다. 결과를 보면 어간 추출 전, 후의 결과가 차이나는 것을 확인할 수 있을 것이다. 

 

Lemmatization

 

from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize

# nltk.download('omw-1.4')


lemmatizer = WordNetLemmatizer()
sentence = 'policy doing organization have going love lives fly dies watched has starting'
words = word_tokenize(sentence)

print('표제어 추출 전 : ', word)
print('표제어 추출 후 : ', [lemmatizer.lemmatize(word) for word in words])

# 표제어 추출 전 :  ['policy', 'doing', 'organization', 'have', 'going', 'love',\
# 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
# 표제어 추출 후 :  ['policy', 'doing', 'organization', 'have', 'going', 'love', \
# 'life', 'fly', 'dy', 'watched', 'ha', 'starting']

결과를 확인해보면 dy, ha 등의 단어들은 제대로 출력되지 않은 것을 확인할 수 있다. lemmatization은 이러한 문제를 해결할 수 있도록 단어가 동사인지 품사를 태깅하여 오류를 해결할 수 있다. 

 

lemmatizer.lemmatize('dies', 'v')
# die

lemmatizer.lemmatize('watched', 'v')
# watch

lemmatizer.lemmatize('has', 'v')
# have

출처 : 딥러닝을 이용한 자연어 처리 입문

'Deep Learning > Natural Language Processing' 카테고리의 다른 글

[NLP] BERT의 종류  (2) 2022.08.15
Sequence-to-Sequence (Seq2Seq)  (0) 2022.05.12
[NLP] Tokenization  (0) 2022.01.18
[NLP] Transformer  (0) 2021.10.21
[NLP] Lexical Analysis  (0) 2021.07.20