반응형
file_path에 카카오톡에서 추출한 txt문서 경로를 넣으면
날짜, 요일, 이름, 채팅내용의 데이터프레임이 추출됩니다.
def katalk_msg_parse(file_path):
my_katalk_data = list()
katalk_msg_pattern = "[가-힣a-zA-Z0-9]* [가-힣]{2} [0-9]* [가-힣a-zA-Z0-9]*"
date_info = " [0-9]{4}년 [0-9]{1,2}[월] [0-9]{1,2}[일] [가-힣]{3}"
for idx, line in enumerate(open(file_path)):
line = re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》]','', line)
line_list = line.split()
if idx == 0:
title = line # 첫번째는 타이틀
opponent = line_list[0] # 상대방 이름
continue
elif idx == 1:
continue
elif line == '':
continue
elif re.match(date_info, line):
weekday = line_list[3]
date_foward = re.sub("[가-힣]", '', line)
line_list = date_foward.split()
if len(line_list[1]) == 1:
line_list[1] = '0'+line_list[1]
if len(line_list[2]) == 1:
line_list[2] = '0'+line_list[2]
date_foward = line_list[0] + line_list[1] + line_list[2]
continue
elif re.match(katalk_msg_pattern, line):
if line_list[1] == '오후':
clock = str(int(line_list[2][:-2]) + 12)
if clock == '24':
line_list[2] = '00' + line_list[2][-2:]
else:
line_list[2] = clock + line_list[2][-2:]
if line_list[1] == '오전':
if len(line_list[2]) == 3:
line_list[2] = '0'+line_list[2]
date_time = date_foward.strip() + line_list[2].strip()
user_name = line_list[0]
if len(line_list) == 4:
kakao_txt = line_list[3]
else:
continue
my_katalk_data.append({'date_time': date_time,
'week_day' : weekday,
'user_name': user_name,
'text': kakao_txt
})
else:
if len(my_katalk_data) > 0:
my_katalk_data[-1]['text'] += "\n"+line.strip()
my_katalk_df = pd.DataFrame(my_katalk_data)
my_katalk_df['date_time'] = pd.to_datetime(my_katalk_df['date_time'])
my_katalk_df['year_month'] = my_katalk_df.date_time.map(lambda x: x.strftime('%Y-%m'))
my_katalk_df['year_month_day'] = my_katalk_df.date_time.map(lambda x: x.strftime('%Y-%m-%d'))
my_katalk_df['hour'] = my_katalk_df.date_time.dt.hour
return my_katalk_df
반응형
'프로그래밍 > Python' 카테고리의 다른 글
AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d' 에러 해결 (1) | 2022.03.23 |
---|---|
python 두 점 사이의 중심좌표 구하는 법 (0) | 2022.03.22 |
PermissionError(13, 'Permission denied') 에러해결 (2) | 2022.03.19 |
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject 에러 해결 (0) | 2022.03.17 |
ubuntu18.04 XGBoost 설치 (0) | 2022.03.17 |
댓글