본문 바로가기
NLP

NLTK 패키지 활용한 텍스트 전처리 (2) 텍스트 정규화

by rubyda 2020. 10. 7.
728x90

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은 다음과 같이 출력을 하게 됩니다.

 

 

StemmingLemmatization는 상황에 따라서 각자의 장단점이 존재하는 것 같습니다. 만약 나의 목적이 차원 축소의개념이라면 Stemming, 품사를 보존하는 것이 목적이라면 Lemmatization적합하다고 생각합니다.

 

 

 

 

Reference


en.wikipedia.org/wiki/Lemmatisation

 

Lemmatisation - Wikipedia

Lemmatisation (or lemmatization) in linguistics is the process of grouping together the inflected forms of a word so they can be analysed as a single item, identified by the word's lemma, or dictionary form.[1] In computational linguistics, lemmatisation i

en.wikipedia.org