2020/11/21 - [Python/Community Manager를 위한 Python] - 4. 저장된 txt 파일은 어떻게 정제해야 할까? 2편

위 링크인 이전 글에 이어서 이번 정제를 마무리를 짓도록 한다. 일단 전체 소스를 이야기 하기 전에 중요 로직을 확인해본다.

카카오톡 채팅 데이터는 line by line으로 한 메시지에 여러 문장을 작성할 경우 짤리기 때문에 같은 메시지라고 인식하고 이 메시지를 붙여주는 것이 중요하다. 먼저 1편에서 확인한 내용은 아래와 같다.

fig1.txt 파일 읽은 후 리스트로 변환한 결과 

 

이제 아래처럼 바꿔 줘야 한다. 물론 아래는 각 채팅날짜별로 돌기 때문에 for loop를 이용하여 모든 날짜에 적용할 것이다. 그리고 아래에서 작성하진 않았지만 각 리스트로 구성된 메시지를 문자열로 변환 작업도 필요하다. 

fig2. 특정 날짜에 발생한 채팅 메시지 리스트를 문자열로 변환한 결과

fig2 결과를 위해 사용한 함수는 아래와 같다. 채팅 날짜에 해당하는 전체 메시지를 작성자+작성시간에 맞춰 문자열로 변환 후 다시 리스트 객체에 담아준다. 크게 신경써야 하는 부분은 1) 메시지가 시작된 부분인가? 2) 이전 편에서 확인했던 관리자 행동이나 참여자의 인입인가? 이다.

def split_talk_by_user(context):
    whole_txt, merge_txt = [], []
    for index, element in enumerate(context):
        start_str = re.match(r'\[.*?\]\s\[[오전|오후].*?\]', element)
        if start_str:
            whole_txt.append(' '.join(merge_txt))
            merge_txt = []
            merge_txt.append(element)
            if index == len(context)-1:
                whole_txt.append(' '.join(merge_txt))
        else:
            is_contain = False
            for action in ACTIONS:
                if action in element:
                    is_contain = True
            if is_contain:
                if merge_txt:
                    whole_txt.append(' '.join(merge_txt))
                whole_txt.append(element)
                merge_txt = []
            else:
                merge_txt.append(element)
    return [e for e in whole_txt if e.strip()]

 

그래서 전체 소스 코드는 아래를 참고하길 바란다.

github.com/hyunkyungboo/kakaotalk_chat_analysis/blob/master/01_read_txt_and_data_preprocessing.py

 

hyunkyungboo/kakaotalk_chat_analysis

카카오톡 채팅방 분석하기. Contribute to hyunkyungboo/kakaotalk_chat_analysis development by creating an account on GitHub.

github.com

 

다음 편에서는 데이터를 탐색해볼 것이다.

카카오톡 오픈 채팅방을 운영을 하고 있는 분들이라면 카카오톡 채팅 내용에 대해 궁금해 하지 않을까? 라는 생각이 들었고 마침 학교 과제와도 겹치는 부분이 있어 과제 결과 도출까지 과정을 공유하고자 한다. :D

큰 틀의 목차는 아래와 같다.

  1. 카카오톡 대화는 어떻게 이쁘게 만들까?
  2. 추가적으로 도출가능한 데이터는 무엇이지?
  3. 이 데이터로 무엇을 확인해볼까?

다만 글 작성시에는 조금 더 상세한 목차로 진행하려고 한다.

 

 

 

+ Recent posts