본문 바로가기
공허의 유산/마음의 거울

[오픈채팅의 재해석] 02. 오픈채팅 데이터 전처리

by 바른생활머시마 2023. 9. 29.
728x90
반응형

로블록스 관련 된 오픈채팅방 대화를 구해서 사용 해 보겠습니다.

이 데이터를 구하면서 몇 개 오픈채팅방을 살펴보니, 세대별/주제별 언어가 매우 다른 것 같아요.

한국어라는 범주에서는 같지만, AI로 해당 도메인의 대화를 잘 처리하려면 도메인별 대화 특성을 고려해야 하고 그러자면 도메인별 데이터 획득이나 가공 방법들이 사전에 검토가 되어야 할 것 같습니다.

 

 

 

전처리 기준

 

데이터를 어떤 용도로 사용 할 것인가에 따라 처리 방법도 달라져야 합니다. 이번에는 Word Cloud를 만들어 보는 것을 목적으로 하고 있으니, 시간/ 대화명/ 입퇴장 안내 메세지 등은 다 불필요합니다. 동일한 소스로 여러가지 형태로 가공을 해야 한다면 중간 단계의 가공물을 만들어, 각각 서비스별 별도 전처리를 하는 경우도 고려해야 합니다. 

 

 

 

대화내용 추출 방법

 

데이터를 어떤 용도로 사용 할 것인가에 따라 처리 방법도 달라져야 합니다. 이번에는 Word Cloud를 만들어 보는 것을 목적으로 하고 있으니, 시간/ 대화명/ 입퇴장 안내 메세지 등은 다 불필요합니다. 동일한 소스로 여러가지 형태로 가공을 해야 한다면 중간 단계의 가공물을 만들어, 각각 서비스별 별도 전처리를 하는 경우도 고려해야 합니다. 

 

 대화 내용은 아래와 같은 형식으로 기록 됩니다.

 정규식을 이용하여 숫자4자리+ . + 공백 + 숫자1자리 혹은 2자리 + .....  이렇게 판별해도 되는데...

 짧은 기간의 데이터이므로 그냥 연월 텍스트와 같은 내용이면 대화행이라 판별하도록 하겠습니다.

 

2023. 8. 1. 10:06, OOO : ㅋㅋ 심심하다

 

대화 내용만 추출하면 되기 때문에, 두번째 콜론 뒤의 내용만 추출하여 저장하면 됩니다.

 

 

 

대화 내용이 아닌 내용으로는 아래와 같은 것들이 있습니다.

로그파일 헤더 부분

Talk_2023.9.28 18:45-1.txt
저장한 날짜 : 2023. 9. 28. 18:47



2023년 8월 1일 화요일

입장 안내

2023. 8. 1. 14:11: XXX XXX XX님이 들어왔습니다.

 

대화 내용이지만, 여러 줄로 나눠진 경우도 있습니다.

그런데, 이 대화방의 특성을 보면 매우 짧은 문장으로 대화가 이뤄지고 있으므로, 여러줄 입력은 코드 작성 시간 대비 효용성이 떨어지므로 무시하도록 하겠습니다.

...
2023. 8. 1. 10:34, OO :  
쫀아
2023. 8. 1. 10:34, OO : 아 아침 먹기 싫다 ㅠ
...

📣공지 꼭 읽어주세요!📣
...

 

형식으로는 구분이 불가능한 내용도 있습니다.

삭제 된 대화 내용 표시

2023. 8. 1. 14:23, XXXX : 삭제된 메시지입니다. 

문구가 항상 일정하기 때문에 그대로 필터링을 해도 되겠지만, 비율이 극히 적으므로 그냥 무시하도록 하겠습니다.

 

 

 

간단한 전처리 코드

 이런 내용들을 고려하여 아래와 같이 간단히 코드를 작성 해 보았습니다. 대화방의 데이터를 저장하면 몇 개의 텍스트 파일들이 압축 파일로 저장되기 때문에 그 압축을 푼 폴더를 지정하는 것으로 가정했습니다.

import os

# 소스 파일이 들어있는 폴더 경로
source_folder_path = 'C:\Study\c4k\dcinside_gogall\KakaoOpenChat\Kakaotalk_Chat'
file_list = os.listdir(source_folder_path)

# 결과 파일
result_file_path = 'C:\Study\c4k\dcinside_gogall\KakaoOpenChat\\result.text'
result_file = open(result_file_path, 'w', encoding='utf-8')

for ktalk_dialog in file_list:
    ktalk_file = open(source_folder_path+"\\"+ ktalk_dialog, 'r', encoding='utf-8')
    lines = ktalk_file.readlines()
    for line in lines:
        line = line.strip()

        # 카톡방에 따라 특성이 다를 수 있을 것 같은데...
        # 샘플로 사용한 로블록스 방은 거의 단문이라 대화 시작 문장만 사용하고, 여러줄은 무시함.
        # 정규식으로 형식 판별해도 되는데, 기간이 짧으면 그냥 특정 연도로...
        hm = line.find(':') # 시분 구분자
        hm2 = line.find(':',hm+1)
        if line[:4]=='2023' and  hm2> hm:
            print(line[hm2+1:])
            result_file.write(line[hm2+1:]+'\n')
    ktalk_file.close()

result_file.close()

결과는 아래와 같이 대화 내용만 저장 됩니다.

 청소년들이 사용하는 용어를 보니, 표준어가 아닌 것과 신조어, 채팅어 등이 많아서 형태소 분석이 어떻게 될지 궁금하네요. 그래도 주로 많이 사용하는 단어가 "아직은" 표준어와 그렇게 큰 차이가 나는 것은 아니므로 대략 비슷하게 나오지 않을까 예상 됩니다. 만약, 빈도수가 높은데 신조어라서 제대로 처리를 못하는 단어가 있다면, 사용자 정의 사전을 추가 해 주는 것도 필요할 것 같습니다. 

 

 사용자 정의 사전을 추가하는 과정은, 다양한 도메인에 적용하기 위해서는 어쩌면 필수적인 과정이 되어야 하는 것 아닐까 싶네요. 어떤 결과가 나올지 한번 살펴보도록 하죠.

 

 다음에는 형태소 분석을 하여 단어별 빈도수를 구해보겠습니다. 형태소 중 Word cloud에 사용 할 만한 요소를 먼저 검토하는 과정을 거치고, 사용자 정의 사전의 필요성도 검토한 후, 이를 고려하여 최종적인 주요 단어 빈도수를 추출 해 보도록 하겠습니다.

728x90
반응형

댓글