표제어 추출
표제어는 기본 사전형 단어라는 의미로 표제어 추출은 단어들로부터 표제어를 찾아가는 과정이다.
am, are, is를 be로 나타낼 수 있는 것을 예로 들 수 있다.
표제어를 추출하는 방법은 형태학적 파싱을 하는 것이다.
형태학: 형태소로부터 단어들을 만들어가는 학문
형태소는 어간과 접사가 존재한다.
- 어간: 단어의 의미를 담고 있는 핵심 부분
- 접사: 단어의 추가적인 의미를 주는 부분 (접미사, 접두사)
형태학적 파싱은 이 어간과 접사를 분리하는 작업이다.
cats의 경우 cat이 어간 -s가 접사다.
WordNetLemmatizer().lemmatize()
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
words = ['love', 'lives', 'dies', 'watched', 'has', 'starting']
print('표제어 추출 전 :',words)
print('표제어 추출 후 :',[lemmatizer.lemmatize(word) for word in words])
'''
표제어 추출 전 : ['love', 'lives', 'dies', 'watched', 'has', 'starting']
표제어 추출 후 : ['love', 'life', 'dy', 'watched', 'ha', 'starting']
'''
lives -> live로 표제어를 잘 추출하는 경우도 있지만
dies -> dy / has -> ha 처럼 제대로 추출하지 못하는 경우도 있다.
이는 표제어 추출기가 본래 단어의 품사 정보를 알아야만 정확한 결과를 얻을 수 있기 때문이다.
해당 함수는 단어의 품사를 input으로 함께 사용할 수 있다.
그러나 결과는 품사가 보존되지 않을 수 있다.
lemmatizer.lemmatize('dies', 'v')
# 'die'
어간 추출
어간 추출은 형태학적 분석을 단순화한 버전이다. 혹은 정해진 규칙에 의해서만 어미를 자르는 작업이다.
이는 섬세한 작업이 아니기 때문에 결과의 단어는 사전에 존재하지 않을 수 있다.
Porter Algorithm
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
stemmer = PorterStemmer()
words = ['was', 'accurate', 'alize', 'formalize', 'allowance', 'electricical']
print('어간 추출 전 :',words)
print('어간 추출 후 :',[stemmer.stem(word) for word in words])
'''
어간 추출 전 : ['was', 'accurate', 'alize', 'formalize', 'allowance', 'electricical']
어간 추출 후 : ['wa', 'accur', 'aliz', 'formal', 'allow', 'electric']
'''
was -> wa
accurate -> accur
alize -> aliz
처럼 규칙으로만 접사를 제거해 사전에 없는 단어를 생성하는 경우가 있다.
fomalize -> formal
allowance -> allow
electricical -> electric
처럼 규칙으로 제거 했을 때 표제어를 찾을 수 있는 경우도 존재한다.
Lancaster Stemmer
from nltk.stem import LancasterStemmer
lancaster_stemmer = LancasterStemmer()
print('어간 추출 전 :',words)
print('어간 추출 후 :',[lancaster_stemmer.stem(w) for w in words])
'''
어간 추출 전 : ['was', 'accurate', 'alize', 'formalize', 'allowance', 'electricical']
어간 추출 후 : ['was', 'acc', 'al', 'form', 'allow', 'elect']
'''
위의 결과와는 전혀 다른 것을 알 수 있다.
이미 알려진 알고리즘을 사용할 때는 사용할 코퍼스에 적용을 해보고 적합한 스태머를 찾아야 한다.
한국어 어간 추출
한국어는 5언 9품사의 구조를 가진다
체언(명사, 대명사, 수사), 수식언(관형사, 부사), 관계언(조사), 독립언(감탄사), 용언(동사, 형용사)
활용: 용언의 어간이 어미를 가지는 일
- 어간: 용언을 활용할 때, 모양이 변하지 않는 부분. 활용에서 어미에 선행하는 부분. 모양이 변하기도 함.
- 어미: 용언의 어간 뒤에 붙어 활용하면서 변하는 부분.
ex) 잡다
잡-(어간), -다(어미)
이 경우 어간의 모습이 일정하므로 규칙 기반 하에 어미를 단순하게 분리하면 된다.
ex) 돕다, 도와
돕-(어간), -다(어미) / 도-(어간), -와(어미)
이 경우 어간의 모습이 바뀌기 때문에 규칙만으로는 어미를 분리할 수 없다.
'AI > NLP' 카테고리의 다른 글
[Wiki] 원-핫 인코딩 (0) | 2024.06.02 |
---|---|
[Wiki] 패딩 (0) | 2024.06.01 |
[Wiki] 정수 인코딩 (0) | 2024.06.01 |
[Wiki] 불용어 (0) | 2024.06.01 |
[Wiki] 데이터 전처리 (토큰화 - 정제 - 정규화) (0) | 2024.05.31 |