반응형
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 |