정제 및 정규화 (cleaning / normalization)
Machine Learning/National Language Processing 2020. 11. 23. 22:40코퍼스 토큰화(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
- 손가락귀신
정신 못차리면, 벌 받는다.