2019-09-24

카카오톡 대화 내역을 파이썬 정규식으로 정리

1. 카카오톡의 대화 내역을 텍스트로 깔끔하게 정리하고 싶어졌다.

그래서 말끔하게 다듬어 보관하려고 파이썬을 이용해보았다.



2. 카카오톡에선 채팅방의 대화 내역을 내보낼 수 있는 기능을 지원한다.

대화 내역을 보관하고자하는 채팅방에 들어가 해당 채팅방의 설정을 열고

'Export Messages(메시지 내보내기)'를 터치한 뒤

원하는 경로를 통해 PC로 txt 파일을 가져왔다.




3. 파일은 대략 이렇게 생겼다.

(내용은 모자이크 처리)

맨 앞엔 월, 그 다음 일, 그 다음 연도, 시간과 AM/PM이 적혀 있다.

이제 정규식을 이용해 위치별로 텍스트를 뽑아온 뒤 date format으로 바꿔주면 되겠다.

잠깐, 그런데 파이썬에선 날짜나 시간을 다루기 위한 모듈이 대략 이 정도 존재한다.

- date : 연, 월 일처럼 그냥 날짜 조작만 할 때 사용한다.
- time : 날짜에 비의존적이게 시간, 분, 초, 밀리초 등을 다를 때 사용한다.
- datetime : date와 time을 섞어놓았다. 연, 월, 일, 시간, 분, 초, 밀리초까지 아우른다.
- timedelta : 날짜 사이에 걸린 시간을 잴 때 사용한다.
- tzinfo - 국제시간을 다룰 때 사용 가능한 클래스들이 모여있다.

잘 사용하면 될 듯 하다.



4. 간혹 메시지 내의 줄바꿈 문자가 있는 경우가 있다.

그런 경우는 위의 사진처럼 'August 22 ...'처럼 시작하지 않고

바로 문자열부터 시작하다보니 정규식에서 제대로 된 메시지를 추출하지 못할 수 있다.

그래서 부정형 전방 탐색을 사용했다.

부정형 전방 탐색은 '특정 문자열이 아닐 때에만 통과한다'는 특징이 있다.

예를 들어서 위의 카톡 대화내역 사진에서처럼, 모든 lines는 'August'로 시작하고 있는데

줄바꿈이 들어간 경우엔 해당 문자열로 시작하지 않을 것이다.

이 점에서 착안하여 다음과 같이 정규식을 작성해보았다.

^(?!(September|August))

+a : 온라인에 정규표현식을 바로 시각화해주는 사이트가 있다. 매우 좋다!

맨 앞의 ^는 '라인의 맨 앞'에 매치되고

괄호를 통해 그룹핑을 해주었으며

?!는 부정형 전방 탐색에서 사용되는 메타 문자이다.

즉 September라는 문자열 혹은 August라는 문자열로 시작하지 않는 위치에만 매치되어

이전 라인에서 메시지 내의 줄바꿈기호 때문에, 메시지부터 시작한 라인을 잡아낼 수 있다.

그 부분을 공백 기호로 치환(re.sub())해주면

깔끔하게 한 줄이 하나의 메시지로 바뀌게 된다.



5. 그렇게 짧게 코딩해서 원하는 결과를 얻는다.

(re.sub()는 포함되어 있지 않다)

8월과 9월 말고도 1~12월 전부 넣어주면 모든 달에 매치시킬 수 있다.

난 날짜나 시간을 정리할 필요가 없었다보니 코드가 매우 짧았다.

이렇게 쉽게 카톡 내용을 전처리할 수 있다.

댓글 없음:

댓글 쓰기