불용어(Stopword)
갖고 있는 데이터에서 유의미한 단어 토큰만을 선별하기 위해 큰 의미가 없는 단어 토큰을 제거해야 한다.
조사, 접미사 같은 단어들은 문장에서는 자주 등장하지만 실제 의미 분석을 하는데는 거의 기여하는 바가 없다.
이러한 단어들을 불용어라 한다.
1. NLTK에서 불용어 확인하기
from nltk.corpus import stopwords
stopwords.words('english')[:10]
['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', 'your']
stopwords.words("english")는 NLTK가 정의한 영어 불용어 리스트를 리턴합니다.
2. NLTK를 통해서 불용어 제거하기
# NLTK를 통해서 불용어 제거하기
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
example = "Family is not an important thing. It's everything."
stop_words = set(stopwords.words('english'))
word_tokens = word_tokenize(example)
result = []
for w in word_tokens:
if w not in stop_words:
result.append(w)
print(word_tokens)
print(result)
['Family', 'is', 'not', 'an', 'important', 'thing', '.', 'It', "'s", 'everything', '.']
['Family', 'important', 'thing', '.', 'It', "'s", 'everything', '.']
위 코드는 임의의 문장을 정의하고 불용어를 제외한 결과를 출력하고 있다.
3. 한국어에서 불용어 제거하기
간단하게는 토큰화 후에 조사, 접속사 등을 제거하는 방법이 있다.
하지만, 조사나 접속사와 같은 단어들뿐 아니라 명사, 형용사와 같은 단어들 중에서도 불용어로서 제거하고 싶은
경우가 발생할 수 있다.
이때 사용자가 직접 불용어 사전을 만들게 된다.
# 한국어에서 불용어제거하기
# (직접 정의한 불용어 사전을 참고하여 제거하기)
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
example = "고기를 아무렇게나 구우려고 하면 안 돼. 고기라고 다 같은 게 아니거든. 예컨대 삼겹살을 구울 때는 중요한 게 있지."
stop_words = "아무거나 아무렇게나 어찌하든지 같다 비슷하다 예컨대 이럴정도로 하면 아니거든"
# 위의 불용어에는 직접 정의한 불용어가 있다.
stop_words=stop_words.split(' ')
word_tokens = word_tokenize(example)
result = []
for w in word_tokens:
if w not in stop_words:
result.append(w)
# 위의 4줄은 아래의 한 줄로 대체 가능
# result=[word for word in word_tokens if not word in stop_words]
print(word_tokens)
print(result)
['고기를', '아무렇게나', '구우려고', '하면', '안', '돼', '.', '고기라고', '다', '같은', '게', '아니거든', '.', '예컨대', '삼겹살을', '구울', '때는', '중요한', '게', '있지', '.']
['고기를', '구우려고', '안', '돼', '.', '고기라고', '다', '같은', '게', '.', '삼겹살을', '구울', '때는', '중요한', '게', '있지', '.']
한국어 불용어를 제거하는 더 좋은 방법은 코드 내에서 직접 정의하지 않고 txt 파일이나 csv 파일로 수많은 불용어를 정리해놓고, 이를 불러와서 사용하는 방법이 있다.
참고 가능한 한국어 불용어 리스트
1. 링크 : https://www.ranks.nl/stopwords/korean
2. 링크 : https://bab2min.tistory.com/544
'Deep learning > NLP(자연어처리)' 카테고리의 다른 글
펄플렉서티(Perplexity) (0) | 2020.02.27 |
---|---|
한국어에서의 언어 모델(Language Model for Korean Sentences) (0) | 2020.02.27 |
N-gram 언어 모델(N-gram Language Model) (0) | 2020.02.27 |
통계적 언어 모델(Statistical Language Model, SLM) (0) | 2020.02.27 |
언어 모델(Language Model) (0) | 2020.02.26 |