2018. 8. 14. 20:21ㆍProgramming/Python
ChatLogAnalyzer(KakaoTalk)
제품 설명
안드로이드 폰에서 대화내용 내보내기로 얻어낸 카카오톡 채팅로그 txt 파일을 분석합니다. 대화 참여 인원 중 누가 몇 글자를 떠들었는지, 각 개인별로 많이 언급했던 키워드는 어떻게 되는지를 표시하고, 시간대별, 날짜별 데이터도 전부 분석이 됩니다.
현재 버전에서는 개인별 키워드 분석만이 콘솔 상에 표시가 되며, 나머지 데이터들은 .json 형식으로 /result/(텍스트 파일 이름)/ 폴더에 전부 저장됩니다.
제작 계기
코드를 보면 알겠지만 상당히 조악합니다. 이유인 즉슨, 파이썬을 막 배웠을 초창기에 만들었기 때문입니다. 16년도 겨울에 학교에서 파이썬을 배우면서, 파이썬을 가지고 좀 더 유의미한 프로젝트를 하고 싶어 조사를 해보다가, 파이썬에 자연어 처리 라이브러리가 있다는 것을 알게 되었습니다. 이걸 가지고 카카오톡 채팅 로그를 분석하는 프로그램을 만들면 재미있을 것 같다는 생각을 했었습니다.
그 당시에 윈도우에서 KoNLPy로 어떻게 프로그램을 만들어 돌리는 데는 성공했습니다만, 일단 KoNLPy에 포함된 Tagger들이 대부분 Java에서 만들어진 모듈을 끌어다 쓰는 정도라 성능상 한계가 있었기에(툭 하면 NullPointerException이 발생했습니다. 혹은 분석 도중에 프로그램이 꺼지는 경우도 있었습니다.) 더 이상 손대지 않고 방치했었습니다.
그 이후로 2년이 지났고, 프로그래밍 실력이 조금이나마(?) 늘기도 했고, 제가 윈도우에서 벗어나게 되면서 다시 이 프로젝트를 손댈 수 있겠다고 판단했습니다. 원래는 시각화 과정까지 전부 이 프로그램에서 처리하도록 할 생각이었습니다만, (혹시라도 제 조악한 결과물을 이용할 분이 있으시다면) 데이터 출력만을 담당하고, 시각화는 다른 패키지에서 수행할 수 있도록 하는 것이 이 모듈의 사용성을 높이는 방법이라 판단했습니다.
KoNLPy를 쓰는 것에서 Mecab-ko를 쓰는 쪽으로 방향을 바꿨고, KoNLPy의 nouns 같은 메소드를 쓸 수 없게 됨에 따라 WordAnalyzer라는 클래스를 별도로 생성했습니다. 이는 Mecab이 분석한 결과 중에서 자신이 원하는 태그만 따로 필터링해서 추출할 수 있도록 해줍니다.
기본적인 기능은 수행합니다만, 몇가지 한계점이 있습니다. 다음에 업데이트 할 부분이니 참조하시면 좋겠습니다.
- 지금은 수행 후에 path를 직접 입력하는 형태입니다만, 앞으로 CLI 상에서 작동하도록 변경할 예정입니다. python3 surplus.py /home/Chat.txt 이런 식이 되겠네요.
- 안드로이드 폰에서 추출한 채팅 로그만 분석이 가능합니다. 아이폰과 안드로이드 폰의 채팅 로그 형식이 다소 차이가 있는데, 이 분석기는 오로지 안드로이드에 맞춰서 작동하도록 설계되었습니다. 다음 업데이트에 아이폰 형식도 추가할 예정입니다.
- 우분투에서만 동작을 확인했습니다. 코딩은 mac OS에서 docker로 ubuntu 이미지에 mecab과 mecab-ko를 설치한 상태에서 진행했습니다. 다른 OS에서 작동할 지는 장담할 수 없습니다. 특히, mecab은 윈도우를 미지원하므로 윈도우에선 절대로 작동하지 않습니다.
사용 방법
선행 조건으로 윈도우가 아니어야 하며, mecab과 mecab-ko가 설치되어 있어야만 합니다. 설치 방법에 대해서는 다른 사이트를 참조하시고, 윈도우 환경이신 분들은 docker나 Virtualbox 등으로 해결하시는 게 좋을 듯 합니다.
python3로 surplus.py를 실행합니다.
$ python3 surplus.py
위와 같은 명령어를 실행하면 다음과 같은 구문이 뜹니다.
path :
분석하고자 하는 텍스트 파일의 위치를 입력해주시면 됩니다. 상대경로도 가능하고, 절대경로도 가능합니다.
입력하고 나면 (mecab이 정상적으로 설치되어 있고, 경로가 올바르다면) 다음과 같은 분석 결과가 표시됩니다.
path : zakuro.txt WORKDIR : /opt/project OUTPUTDIR : /opt/project/result/zakuro(2) 자쿠로쿠로쿠로 15 카카오톡 대화 저장한 날짜 : 2018년 7월 21일 오후 11:51 2016년 1월 24일 오후 6:06 회원님 ---------------- ('ㅋㅋ', 1906) ('아', 620) ('ㅎㅎ', 479) ('때', 475) ('말', 452) ('누나', 396) ('사람', 350) ('뭐', 328) ('형', 323) ('집', 307) ('생각', 273) ('개', 242) ('애', 218) ('기타', 206) ('승규', 175) ('전', 170) ('게임', 168) ('시간', 167) ('졍', 152) ('밥', 151) ('아니', 150) ('ㄴ', 149) ('이야기', 149) ('일', 142) ('정도', 137) ('일본', 135) ('어', 135) ('노래', 133) ('소리', 132) ('ㄷ', 132) ('이름', 131) ('음', 130) ('날', 122) ('돈', 120) ('자쿠로', 114) ('수업', 108) ('이상', 106) ('시발', 106) ('ㅅ', 105) ('러블리', 104) ('여자', 103) ('외대', 100) ('다음', 99) ('끝', 97) ('그래', 96) ('맛', 96) ('교수', 96) ('ㅂ', 95) ('이번', 94) ('오버', 94) ======================== ~~ 이하 생략 ~~
콘솔상에 출력된 내용은 개인별 키워드 일람이며, 대화 총량 분석, 시간대 분석, 날짜별 분석은 /result/(텍스트 파일명)/ 폴더 안에 .json 형태로 저장됩니다.
다만, .json 형태는 정렬이 되어있지 않으므로, 이 데이터를 사용하실 때에는 꼭 정렬을 먼저 하시고 사용하시는 것을 추천합니다.