[PYTHON] Vtuber est-il positif? Est-ce négatif?

introduction

Y a-t-il beaucoup de gens positifs à Vtuber? Y a-t-il beaucoup de gens négatifs? Cette fois, j'ai analysé les émotions des tweets de Vtuber et mesuré le degré de positivité.

En conséquence, Natori Sana s'est avéré positif.

[('Neutral', 31), ('Positive', 12), ('Negative', 7)]
1.7142857142857142
Un peu positif

Nous avons également analysé les tweets de DWU et Massinary Tomoko.

Quoi utiliser

Introduction de l'API COTOHA

Cette fois, nous analyserons les émotions avec l 'API COTOHA. COTOHA API est une API développée par NTT Communications et utilise les résultats de 40 ans de recherche sur la technologie japonaise. Vous pouvez facilement analyser les émotions ennuyeuses simplement en envoyant un texte. En plus de l'API d'analyse des émotions utilisée cette fois, il existe des API d'analyse de syntaxe et d'extraction de mots-clés.

Flux pour mesurer la positivité

  1. Obtenez la clé API Twitter
  2. Obtenez la clé API pour API COTOHA
  3. Obtenez les tweets de l'utilisateur cible avec tweepy
  4. Nettoyez le tweet
  5. Effectuer une analyse des émotions avec API COTOHA
  6. Déterminez le degré de positivité par le rapport des tweets positifs et des tweets négatifs

Jugement des degrés positifs et négatifs

Comme politique de base, nous analyserons d'abord une cinquantaine d'émotions. Sur les 50 tweets, s'il y a plus de tweets positifs que de tweets négatifs, ils sont considérés comme positifs. Si le contraire est vrai, il sera jugé négatif. Après cela, j'ai essayé de trier assez positif et un peu positif par la valeur de sens.

la mise en oeuvre

Cette fois, je l'ai implémenté avec google colaboratory. Veuillez consulter ici pour une mise en œuvre détaillée. En réécrivant la clé API de Twitter et la clé API de COTOHA API, vous pouvez mesurer la positivité de votre utilisateur préféré.

BASE_URL = "https://api.ce-cotoha.com/api/dev/nlp/"
CLIENT_ID = "hogehoge"
CLIENT_SECRET = "hogehoge"

def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    
    return r.json()["access_token"]

def sentiment(sentence, access_token):
    base_url = BASE_URL
    
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    
    data = {
        "sentence": sentence,
        "type": "kuzure"
    }
    
    r = requests.post(base_url + "v1/sentiment",
                      headers=headers,
                      data=json.dumps(data))
    return r

def cleansing_tweet(tweet):
    clean_tweets = []
    for line in tweet:
        temp = line.text
        temp = re.sub('RT .*', '', temp)
        temp = re.sub('@.*', '', temp)
        temp = re.sub('http.*', '', temp)
        temp = re.sub('\n.*', '', temp)
        temp = re.sub('\u3000.*', '', temp)
        if len(temp) != 0:
            clean_tweets.append(temp)
        if len(clean_tweets) >= 50:
            break
    return clean_tweets

def check_positive(result):
    counter = Counter(result)
    print(counter.most_common())
    positive_negative = counter["Positive"]/counter["Negative"]
    print(positive_negative)
    if positive_negative > 1:
        if positive_negative > 4:
            print("Très positif")
        elif positive_negative > 2:
            print("Positif")
        elif positive_negative > 1:
            print("Un peu positif")
    elif positive_negative < 1:
        if positive_negative < 0.25:
            print("Très négatif")
        elif positive_negative < 0.5:
            print("Est négatif")
        elif positive_negative < 1:
            print("Un peu négatif")
    elif counter["Positive"] == 0 and counter["Negative"] == 0:
        print("Sentiments perdus")

résultat

Tout d'abord, analysons les tweets de Sunshine Ikezaki pour voir si le jugement positif est fait correctement.

Résultats de l'analyse de Sunshine Ikezaki

[('Neutral', 32), ('Positive', 16), ('Negative', 2)]
8.0
Très positif

Il semble que vous puissiez juger correctement. Analysons Vtuber.

Résultat de l'analyse de Sana Natori

[('Neutral', 31), ('Positive', 12), ('Negative', 7)]
1.7142857142857142
Un peu positif

Résultat d'analyse de DWU

[('Neutral', 28), ('Negative', 15), ('Positive', 7)]
0.4666666666666667
Est négatif

Résultat de l'analyse de Machinery Tomoko

[('Neutral', 27), ('Positive', 16), ('Negative', 7)]
2.2857142857142856
Positif

Résumé

Cette fois, j'ai reçu des tweets, analysé les émotions et jugé les degrés positifs et négatifs. Quant aux perspectives d'avenir, il semble intéressant de juger en utilisant non seulement les émotions de la phrase entière mais aussi des mots émotionnels.

Lien de référence

Recommended Posts

Vtuber est-il positif? Est-ce négatif?
Analyse négative / positive 3 Analyse négative / positive de Twitter (2)
Analyse négative / positive 1 Application de l'analyse de texte