정구리의 우주정복

Python Project 04. 영화리뷰 긍정부정 예측하기 -(2) 간단한 전처리 본문

PYTHON/PROJECT

Python Project 04. 영화리뷰 긍정부정 예측하기 -(2) 간단한 전처리

Jungry_ 2020. 12. 21. 19:44
반응형

간단한 전처리를 해주는 부분이다 .

왜 간단이라고 하냐면 전처리를 할때 시간이 너무 오래걸려서 중간에 한번 끊어줬음 ㅜㅜ

 

이 소스코드는 불용어 제거 , 형태소 단위로 쪼개주기 , 중복데이터 제거 를 해준것을 csv 파일로 만들어주는 소스코드이다

 

import pandas as pd
import re
from konlpy.tag import Okt
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np
import csv


#call data
train_data = pd.read_csv('/Users/jungry/Desktop/git_study/2020_final_project/ratings_train.txt',header=0,delimiter='\t',quoting=3)
test_data = pd.read_csv('/Users/jungry/Desktop/git_study/2020_final_project/data.csv',header=0)

#데이터 전처리 함수
def preprocessing(review,fire_dragon=[]):
    #한글 이외의 것 제거
    review_text=re.sub("[^ㄱ-ㅎㅏ-ㅣ가-힣 ]","",review)
    #Okt를 사용해 형태소 단위로 쪼개주기
    okt=Okt()
    word_review = okt.morphs(review_text,stem=True)
    #불용어 제거하기
    fire_word = [i for i in word_review if not i in fire_dragon]

    return fire_word  #가볍게 전처리를 한 문자열 반환

fire_dragon = ['의','이','있','하','들','그','되','수','보','않','없','나','사람','아','등','같','오','있','한'] #불용어사전
clean_train_reviews = [] #train data 전처리한거
clean_test_reviews = [] #test data 전처리 한거

#중복 데이터 제거
train_data.drop_duplicates(subset=['document'],inplace=True) 
test_data.drop_duplicates(subset=['document'],inplace=True) 

#데이터 전처리
for review in train_data['document']:
    if type(review) == str:
        clean_train_reviews.append(preprocessing(review,fire_dragon=fire_dragon))
    else:
        clean_train_reviews.append([])

for review in test_data['document']:
    if type(review) == str:
        clean_test_reviews.append(preprocessing(review,fire_dragon=fire_dragon))
    else:
        clean_test_reviews.append([])

#전처리 데이터 파일로 저장 (시간절약)
with open('clean_train_reviews.csv','w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(clean_train_reviews)
    writer.writerow(list(train_data['label']))

with open('clean_test_reviews.csv','w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(clean_test_reviews)
    writer.writerow(list(test_data['label']))

train_data 는 네이버에서 제공하는 영화리뷰데이터를 사용했고

test_data 는 이전 게시글에서 크롤링한 영화리뷰데이터를 사용했다.

 

processing() 함수에서는 re.sub 를 이용해 한글 이외의 것을 제거하고 

Okt() 를 사용해서 형태소 단위로 나눠주었다.

fire_dragon 이라는 변수에는 불용어를 넣은 List 를 만들어주었고 이런 불용어들을 제거한것을 fire_word 에 넣어줬다

 

drop_duplicate 를 사용해 중복 데이터들을 제거해줬고 

전처리 함수를 실행한뒤 완료된것들을 clean_train,test_reviews.csv 파일로 만들어줬다

만들어진 csv 파일 (맨 밑에 label 값도 들어있다)

반응형
Comments