코퍼스 토큰화(tokenization) 를 마쳤다면, 불필요한 토큰들을 없애거나 표현 방법이 다른 단어들을 하나로 통합하여 코퍼스의 복잡성을 줄여야 한다.



정제(cleaning)


언어 및 데이터의 특징에 따라 규칙을 정하여 함수나 정규 표현식(Regular Expression)으로 의미없는 기호나 단어(불용어: Stopword)를 제거하는 일이다. 불용어는 필요한 경우 사용자 정의로 추가하는 것이 가능하다.


# NLTK 로 불용어 제거하기
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
 
# 불용어 코퍼스 다운로드
nltk.download('stopwords')
 
# 영어 불용어 가져오기
stop_words = stopwords.words('english')
 
# 영어 불용어 개수와 10개 미리보기
print(len(stop_words))
print(stop_words[:10])
 
eng_stop_words = set(stop_words)
text = "There is a tree near the river"
word_tokens = word_tokenize(text)
 
for w in word_tokens:
    if w not in eng_stop_words:
        print(w)
 
''' 출력
179
['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', "you're"]
There
tree
near
river 
'''
cs


위와 같이 불용어 제거는 불용어 리스트를 이용해 for 문을 돌려 제거하면 되겠다. 한국어도 마찬가지로 txt / csv 파일 등으로 불용어를 관리하며 불러와 사용하는 것이 일반적이다. (불용어 리스트 예 - https://www.ranks.nl/stopwords/korean)



정규화(normalization)


정규화는 표제어 추출과 어간 추출을 사용하여 다르게 표현한, 같은 뜻의 단어들을 하나의 단어로 통합한다. 표제어 추출(lemmatization) 은 형태소(morphology) 종류인 어간(stem) 과 접사(affix) 로 분리하며 기본형으로 바꾸고 품사 태그는 보존된다. (예, am/are/is -> be). 어간 추출(stemming) 은 적당히 어간을 잘라내므로 품사 태그가 보존되지 않는다. (예, changing/changed -> chang). Porter Stemmer, Lancaster Stemmer, ... 등 각각의 알고리즘을 이해하고 적합한 스태머를 사용해야 한다. 한국어의 어간 추출에는 [어간+어미] 에서 어간이 변하지 않는 규칙 활용과 어간이 변하는 불규칙 활용이 있다.


# 표제어 추출 / 어간 추출
import nltk
from nltk.stem import WordNetLemmatizer
from nltk.stem import PorterStemmer
from nltk.stem import LancasterStemmer
 
nltk.download('wordnet')
lemmatizer = WordNetLemmatizer()
porter_stemmer = PorterStemmer()
lancaster_stemmer = LancasterStemmer()
 
words = ['rocks''corpora''better''are''has''swimming']
 
# 표제어 추출 (lemmatization)
print([lemmatizer.lemmatize(w) for w in words])
print(lemmatizer.lemmatize('better''a'))
 
# 어간 추출 (stemming)
print([porter_stemmer.stem(w) for w in words])
print([lancaster_stemmer.stem(w) for w in words])
 
 
''' 출력
['rock', 'corpus', 'better', 'are', 'ha', 'swimming']
good
['rock', 'corpora', 'better', 'are', 'ha', 'swim']
['rock', 'corpor', 'bet', 'ar', 'has', 'swim']
'''
cs




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,