글 작성자: nouu

고등학교 친구들 단톡이 있는데 대화 내용의 빈도 수가 가장 높은 단어가 무엇인지 궁금해져서 wordCloud로 나타내 보았다. 

 

카카오톡의 대화 내용 내보내기 기능과 python 내장 메서드인 open() 메서드와 wordcloud 라이브러리를 사용했다. 통합개발 환경은 아나콘다 주피터 노트북을 사용하였다. 

 

 

일단 모든 OS의 컴퓨터나 휴대폰은 우측 상단의 대화 내보내기를 통해 대화 내용을 저장할 수 있다. 그런데 구글 검색을 지속적으로 하여 나만의 생각을 정리한 결론을 써보자면, 예전에는 텍스트만 보내기를 누르면 대화 내용만 .txt의 형태로 파일이 저장되었다. 그리고 모든 메세지 내부 저장소에 저장을 누르면 대화 내용이 .csv 파일로 저장 되었고 다수의 이미지 캡처와 동영상등이 저장 되었다.

하지만 지금은 모든 메세지 내부 저장소에 저장을 누르면 .csv 파일로 저장되는게 아닌 .txt 파일로 저장이 된다. csv로 저장을 하려면 Mac OS를 이용하여 우상단 메뉴 > 채팅방 설정을 들어간 후 저장공간 관리 > 대화 내용 저장 > 다운로드를 하면 .csv 파일로 만들 수 있다고 한다. Mac OS가 아니라서 못한다? VMWare를 사용하여 MacOS 가상 OS를 만들던가 openxl 라이브러리나 pandas를 사용하여 데이터 가공을 할 수 밖에 없을 것 같다... 자세한 내용은 아래의 내용을 참조하면 된다. 

 

keycolor50.blogspot.com/2019/08/kakaotalk.html

 

 

내가 가공 하여 시각화 하고 싶은 카카오톡을 내보내기 하였다면 다음과 같은 코드를 입력하여 txt 파일을 읽어들였다.

 

text = ""

with open("kakao.txt", 'r', encoding = "utf-8") as txt :
    lines = txt.readlines()
    for line in lines :
        text += line

print(text)

그러면 다음과 같이 카카오톡 대화 내용이 출력 될 것이다. 

 

 

친구1, 친구2, 친구3 ... 님과 카카오톡 대화 

저장한 날짜 : 2021-02-16

 

------------------ 2020년 8월 10일 월요일 -------------------

[친구1] [오전 1:12] 영상ㅈㄴ재밌다

[친구2] [오전 1:56] 어쩌라고 싯발

[친구3] [오전 2:46] ㅋㅋ저거 예전에 봤는데

[친구3] [오전 2:46] 존나 빡침이 느껴짐

[친구4] [오전 6:49] 드디어

[친구4] [오전 6:49] 친구3이

[친구4] [오전 6:49] 말을한다

 

 

txt 파일을 wordcloud로 이미지화 할 것이기 떄문에 대화 내용만 있으면 된다. for문에 슬라이싱을 적고 인덱스와 split() 함수를 이용하면 대화 내용만 추출 될 것이다. 또한  '] [' 즉, 대괄호 두개가 있어야 대화 내용이라고 볼 수 있기 때문에 조건문을 사용하여 대화 내용만 추출한다. 

 

text = ""

with open("kakao.txt", 'r', encoding = "utf-8") as txt :
    lines = txt.readlines()
    for line in lines[4:] :
        if '] [' in line :
            text += line.split('] ')[2]
        
print(text)

 

마지막으로 replace() 메서드를 사용하여 대화 내용중 '삭제된 메시지입니다.\n' 라던가 '샵검색' 과 같은 텍스트는 과감하게 삭제하면 된다. re 라이브러리, 그러니까 정규 표현식으로 삭제 할 수 있지만 정규 표현식의 지식을 다 채우지 못한 터라 replace() 함수를 사용하여 삭제했다. 코드가 길어져도 양해 바랍니다 ㅠㅠ

 

text = ""

with open("kakao.txt", 'r', encoding = "utf-8") as txt :
    lines = txt.readlines()
    for line in lines[4:] :
        if '] [' in line :
            text += ( line.split('] ')[2].replace('이모티콘\n', "")
            .replace("사진\n", "").replace('삭제된 메세지입니다.\n', "").replace('ㅇ', '').replace("샵검색", '') )
        
print(text)

 

코드가 길어져 코드를 개행한 뒤에 ( ) 를 덮어 코드 에러를 막았다. 

 

영상ㅈㄴ재밌다

어쩌라고 싯발

ㅋㅋ저거 예전에 봤는데

존나 빡침이 느껴짐

드디어

친구3이

말을한다

.

.

.

 

위와 같은 코드를 입력 후 컴파일 뒤 실행한다면 다음과 같은 텍스트가 출력된다. 

 

다음으로 wordcloud 라이브러리를 통해 자주 나오는 단어를 이미지로 만든다. 그 전에 한글을 사용할 수 있는 폰트를 찾아야 한다. 이는 다음과 같이 matplotlib 라이브러리를 통해 해당 폰트의 경로를 찾는 과정만 거치면 된다. 

 

import matplotlib.font_manager as fm 

for font in fm.fontManager.ttflist :
    if 'Gothic' in font.name :
        print(font.fname)

 

font를 한글을 쓸 수 있는 대표적인 폰트인 '고딕' 폰트의 경로를 찾을 수 있다. 그럼 다음과 같이 

 

C:\Windows\Fonts\COPRGTL.TTF

C:\Windows\Fonts\GOTHICB.TTF

.

.

. 

와 같은 폰트 경로들이 출력한다. 이제 wordcloud 라이브러리의 WorldColud 클래스를 사용해 font_path 파라미터에 해당 경로를 집어 넣으면 된다. 

 

from wordcloud import WordCloud

wc = WordCloud(font_path= "C:\Windows\Fonts\나눔고딕코딩.ttf", background_color= "white", width = 600, height = 400)
wc.generate(text) # 많이 나오는 텍스트를 서칭하고 정리하는 메서드
wc.to_file("noMan.png")

 

그럼 noMan.png 이미지가 주피터 노트북 파일이 있는 경로에 만들어 진 것을 확인 할 수 있다. 내가 만든건 프라이버시 이기 때문에 올리지 않으면 이 글을 마치겠다. (아래의 티스토리 블로그가 많은 도움이 되었다.)

 

참고 블로그 : creatorjo.tistory.com/91

 

파이썬 크롤링(웹스크래핑) - 카톡 대화 워드클라우드로 만들기

스파르타 코딩 파이썬 혼자 놀기 패키지 3일차! 오늘은 '파이썬으로 카카오톡 대화 내용을 읽고 편집하여 워드 클라우드로 만드는 것!'을 배웠다. 강의 내용을 정리하기 전, 다시 한 번 알게된 어

creatorjo.tistory.com