취향저격 - 전처리

지난 포스터에서는 형태소 분석기들의 성능을 비교해 보았다.

이번 포스터에서는 프로젝트를 진행하면서, 형태소 분석기를 이용해서 수집한 데이터를 전처리하는 코드를 리뷰할 것이다.

문장 단위로 나누기

import kss #문장 단위로 나눌 라이브러리를 쓰기위해 선언
import pandas as pd # 파일을 저장하기위해 선언
from tqdm import tqdm_notebook, tnrange # 반복문 진행사항을 알기위해 선언

data = pd.read_csv('D:/Sig 팀 프로젝트/2학년 겨울방학/winter_sig/한석/Movie_Sent.csv',encoding='utf-8') # 영화별로 모아놓은 데이터 경로
title_list = [] # 제목을 저장할 리스트
code_list = [] # 영화 코드를 저장할 리스트
sentence_list = [] # 문장으로 나눠서 저장할 리스트
genre_list = [] # 영화의 장르를 저장할리스트

for movie_title, movie_code, movie_summary, movie_genre in tqdm_notebook(zip(data['Title'], data['Code'], data['Sentence'], data['Genre'])): # 불러온 csv 파일중 제목, 코드, 줄거리, 장르를 불러옴
    for sent in kss.split_sentences(movie_summary): # 영화의 줄거리를 문장 단위로 나눠줌
        title_list.append(movie_title) 	# 나눈 영화의 제목 저장
        code_list.append(movie_code) 	# 나눈 영화의 코드 저장
        genre_list.append(movie_genre)
        sentence_list.append(sent)		# 나눈 영화의 문장을 저장

movie_Data = pd.DataFrame({"Code": code_list, "Genre": genre_list, "Title": title_list, "Sentence": sentence_list}) # 저장한 리스트들을 데이터 프레임으로 저장
movie_Data.to_csv("Movie_Sents.csv") # 저장한 데이터 프레임을 csv파일로 저장
print("done")

영화별로 모아놓은 줄거리, 명대사, 리뷰를 하나의 sentence로 합쳐놨었다. 이를 다시 한 문장 단위로 잘라서 (코드, 장르, 제목, 문장)의 형식으로 저장하는 코드이다.

문장 단위로 나눌 때는 kss의 split_senteces를 사용했다.

영화의 데이터를 저장할 때 한 영화에 여러 장르일 경우가 있었는데 이 경우에는 장르를 나눠서 장르별로 하나의 데이터를 만들어서 저장했었다.


위의 사진처럼 장르 부분만 다르게 해놓은 것이다.

영화의 문장별로 잘 저장된 것처럼 보인다.

tqdm

from tqdm import tqdm_notebook, tnrange'

이 부분은 이번 프로젝트를 주피터 노트북 환경에서 진행 했는데 반복문을 게이지로 표시하는 라이브러리이다.

from tqdm import tqdm

주피터 환경이 아닌 다른 IDE의 환경의 경우는 잘 모르지만 위의 코드를 입력하면 될 것이다.

전처리 코드

from konlpy.tag import Okt
from tqdm import tqdm_notebook, tnrange
import pandas as pd
import re

okt = Okt() # Okt 선언

sentence_data = [] # 전처리 한 문장들을 저장할 리스트

data = pd.read_csv('D:/Sig 팀 프로젝트/2학년 겨울방학/winter_sig/한석/Movie_Sents.csv',encoding='utf-8')

for movie_summary in tqdm_notebook(data["Sentence"]):
    word_list = []
    summary = re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》\]\[\’]', '', movie_summary) # 줄거리의 특수 문자를 제거
    for word in okt.pos(summary, stem = True): #stem = True로 단어의 어간을 추출
        if word[1] not in ['Josa', 'Punctuation', 'Foreign', 'KoreanParticle', 'Suffix', 'Adverb']: # 조사, 구두점, 외국어, 초성, 접미사, 부사 제거
            word_list.append(word[0]) # 위에 해당되지 않는 단어들을 저장함으로써 하나의 문장으로 다시 만듬
            
    sentence_data.append(word_list) # 전처리 된 문장 저장
        
movie_Data = pd.DataFrame({"Code": data['Code'], "Genre": data['Genre'], "Title": data['Title'], "Sentence": sentence_data})
movie_Data.to_csv("Movie_Sentence_Data.csv") # 파일 저장
print("done")

위의 코드는 앞으로 사용할 영화 데이터를 전처리 한 후 저장하는 코드이다.
문장의 전처리는 형태소 분석기 중 Okt를 사용했고, 단어의 어간을 추출했다.
조사, 구두점, 외국어, 초성, 접미사, 부사를 문장에서 제거한 후, 각 제거된 문장들을 다시 리스트로 만들어서 파일로 저장했다.

좋은 웹페이지 즐겨찾기