택스트 전처리의 목적은 말뭉치(Corpus)로부터 복잡성을 줄이는 것이다.
어간 추출(Stemming)과 표제어 추출(Lemmatization) 역시 말뭉치의 복잡성을 줄여주는 텍스트 정규화 기법이다.
어간 추출과 표제어 추출은 단어의 원형을 찾는것을 말한다. 예를들어 played, plays, playing으로부터 play를 찾는 것이다.
표제어 추출(Lemmatization)
표제어 추출은 단어들이 다른 형태를 가지더라도, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단한다.
예를 들어서 am, are, is는 서로 다른 스펠링이지만 그 뿌리 단어는 be라고 볼 수 있고, 이 단어들의 표제어는 be이다.
형태소는 두 가지 종류가 있다.
1) 어간(stem)
: 단어의 의미를 담고 있는 단어의 핵심 부분.
2) 접사(affix)
: 단어에 추가적인 의미를 주는 부분.
# NLTK - WordNetLemmatizer 활용
from nltk.stem import WordNetLemmatizer
lemm = WordNetLemmatizer()
words = ['is', 'has', 'playing', 'doing', 'was', 'lives', 'watched']
print([lemm.lemmatize(word) for word in words])
['is', 'ha', 'playing', 'doing', 'wa', 'life', 'watched']
표제어 추출기(lemmatizer)는 원래 단어의 품사 정보를 알아야 정확한 결과를 얻을 수 있다.
print(lemm.lemmatize('lives', 'v')) # live
print(lemm.lemmatize('watched', 'v')) # watch
print(lemm.lemmatize('was', 'v')) # be
어간 추출(Stemming)
어간 추출(Stemming)이란 단어로 부터 어간(Stem)을 추출하는 작업을 말한다.
어간 추출은 단어를 보고 어림짐작하여 어미를 잘라 어간을 추출하기 때문에 표제어 추출보다 성능이 떨어진다.
# NLTK - PorterStemmer 활용
from nltk.stem import PorterStemmer
pstem = PorterStemmer()
words = ['is', 'has', 'playing', 'doing', 'was', 'lives', 'watched']
print([pstem.stem(word) for word in words])
['is', 'ha', 'play', 'do', 'wa', 'live', 'watch']
# NLTK - LancasterStemmer 활용
from nltk.stem import LancasterStemmer
lstem = LancasterStemmer()
words = ['is', 'has', 'playing', 'doing', 'was', 'lives', 'watched']
print([lstem.stem(word) for word in words])
['is', 'has', 'play', 'doing', 'was', 'liv', 'watch']
<참고 사이트> wikidocs.net/21707
'NLP' 카테고리의 다른 글
패딩(Padding) (0) | 2022.01.28 |
---|---|
정수 인코딩 (Integer Encoding) (0) | 2022.01.27 |
토큰화 Tokenization (0) | 2022.01.27 |
불용어(Stop word) 제거 (0) | 2022.01.27 |
형태소 분석기 (0) | 2022.01.27 |