Open alsrud2298 opened 1 year ago
전처리 코드
# 패키지 불러오기
import pandas as pd
import numpy as np
import re # 정규표현식
from tqdm import tqdm
from konlpy.tag import Okt # 형태소분석
from hanspell import spell_checker # 맞춤법 + 띄어쓰기
from collections import Counter
import datetime
# import pymysql
# conn = pymysql.connect(host='admin.ckaurvkcjohj.eu-north-1.rds.amazonaws.com', user='hashtag', password='hashtag123', db='KEYWIDB', charset='utf8')
# cursor = conn.cursor()
# sql = "SELECT * FROM KEYWIDB."
# cursor.execute(sql)
# result = cursor.fetchall()
# for record in result:
# print(record)
# db.close()
# 함수 정의 제목,장르,url,기간,장소,이미지url,배우,줄거리,작품설명,후기용url
def replace_cont():
show_df = pd.read_csv('./Keywi/Modeling/data/공연중상세정보.csv')[['제목','장르','줄거리','작품설명','url','이미지url']]
content = []
for i in range(0,show_df.shape[0]):
row = show_df.iloc[i]
if (row.줄거리 == '줄거리 없음') & (row.작품설명 == '작품설명 없음'): # 줄거리, 작품설명 둘 다 없는 경우
content.append(' ') # 공백
elif row.줄거리 == '줄거리 없음': # 줄거리만 없는 경우
content.append(row.작품설명)
elif row.작품설명 == '작품설명 없음': # 작품설명만 없는 경우
content.append(row.줄거리)
else: # 둘 다 있는 경우 - 줄거리 사용
content.append(row.줄거리)
show_df['content'] = content
show_df.to_csv('./Keywi/Modeling/data/total_show_df.csv', index=False)
return
# 중복데이터 제거
def duplicate_drop(df):
duplicate_drop_df = df.drop_duplicates()
duplicate_drop_df.reset_index(drop = True, inplace = True)
print('중복되는 데이터 개수 확인 (제거 전):', df.duplicated().sum())
print('중복되는 데이터 개수 확인 (제거 후):', duplicate_drop_df.duplicated().sum())
return duplicate_drop_df
# 한글, 영어, 숫자표현만 남기기
def extract_word(text):
hangul = re.compile('[^a-zA-Z0-9가-힣]')
result = hangul.sub(' ', text)
return result
# 맞춤법 교정
def grammar_correction(df):
tmp = df.copy()
error_idx = []
for i, res in enumerate(tqdm(tmp['content'])):
if len(res) > 500: # 텍스트 길이가 500보다 클 때
# 결과값
res = ''
# 반복 횟수 구하기
if len(tmp.loc[i, 'content']) % 500 == 0:
iter = len(tmp.loc[i, 'content']) // 500
else:
iter = len(tmp.loc[i, 'content']) // 500 + 1
for i in range(iter):
if i < (iter-1):
res += spell_checker.check(tmp.loc[i, 'content'][500*i:500*(i+1)]).checked
elif i == (iter-1):
res += spell_checker.check(tmp.loc[i, 'content'][500*i:]).checked
tmp.loc[i, 'content'] = res
else: # 텍스트 길이가 500보다 작을 때
try:
tmp.loc[i, 'content'] = spell_checker.check(res).checked
except:
error_idx.append(i)
return tmp
# 한글만 남기기
def extract_num_eng(text):
hangul = re.compile('[^가-힣]')
result = hangul.sub(' ', text)
return result
# 형태소 - 명사만 추출
# 한 행당 한 리뷰가 들어가게 처리
def tagging(df):
okt = Okt()
words = df['content'].tolist()
total = [] # 한 행당 리뷰 형태소
for i in tqdm(words):
morph_list = [] # 한 리뷰당
for word in okt.pos(i, stem = True):
if word[1] in ['Noun']:
morph_list.append(word[0])
total.append(morph_list)
return total
def preprocessing_text(df):
df = duplicate_drop(df)
print('-----중복제거 완료-----')
df['content'] = df['content'].apply(lambda x: extract_word(x))
print('-----기호제거 완료-----')
#df = grammar_correction(df)
print('-----맞춤법교정 완료-----')
df['content'] = df['content'].apply(lambda x: extract_num_eng(x))
print('-----영어제거 완료-----')
#df['content'] = tagging(df)
#print('-----품사추출 완료-----')
return df
replace_cont() # 공연 내용 - 줄거리,작품설명으로 채우기
# 데이터 불러오기
show_df = pd.read_csv('./Keywi/Modeling/data/total_show_df.csv')
drama_df = pd.read_csv('./Keywi/Modeling/data/drama.csv')
movie_df = pd.read_csv('./Keywi/Modeling/data/movie_info.csv')
movie_df['content'] = movie_df['summary']
drama_df['content'] = drama_df['줄거리']
pre_show_df = preprocessing_text(show_df)
pre_show_df.drop(['작품설명','줄거리'],axis=1,inplace=True)
pre_show_df.to_csv('./Keywi/Modeling/result/0830_pre_show_df.csv',index=False)
pre_movie_df = preprocessing_text(movie_df)
pre_movie_df.drop(['genre'],axis=1,inplace=True)
pre_movie_df.to_csv('./Keywi/Modeling/result/0830_pre_movie_df.csv',index=False)
pre_drama_df = preprocessing_text(drama_df)
pre_drama_df.to_csv('./Keywi/Modeling/result/0830_pre_drama_df.csv',index=False)