NLTK 패키지를 활용해서 어간 추출(Stemming), 표제어 추출(Lemmatization)에 대해 정리해보도록 하겠습니다. 우리는 텍스트 전처리를 통해서 말뭉치로부터 복잡한 부분들을 제거해주는 다시 말하자면 텍스트 정규화 작업이 필요합니다. 그 방법이 바로 어간 추출(Stemming)과 표제어 추출(Lemmatization)입니다.
eat을 예시로 들면 eats. eating등과 같이 어떠한 조건에 대해서 단어는 다양하게 변화합니다. 바로 여기서 play를 찾는 방법이라고 생각하면 되겠습니다.
어간 추출(Stemming)
: 문맥정보를 고려하지 않고 어근을 찾는다. Stemming은 단어 그 자체만을 고려합니다.
NLTK 패키지에서는 PorterStemmer, LancasterStemmer를 사용해서 어간을 추출하는데 두개를 비교해 가면서
어떠한 차이점이 있는지 알아보도록 하겠습니다.
PorterStemmer
from nltk import PorterStemmer, LancasterStemmer, word_tokenize
porter = PorterStemmer()
print(porter.stem('plays'),porter.stem('played'),porter.stem('playing'))
print(porter.stem('laughs'),porter.stem('laughed'),porter.stem('laughing'))
print(porter.stem('happier'),porter.stem('happiest'))
print(porter.stem('the going'))
play play play
laugh laugh laugh
happier happiest
the go
LancasterStemmer
lancaster = LancasterStemmer()
print(lancaster.stem('plays'),lancaster.stem('played'),lancaster.stem('playing'))
print(lancaster.stem('laughs'),lancaster.stem('laughed'),lancaster.stem('laughing'))
print(lancaster.stem('happier'),lancaster.stem('happiest'))
print(lancaster.stem('the going'))
표제어 추출(Lemmatization)
: 문맥정보를 고려하여 어근을 찾는다. Lemmatization은 그 단어가 문장 속에서 어떤 품사로 쓰였는지까지 판단을 하게 됩니다. 사전 매칭으로 동작하기 때문에 조금 속도가 느리게 작동한다는 단점이 있습니다. 또한 사전에 있는 단어만 추출을 합니다.
예를 들어서 Lemmatization은 ‘files’ 단어가 동사 ‘날다’ 와 명사 ‘파리’ 중 어떤 뜻으로 쓰였는지까지 결정할 수 있어야 합니다. 그래서 Lemmatization 함수를 쓸때는 품사를 따로 지정을 해줘야 합니다.
from nltk import PorterStemmer, WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('flying', pos='v'))
print(lemmatizer.lemmatize('flies', pos='n'))
fly
fly
print(lancaster.stem("flying"))
print(lancaster.stem("flies"))
fly
fli
Stemming은 다음과 같이 출력을 하게 됩니다.
Stemming과 Lemmatization는 상황에 따라서 각자의 장단점이 존재하는 것 같습니다. 만약 나의 목적이 차원 축소의개념이라면 Stemming, 품사를 보존하는 것이 목적이라면 Lemmatization이 적합하다고 생각합니다.
Reference
en.wikipedia.org/wiki/Lemmatisation
'NLP' 카테고리의 다른 글
NLTK 패키지 활용한 텍스트 전처리 (3) 불용어 제거 (0) | 2020.10.07 |
---|---|
NLTK 패키지 활용한 텍스트 전처리 (1) 토큰화 (7) | 2020.10.07 |
Sentence Embedding Summary (0) | 2020.08.23 |
Word Embedding Summary (0) | 2020.08.23 |
konlpy 형태소 분석기 성능 비교 (0) | 2020.08.17 |