본문 바로가기
기타

카카오톡 대화 내용 빈도 추출

by 볼록티 2019. 12. 26.
728x90
반응형

연말이 다가오고 이제 지인 혹은 연인과의 대화 내용을 한번 곱씹어도 좋을 것 같아서 매해마다 재미로 해본다. 예전에는 몇년이고 모든 대화를 다 내보낼 수 있어서 좋았는데, 지금은 최근 3개월만 내보내지는 듯해서 아쉽다. 하지만 최근 3개월이라 기억이 더욱 잘나서 그런가 공감도 더 잘되고 더 재밌는듯 하기도 하다.

 

아무튼 간단한 코드로 pc카톡을 통해서 내보낸 대화내용을 가지고 2글자 이상!인 단어들로 하여금 빈도를 쭉 뽑아보았다.

 

위처럼 pc카톡에서 쉽게 대화를 내보낼 수 있다. 내보내진 대화 파일은 text파일로 저장이 되서 쉽게 열어볼 수 있다.

 

이제 파이썬을 열고! 

 

현재 디렉토리! 내보낸 대화 파일명! 이 두가지만 가지고 한번 결과를 내보자 !

 

 

 

 

 

코드에 함수를 사용하기 위해서 아래의 매개변수에 대한 설명을 읽고 수행하자.

 

file: 파일이름 형식. 예 : ("파일이름.txt")

path와 file 모두 문자형식으로 입력.

추가하고 싶은 단어가 있을 경우 함수 안에서 입력. (add_dictionary 사용)

 

 

 

!pip install customized_konlpy # ckonlpy 패키지 설치

 

이제 이 함수만 실행시키면 된다.

def conversation(path, file):
    
    # 모듈
    import os
    import re
    import operator
    import pandas as pd
    from datetime import datetime
    from ckonlpy.tag import Twitter

    
    #0 현재 경로 설정
    os.chdir(path) 
    
    #1 시간 체크
    start = datetime.now()

    #2 파일 불러오기
    kakao=[]
    with open(file, "r", encoding='utf-8') as f:
        for i in f.readlines():
            kakao.append(i)

            
            
            
    ###3 추가하고 싶은 단어를 추가하는 곳.
    
    twitter=Twitter() # Twitter 생성자 호출
    twitter.add_dictionary('학식', 'Noun') #예시
    twitter.add_dictionary(['학식','학생식당'], 'Noun') #예시


    
    
    ###4 형태소 추출 및 전처리

    kakao_morphs=[]
    for i in kakao:
        i = re.sub("[0-9]"," ",i)
        i = re.sub("[\n:-~]"," ",i)
        i = re.sub("[ㄱ-ㅎ]"," ",i)
        i = re.sub("[오전]"," ",i)
        i = re.sub("[이모티콘]"," ",i)
        kakao_morphs.append(twitter.pos(i))

        
        
        
    ###5 명사, 동사만 추출

    kakao_words=[]
    for i in kakao_morphs:
        tmp=[list(j)[0] for j in i if list(j)[1] in ['Noun','Verb']]
        tmp=[i for i in tmp if len(i) > 1]
        kakao_words.extend(tmp)

        
        
        
    ###6 빈도순으로 추출

    words_freq={}
    for i in kakao_words:
        if i not in list(words_freq.keys()):
            words_freq[i]=1
        else:
            words_freq[i]=words_freq[i]+1

    sorted_words = sorted(words_freq.items(), key=operator.itemgetter(1), reverse=True)

    
    
    
    ###7 엑셀 저장

    df=pd.DataFrame(sorted_words)
    df.to_excel("conversation.xlsx")

    print("걸린시간: ", datetime.now()-start)

 

 

## 혹시 경로(path) 설정시 unicode에러가 나면 아래 예시처럼 앞에 r을 붙여본다. 

 

아래에 입력해야할 것만 잘 입력하면 아무 문제없이 엑셀파일까지 잘 나온다 !

conversation(r"C:\Users\Anaconda3","정.txt")

 

 

실행 후에는 설정한 path 에 엑셀파일이 아래와 같이 저장이 된다.

 

파일을 열어보면 아래와 같은 결과물을 얻을 수 있다. 그리고 지인 혹은 연인과 이 결과물에 대하여 연말 피드백을 해본다.

 

 

 

 

 

reference: https://github.com/lovit/customized_konlpy

728x90
반응형

'기타' 카테고리의 다른 글

줌인터넷 투자 콘텐츠 서비스  (0) 2022.05.24
텐서플로우 설치  (0) 2020.04.20
카카오톡 대화 내용 빈도 분석2  (0) 2019.12.26

댓글