본문 바로가기
Python

[파이썬] 네이버 클로바 Sentiment 문장 텍스트 감정 분석

by 퍼포먼스마케팅코더 2022. 6. 19.
반응형

바빠서 시간이 부족하거나 파이썬 코딩이 처음인 사람들이 많다. 누구나 손쉽게 코딩을 배우고 바로 업무자동화,디지털마케팅 등에 쓰일만한 여러 가지 파이썬 코드를 만들고 있다. 이에 파이썬 구글 블로거 API 자동 포스팅하기 를 통해 파이썬 코드 공유드린다. 이에 오늘 하루도 여러분들의 컴퓨터 업무에 자유로운 나날이 길어지길 바란다. 오늘은 네이버 클라우드 서비스 내에 보이는 API를 가져왔다. 이름하여 네이버 Sentiment API 라고 하는데, 이는 텍스트에 담긴 감정(긍정/부정/중립)을 분석해 주는 API라고 한다. 

 

파이썬 네이버 sentiment 긍정 부정 판별 분석

 

https://www.ncloud.com/product/aiService/clovaSentiment

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

 

거기에 들어가서 네이버 Sentiment API 이용 신청하고, client id 와 client secret 키만 받으면 완료된다. 그럼 긍정 부정 단어를 얼마나 잘 판별해 주는지 테스트해볼까? 아래는 테스트할 컨텐츠 텍스트들을 여러가지를 집어넣어봤다. 

네이버 클로바 Sentiment 문장 텍스트 감정 분석

 

하기 코딩은 json으로 위에 보여진 메모장 내 텍스트를 얼마나 긍정, 부정으로 판별해 줄까가 궁금해서 넣어보았다. 800단어씩 시범으로 돌려보기로 한다.(1000~1500자까지 된다고는 하는데, 이상하게 에러가 발생되는경우가 있어서 800단어로 세팅했다.)

import json

file = open('C:/Users/user/raw/naver_blog/positive_negative_text_result.txt', 'w', encoding='utf8') #결과파일

n = 1 #첫번째
m = 800  #두번째

for i in range(1, 2) : #41번
    client_id = ""  #클라이언트 키
    client_secret = "" #클라이언트 시크릿 키

    url="https://naveropenapi.apigw.ntruss.com/sentiment-analysis/v1/analyze"

    headers = {
        "X-NCP-APIGW-API-KEY-ID": client_id,
        "X-NCP-APIGW-API-KEY": client_secret,
        "Content-Type": "application/json"
    }

    f = open('C:/Users/user/raw/naver_blog/blog_content.txt', 'r', encoding='utf8')
    text = f.read()
    text_2 = text.replace("\n", "")
    text_3 = text_2.replace("________________", " ")

    content = text_3[n:m] #800단어씩

    data = {
      "content": content
    }
    print(json.dumps(data, indent=4, sort_keys=True))
    response = requests.post(url, data=json.dumps(data), headers=headers)
    rescode = response.status_code
    if(rescode == 200):
        print (response.text)
    else:
        print("Error : " + response.text)

    f.close()    

    text = response.json()

    raw = text['sentences']


    max_cnt = len(raw) #리스트 개수

    for i in range(0, max_cnt) : 
        content = str(raw[i]['content']) #텍스트
        offset = int(raw[i]['highlights'][0]['offset']) #오프셋
        length = int(raw[i]['highlights'][0]['length']) #해당 길이
        text = content[offset : offset + length] #부정 의미가 있는 문구 텍스트 추출
        #print(text)
        file.write(str(text) + '\n')
    
    n += 800
    m += 800

file.close()

 

먼저 아래와 같이 나오긴 했는데, 보아하니 문장 1줄을 읽고, 이에 빠른 offset, 해당 문장 길이(length), 그리고 sentiment 판별결과 (긍정, 부정, 중립 이렇게 있는것 같다.) 이외 confidence 라고 해서 각 negative, positive, neutral 등의 지수를 적어주는 것 같다. highlights 는 해당 분석된 문장을 보여주는것 같다. 그럼 긍정 텍스트가 담긴 텍스트만 뽑아볼까?

 

네이버 클로바 Sentiment 문장 텍스트 감정 분석

 

 

아래는 해당 텍스트된 문장에서 긍정 의미를 가진 걸로 판명된 문장만 따로 텍스트 추출하는 걸로 해봤다.

 

max_cnt = len(raw) #리스트 개수

for i in range(0, max_cnt) :
    if (raw[i]['sentiment'] == 'positive') : #긍정 의미를 가질경우
        content = str(raw[i]['content']) #텍스트
        offset = int(raw[i]['highlights'][0]['offset']) #오프셋
        length = int(raw[i]['highlights'][0]['length']) #해당 길이
        text = content[offset : offset + length] #긍정 의미가 있는 문구 텍스트 추출
        print(text)

 

밑에가 그 결과다. 보아하니 긍정적인 부문만 잘 긁어서 가져다 보는것 같다. (역시 네이버 AI 기술도 좋다..)

보아하니 이런식으로 긍정, 부정 의미가 담긴 리뷰를 저렇게 판별 분석을 해서 뭔가 이용한다면은 굉장히 긍정적인 용도로 쓸 수 있을 것 같다. 차후엔 텍스트 추출 이후 해당 텍스트 내 감정 분석 등을 통해 좋은 부문을 광고 문구 등에 응용할 수 있는 방안도 찾아보면 좋을 것 같다.

 

네이버 클로바 Sentiment 문장 텍스트 감정 분석

반응형

댓글