불용어(Stopword)

2019. 11. 11. 18:35·머신러닝/딥러닝을 이용한 자연어처리 입문

갖고 있는 데이터에서 유의미한 단어 토큰만을 선별하기 위해서는 큰 의미가 없는 단어 토큰을 제거하는 작업이 필요하다. 여기서 큰 의미가 없다는 것은 자주 등장하지만 분석을 하는 것에 있어서는 큰 도움이 되지 않는 단어들을 말한다. 예를 들면, I, my, me, over, 조사, 접미사 같은 단어들은 문장에서는 자주 등장하지만 실제 의미 분석을 하는 데는 거의 기여하는 바가 없다. 이러한 단어들을 불용어(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가 정의한 영어 불용어 리스트를 리턴한다. 출력 결과가 100개 이상이기 때문에 여기서는 간단히 10개만 확인해보았다. 

 

2. 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', '.']

"Family is not an important thing. It's everything."라는 임의의 문장을 정의하고, NLTK가 정의하고 있는 불용어를 제외한 결과를 출력하고 있다. 'is', 'not', 'an'과 같은 단어들이 문장에서 제거되었음을 볼 수 있다.

 

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)
['고기를', '아무렇게나', '구우려고', '하면', '안', '돼', '.', '고기라고', '다', '같은',
'게', '아니거든', '.', '예컨대', '삼겹살을', '구울', '때는', '중요한', '게', '있지', '.']
['고기를', '구우려고', '안', '돼', '.', '고기라고', '다', '같은', '게', '.', '삼겹살을'
, '구울', '때는', '중요한', '게', '있지', '.']

 

'머신러닝 > 딥러닝을 이용한 자연어처리 입문' 카테고리의 다른 글

RNN(Recurrent Neural Network)  (0) 2020.01.02
데이터의 분리(Splitting Data)  (0) 2019.11.19
어간 추출(Stemming) and 표제어 추출(Lemmatization)  (0) 2019.11.01
정제(Cleaning) 과 정규화(Normalization)  (0) 2019.11.01
토큰화(Tokenization)  (0) 2019.10.28
'머신러닝/딥러닝을 이용한 자연어처리 입문' 카테고리의 다른 글
  • RNN(Recurrent Neural Network)
  • 데이터의 분리(Splitting Data)
  • 어간 추출(Stemming) and 표제어 추출(Lemmatization)
  • 정제(Cleaning) 과 정규화(Normalization)
dev.JJ
dev.JJ
Software Programming
  • dev.JJ
    끊임없이 생각하자
    dev.JJ
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 서버 개발(생각과 구현) (14)
      • 머신러닝 (24)
        • 신경망 첫걸음 (2)
        • 모두를 위한 딥러닝 (12)
        • 딥러닝을 이용한 자연어처리 입문 (9)
        • AI 프로젝트 (1)
      • 수학 (5)
        • 기초 선형대수학 (4)
        • 기초수학 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    벡터
    ai
    수학
    프로젝트
    머신러닝
    코로나 바이러스 예측
    ML
    자연어처리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev.JJ
불용어(Stopword)
상단으로

티스토리툴바