보고 싶어서 떨리는 사람의 감정을 분석하고 싶어요.

하고 싶은 일


보고 싶어서 떨리는 사람의 감정을 이해하다
가사를 통해서 감정 분석을 해요.
밝은 노래인가요?
슬픈 노래인가요?
판정하고 싶어요.
음악 발표 서비스 등을 통해 밝은 곡, 슬픈 곡 등 애매한 검색을 할 수 있었으면 좋겠다.
올해는 액운의 해여서 좋은 일이 없으니 밝은 곡을 열심히 듣겠습니다.

가사를 분석해보도록 하겠습니다.


분석 도구


COTOHA API
Python 3.8.1

분석 대상


보고 싶고 보고 싶고 떨리는 곡.

  • 니시노 가나 "보고 싶어, 보고 싶어"
  • 다음은 레코드 제작사 이미 분류되어 제 취미에 따라 곡을 선정했습니다.

    명쾌한 곡

  • 그린'기적'
  • 산호대사'세계는 그것을 사랑이라고 부른다'
  • SPYAIR'BEAUTIFUL DAYS'* RecoChoku에는 없지만 필자가 좋아하는 곡
  • 슬픈 곡

  • 평정견의
  • back number“HappyEnding”
  • 코드


    감정 분석을 통해 선인장이 춤을 멈출 수 있을까
    참고하라고 했어요.
    이루어지다
    top/
     ├ file/
     │ ├ input.txt   (分析する歌詞)
     │ └ output.csv (出力結果)
     ├ config.ini
      └ cotoha_sentiment.py
    
    cotoha_sentiment.py
    # -*- coding:utf-8 -*-
    
    import os
    import urllib.request
    import json
    import configparser
    import codecs
    import csv
    
    
    class CotohaApi:
        def __init__(self, client_id, client_secret, developer_api_base_url, access_token_publish_url):
            self.client_id = client_id
            self.client_secret = client_secret
            self.developer_api_base_url = developer_api_base_url
            self.access_token_publish_url = access_token_publish_url
            self.getAccessToken()
    
        def getAccessToken(self):
            url = self.access_token_publish_url
            headers={
                "Content-Type": "application/json;charset=UTF-8"
            }
    
            data = {
                "grantType": "client_credentials",
                "clientId": self.client_id,
                "clientSecret": self.client_secret
            }
            data = json.dumps(data).encode()
            req = urllib.request.Request(url, data, headers)
            res = urllib.request.urlopen(req)
            res_body = res.read()
            res_body = json.loads(res_body)
            self.access_token = res_body["access_token"]
    
        # 感情分析API
        def sentiment(self, sentence):
            url = self.developer_api_base_url + "nlp/v1/sentiment"
            headers={
                "Authorization": "Bearer " + self.access_token,
                "Content-Type": "application/json;charset=UTF-8",
            }
            data = {
                "sentence": sentence
            }
            data = json.dumps(data).encode()
            req = urllib.request.Request(url, data, headers)
            try:
                res = urllib.request.urlopen(req)
            except urllib.request.HTTPError as e:
                print ("<Error> " + e.reason)
    
            res_body = res.read()
            res_body = json.loads(res_body)
            return res_body
    
    if __name__ == '__main__':
        APP_ROOT = os.path.dirname(os.path.abspath( __file__)) + "/"
    
        # config.iniの値を取得
        config = configparser.ConfigParser()
        config.read(APP_ROOT + "config.ini")
        CLIENT_ID = config.get("COTOHA API", "Developer Client id")
        CLIENT_SECRET = config.get("COTOHA API", "Developer Client secret")
        DEVELOPER_API_BASE_URL = config.get("COTOHA API", "Developer API Base URL")
        ACCESS_TOKEN_PUBLISH_URL = config.get("COTOHA API", "Access Token Publish URL")
    
        cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)
    
           # file/infile.txtから解析対象文取得
        checkpath = 'file/input.txt'
        song_data = open(checkpath, "r", encoding='utf-8')
    
        output_file = open('file/output.csv', 'w')
        writer = csv.writer(output_file, lineterminator='\n') # 改行コード(\n)を指定しておく
    
        sentence = song_data.readline()
        while sentence:
            print(sentence.strip())
            # API実行
            result = cotoha_api.sentiment(sentence)
    
            score = result["result"]["score"]
            print(score)
            sentiment = result["result"]["sentiment"]
            print(sentiment)
    
            one_row = [score,sentiment]
            writer.writerow(one_row)  # listを渡す
    
            sentence = song_data.readline()
    
        song_data.close()
        output_file.close()
    
    

    분석 결과


    시노 가나: 보고 싶어요. 보고 싶어요.


    가사
    会いたくて 会いたくて 震える 
    君想うほど遠く感じて 
    もう一度聞かせて嘘でも 
    あの日のように"好きだよ"って… 
    …
    


    생각보다 그렇게 소극적이지 않아요.

    그린 "기적"


    가사
    明日、今日よりも好きになれる 溢れる想いが止まらない 
    今もこんなに好きでいるのに 言葉に出来ない 
    君のくれた日々が積み重なり 過ぎ去った日々2人歩いた『軌跡』 
    …
    


    상당히 적극적인 곡

    세상은 그것을 사랑이라고 부른다


    가사.
    涙の中にかすかな灯りがともったら 
    君の目の前で
    あたためてた事話すのさ 
    …
    


    굳이 말하자면 부정적인 가사가 많아요.

    SPYAIR 「BEAUTIFUL DAYS」


    가사.
    プラスにもっと変えていける そうやって信じていこう 
    誰かが君を笑っても 俺は笑ったりしないよ 
    新たなスタート どんな君も輝いていけるさ 
    不安&期待で Oh Try yourself 
    …
    


    굉장히 긍정적인 곡인 것 같아요.

    평정견의 《기실문학》


    가사.
    描いた夢は叶わないことの方が多い 
    優れた人を羨んでは自分が嫌になる 
    浅い眠りに押しつぶされそうな夜もある 
    …
    


    부정적

    back number“HappyEnding”


    가사.
    さよならが喉の奥につっかえてしまって 
    咳をするみたいにありがとうって言ったの 
    次の言葉はどこかとポケットを探しても 
    …
    


    균형감이 좋다

    총결산


    보고 싶은데 보고 싶어 떨리는 사람 감정 이해 못해
    이번 감정 분석은 가사가 한 줄 한 줄 진행되었습니다.
    나는 단어의 순서도 있다고 생각했는데 결과적으로 편차가 생겼다.
    가사의 입도를 좀 더 자세히 분석해보면 더 정확한 결과가 나올 것 같아서 시간이 나면 해볼게요.

    좋은 웹페이지 즐겨찾기