정리정돈

텍스트 전처리(불용어(Stopword)) 본문

AI/자연어처리

텍스트 전처리(불용어(Stopword))

XZXXZX 2021. 7. 6. 11:25
728x90
반응형

갖고 있는 데이터에서 유의미한 단어 토큰 만을 선별하기 위해서는 큰 의미를 가지고 있지 않은 단어 토큰을 제거하는 작업이 필요하다. 큰 의미가 없다는 것은 자주 등장하지만 분석을 하는 것에 있어서는 큰 도움이 되지 않는 단어들을 말한다. 예시로, I, my, me, over, 조사, 접미사 같은 단어들은 문장에서는 자주 등장하지만 실제 의미 분석을 하는데는 거의 기여하는 바가 없는 경우가 있다. 이러한 단어들을 불용어(stopword)라고 하며, NLTK에서는 위와 같은 100여개 이상의 영어 단어들을 불용어로 패키지 내에서 미리 정의하고 있다.

 

불용어는 개발자가 직접 정의할 수 있다.

1. NLTK에서 불용어 확인

from nltk.corpus import stopwords  
stopwords.words('english')[:10]
['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', 'your']

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

NLTK가 정의하고 있는 불용어를 제외한 결과이다.

 

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

한국어 불용어 리스트: https://bab2min.tistory.com/544

참고문헌 : https://wikidocs.net/22530

728x90
반응형