본문 바로가기
투닥투닥

DACON 금융문자 분석 경진대회 도전3 - 한국어 불용어 처리

by Lauren X Ming 2019. 12. 29.

koreanStopwords.txt
0.00MB

오늘은 불용어 처리를 해보았다!

그리고 그동안 코드만 띡 올렸었는데 공부하면서 알게된 것 간단히 적어보고자 한다! start!!!


Step 1. 불용어 사전 다운로드

텍스트 파일(koreanStopwords.txt)를 다운 받는다.

Step 2. 불용어 사전 코드로 가져오기(list로 변환)

f = open("./data/korean_stopwords.txt", 'r')
lines = f.readlines()
stopwords = []
for line in lines:
    line = line.replace('\n', '')
    stopwords.append(line)
f.close()

Step 3. 불용어 처리

import re
# Data Preprocessing
def preprocessing(text):
    # tokenize into words
    hangul = re.compile('[^ ㄱ-ㅣ가-힣]+')
    text = hangul.sub('', str(text))
    tokens = mecab.morphs(text)
    
    # remove stopwords
    stop = stopwords
    tokens = [token for token in tokens if token not in stop]
    
    preprocessed_text= ' '.join(tokens)
    return preprocessed_text

clean_text = []
i = 0
for data in contents:
    preprocessed = preprocessing(data)
    clean_text.append(preprocessed)
    if i%10 == 0 :
        print(i)
    i = i+1

contents : 이게 내가 처리하고자 하는 data들 list이다.

data : contents에서 한 개씩 가져오기

clean_text : 전처리한 거 담기

from konlpy.tag import Mecab
mecab = Mecab()

참고로 나는 Mecab이라는 라이브러리를 사용했는데, 이게 띄어쓰기도 잘 구분해준다. 찾아보니 원래 일본어 용이었는데 그걸 한국식으로 바꿨다고 한다. 일본어랑 우리나라 언어랑 문법이 비슷해서 잘 먹히는건가? 잘 모르겠당~~

preprocessing 함수를 보면 정규식(re) 함수로 한글인 것만 뽑아낸다. - 특수문자, 영어 등등 다 버려짐

추가적으로 stopwords도 걸러지는 것을 알 수 있다.


사실 위에꺼가 불용어 처리 끝이다!! 쉽지만 중요하다면 중요할 수 있는 과정이다ㅎㅎㅎ

영어도 불용어 처리하고 싶으면 위와 비슷한 방법으로 하면 된다!!

추가적으로!

y_test_pred=clf.predict_proba(X_test_tfidf)
y_test_pred_one= [ i[1]  for i in y_test_pred]

전에 이런 코드를 올렸었다. 

y_test_pred는 2가지 예측 값이 나오는데, 왜인지 몰랐었다. 그냥 시키는데로 따라했을 뿐!(그래서 i[1]만 뽑아내는 이유도 몰랐었다ㅠㅠ)

그 이유를 설명하자면 모델을 학습하면 0(스미싱 아니거나) 1(스미싱 이거나) 두 개의 클래스를 예측하도록 학습을 한다. 

y_train에 2가지 그룹이 있으니까 자연스럽게 predict_prob 하면 0일 확률인 것 한 개 열, 1일 확률 한 개 열이 나오는 것이다! 그래서 두 개 더해보면 1에 가까워진다.

한마디로 i[1]만 뽑는 이유는 스미싱인 확률만 뽑아내는 것이다!

만약, y_train의 그룹이 0, 1, 2 였다면 y_test_pred는 3가지 예측값이 나올것이당~~

그럼 이만~~~~

지금 나는 살이 쪄서...이 사진으로ㅠㅠ