CAFE

3. 파이썬 수업

감정분석 긍정부정 양옆으로 붙이기

작성자유연수|작성시간22.07.14|조회수55 목록 댓글 0
def  emotion(keyword):
    #1. 텍스트 파일 3개를 불러옵니다.
    origin_text = open("c:\\data\\" + keyword + ".txt", encoding="utf8")
    positive     = open("c:\\data\\pos_pol_word.txt", encoding="utf8")
    negative    = open("c:\\data\\neg_pol_word.txt", encoding="utf8" )

    #2. 위의 텍스트 파일 3개를 엔터로 구분해서 변수에 담습니다.
    origin = origin_text.read()    # origin_text 를 문자형 변수 origin 에 담는다
    pos =  positive.read().split('\n')  # 긍정단어를 엔터로 구분해서 리스트로 구성
    neg =  negative.read().split('\n') # 부정단어를 엔터로 구분해서 리스트로 구성

    #3. pos 와 neg 리스트에서 결측치를 제거합니다.
    pos = list( filter( lambda  x : x, pos ) )
    neg = list( filter( lambda x : x, neg ) )

    #4. 단어 한자리는 삭제
    pos1 = list( filter( lambda  x : True  if len(x) > 1  else  False, pos ) )
    neg1 = list( filter( lambda  x : True  if len(x) > 1  else  False, neg ) )

    #5. 분석하고자 하는 텍스트에 나오는 긍정단어와 부정단어 저장할 csv 파일 생성 
    f2 = open("c:\\data\\origin_pos.csv", "w", encoding="utf8")
    f3 = open("c:\\data\\origin_nag.csv", "w", encoding="utf8")
    

    #6. 긍정단어에서 제외시키고 싶은 단어들을 제외시킵니다.
    pos1.remove('ㅎㅎ')
    pos1.remove('^^')
    pos1.remove('이벤트')
    pos1.remove('어진')

    #7. 원본 데이터에서 긍정단어가 얼마나 포함되었는지 확인하고 내리는 코드

    for  i  in   pos1:
        if  i  in  origin:
            f2.write( i + ',' + str( origin.count(i) ) + '\n' )
            
    f2.close()    

    #8. 위에서 생성한 csv 파일을 판다스 데이터 프레임으로 만들어서 출력하는 코드
    import  pandas  as  pd
    
    pd.set_option('display.max_rows', None ) # 결과 출력시 중간에 생략하지 않고 다 출력

    origin_df = pd.read_csv("c:\\data\\origin_pos.csv", header=None)
    origin_df.columns=['word', 'cnt'] 
    origin_df['순위']=origin_df['cnt'].rank(method='dense', ascending=False).astype(int)
    a_pos = origin_df[:].sort_values(by=['순위']).head(20)   # 상위 20개만 출력
    
    #9. 부정단어에서 제외시키고 싶은 단어들을 제외시킵니다.
   # neg1.remove('ㅜㅜ')
   # neg1.remove('ㅠㅠ')
   # neg1.remove('마약')
   # neg1.remove('물리')

    #10. 원본 데이터에서 부정단어가 얼마나 포함되었는지 확인하고 내리는 코드

    for  i  in  neg1:
        if  i  in  origin:
            f3.write( i + ',' + str( origin.count(i) ) + '\n' )
            
    f3.close()    

    #11. 위에서 생성한 csv 파일을 판다스 데이터 프레임으로 만들어서 출력하는 코드
    import  pandas  as  pd
    
    pd.set_option('display.max_rows', None ) # 결과 출력시 중간에 생략하지 않고 다 출력

    origin_nag_df = pd.read_csv("c:\\data\\origin_nag.csv", header=None)
    origin_nag_df.columns=['word', 'cnt'] 
    origin_nag_df['순위']=origin_nag_df['cnt'].rank(method='dense', ascending=False).astype(int)
    a_nag = origin_nag_df[:].sort_values(by=['순위']).head(20)   # 상위 20개만 출력
    
    #12. 긍정 데이터 프레임과 부정 데이터 프레임을 옆으로 붙이는 코드
    
    a_pos.reset_index(drop=True, inplace=True)   # a_pos 데이터 프레임의 인덱스 없앰
    a_nag.reset_index(drop=True, inplace=True)  # a_nag 데이터 프레임의 인덱스 없앰
    df_posneg=pd.concat([a_pos,a_nag],axis=1)   # 인덱스 없는 상태에서 그냥 그대로
                                                # 양옆으로 붙인다.
    
    return df_posneg.style.hide_index()


emotion('naver_blog') 
다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼