[PYTHON] Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.

Tyrant Dionis: Ja, was ist passiert?

Meros: Es passiert nicht!

Ich würde gerne über "Running Melos" mit der emotionalen Analyse von COTOHA lesen.

Prozessablauf

  1. Beziehen Sie den vollständigen Text von "Run Meros" von Aozora Bunko
  2. Führen Sie den vollständigen Text von Melos zu COTOHA (Emotionsanalyse).
  3. Zeichnen und analysieren Sie emotionale Werte.

Vorbereitungen

Klonen Sie die Blue Sky-Bibliothek


!git clone --branch master --depth 1 https://github.com/aozorabunko/aozorabunko.git

Code

1. Den vollständigen Text von "Run Meros" erhalten Sie von Aozora Bunko

Erhielt den vollständigen Text von "Run Meros" von Aozora Bunko


from bs4 import BeautifulSoup

def get_word():

  #Geben Sie den Pfad aus dem geklonten HTML an(Führen Sie meros aus)
  path_to_html='aozorabunko/cards/000035/files/1567_14913.html'
  
  #HTML-Analyse mit schöner Suppe
  with open(path_to_html, 'rb') as html:
    soup = BeautifulSoup(html, 'lxml')
  main_text = soup.find("div", class_='main_text')
  for yomigana in main_text.find_all(["rp","h4","rt"]):
    yomigana.decompose()
  sentences = [line.strip() for line in main_text.text.strip().splitlines()]
  aozora_text=','.join(sentences)

  aozora_text_list = aozora_text.split("。")
  return aozora_text_list
Erhielt den vollständigen Text von "Run Meros" vom lokal geklonten Aozora Bunko. Außerdem kann es nicht auf die API angewendet werden (die Anzahl der Zeichen ist groß). Es ist für jedes Satzzeichen unterteilt und angeordnet.
2. Ausführen Der vollständige Text von Melos wird auf COTOHA (Emotionsanalyse) angewendet.

Führen Sie den Meros-Volltext COTOHA aus(Emotionsanalyse)Ich werde gehen zu.


mport os
import urllib.request
import json
import configparser
import codecs
import sys
import time


client_id = "Ihre Kunden-ID"
client_secret = "Dein eigener geheimer Schlüssel"

developer_api_base_url = "https://api.ce-cotoha.com/api/dev/nlp/"
access_token_publish_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"

def cotoha_call(sentence_1,api_type):
    #Zugriffstoken erhalten
    def getAccessToken():     
        url = access_token_publish_url
        headers={
            "Content-Type": "application/json;charset=UTF-8"
        }
        data = {
            "grantType": "client_credentials",
            "clientId": client_id,
            "clientSecret": 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)
        access_token = res_body["access_token"]
        return access_token

    #API-URL-Spezifikation(Einzigartige Ausdrucksextraktion)
    base_url_footer = "v1/"  + api_type
    url = developer_api_base_url + base_url_footer
    headers={
        "Authorization": "Bearer " + getAccessToken(), #access_token,
        "Content-Type": "application/json;charset=UTF-8",
    }
    data = {
        "sentence": sentence_1
    }
    data = json.dumps(data).encode()
    time.sleep(0.5)
    req = urllib.request.Request(url, data, headers)
        
    try:
        res = urllib.request.urlopen(req)
    #Was tun, wenn in der Anforderung ein Fehler auftritt?
    except urllib.request.HTTPError as e:
        #Wenn der Statuscode 401 Unauthorized oder 500 Internal Server Error lautet, fordern Sie das Zugriffstoken erneut an und fordern Sie es erneut an
        if e.code == 401 or 500:
            access_token = getAccessToken()
            headers["Authorization"] = "Bearer " + access_token
            time.sleep(0.5)
            req = urllib.request.Request(url, data, headers)
            res = urllib.request.urlopen(req)
        #Wenn der Fehler nicht 401 oder 500 ist, wird die Ursache angezeigt.
        else:
            print ("<Error> " + e.reason)
            #sys.exit()

    res_body = res.read()
    res_body = json.loads(res_body)
    return res_body


sentence = get_word()
end = len(a)
full_text = len(''.join(sentence))
sentiment_list = []
cnt = 0
wcnt = 0
for i in a:
  cnt+=1
  print(str(cnt)+ "/" + str(end))
  b = cotoha_call(i,"sentiment")
  sentiment_list.append([b['result']['sentiment'],b['result']['score'],i,wcnt])
  wcnt+=len(i)

Der Teil, in dem der gesamte Text des arrangierten "Run Meros" auf COTOHA (Emotionsanalyse) angewendet wird. Übrigens, wenn Sie den gesamten Satz von "Run Meros" durch Interpunktionspunkte teilen, wird er in 460 Teile geteilt. Das heißt, es ruft die API 460 Mal auf. (* COTOHA ist auf 1000 API-Aufrufe pro Tag begrenzt, wenn es sich um einen freien Frame handelt.)
3. Stellen Sie die Zahlen grafisch dar.

Stellen Sie die Zahlen grafisch dar.


#Bibliothek zur numerischen Berechnung
import numpy as np
import pandas as pd
import seaborn as sns

#Bibliothek zum Zeichnen von Grafiken
from matplotlib import pyplot as plt

#Spezifikation für die Anzeige des Diagramms in colab
%matplotlib inline

#Passen Sie die Werte für das Diagramm an
graph_x = []
graph_y = []
for i in sentiment_list:
  graph_x.append(i[3])
  if(i[0] == 'Negative'):
    tmp_y = (i[1] * -1) + (-1)
    graph_y.append(tmp_y)

  if(i[0] == 'Positive'):
    tmp_y = i[1]+1
    graph_y.append(tmp_y)
  
  if(i[0] == 'Neutral'):
    graph_y.append(i[1])

sns.set()

#plt.plot(x, y, color = 'black')
plt.figure(figsize=(40, 8), dpi=100)
plt.plot(graph_x, graph_y, color = 'red', marker = 'o', linestyle = '-', label = 'Sensor1')
#plt.xlim([0,5000])
plt.title("Run, Melos,")
plt.xlabel("Sentence")
plt.ylabel("Emotion")
Ich verwende matplotlib, um ein Liniendiagramm der Ergebnisse der Emotionsanalyse zu erstellen. Wenn Sie nur COTOHA anwenden, wird es nur als neutral, negativ oder positiv eingestuft Da alle Werte im gleichen Bereich von 0 bis 1 liegen, legen wir den Versatz für das Diagramm fest. +1 wenn positiv Wenn es negativ ist, machen Sie den Wert negativ und + (-1) Wenn es neutral ist, tut es nichts.

Ausgabeergebnis

Liniendiagramm meros_graph.png

Die vertikale Achse ist Emotion und die horizontale Achse ist die Textposition jeder Phrase. Es gibt eine ganze Reihe emotionaler Schwankungen.

Positive Seitenanalyse

Top positive Sätze Nr. 1 ~ 3


[1.8126587191707609, 'Ich habe auch ein schönes Kostüm gekauft']
[1.6346889479386029, 'Dein Leben ist jetzt wichtig'],
[1.633215237292569, 'Der junge Maurer schrie ebenfalls und rannte Meros hinterher.']

Der positivste Satz ist ** "Ich habe ein wunderschönes Kostüm gekauft" **, mit einem großen Unterschied in der Punktzahl zwischen dem 2. und 3. Platz.

Dies ist ein Satz im Gespräch zwischen "Meros" und "Schwester", als "Meros" ins Dorf zurückkehrte. Ich glaube, ich war sehr froh, dass ich den ganzen Weg vom Dorf in die Stadt laufen und die Kostüme, die ich gekauft habe, meiner Schwester übergeben konnte. (Es ist in erster Linie der ursprüngliche Zweck von Meros.)

Sätze vor und nach dem Satz, der am positivsten zu sein scheint(Referenz)


Ich war überrascht, das erschöpfte Aussehen meines Bruders zu finden, der taumelte und ging. Dann stellte ich meinem lauten Bruder eine Frage.
„Nichts.“ Melos versuchte ihn zum Lachen zu zwingen. "Ich habe einen Auftrag in der Stadt hinterlassen. Ich muss bald wieder in die Stadt. Morgen werde ich deine Hochzeit haben. Es ist besser, früh zu sein."
Meine Schwester hob die Wangen.
"Ich bin glücklich. Ich habe ein wunderschönes Kostüm gekauft. Jetzt geh und lass es die Dorfbewohner wissen. Die Hochzeit ist morgen."
Meros taumelte ebenfalls, kehrte nach Hause zurück, um den Altar der Götter zu schmücken, veranstaltete ein Festmahl und fiel bald zu Boden und fiel in einen tiefen Schlaf, der nicht atmen konnte.

Negative Seitenanalyse

Negativste Phrase Top No1 ~ 3


[-1.9459608426670426, 'Lass den Mann nicht sterben']
[-1.939408157054805, 'Selbst wenn es ein Moment ist, kann es nicht verschwendet werden']
[-1.8666593927565555, 'Oh, die Sonne geht unter']

Der 1. und 2. Platz sehen nicht wie negative Sätze aus, daher sehen sie nicht richtig aus. ("Die", "Waste" Dieses Wort scheint die Ursache zu sein.)

Also, ist nicht die praktisch negativste Phrase ** "Oh, die Sonne geht unter" **?

Es ist ein Satz, während ich mit aller Kraft in die Stadt zurückkehre, um meinen Freund Serinuntius, der eine Geisel ist, freizulassen.

Vor Meros stehen mehrere Schwierigkeiten, aber wir werden sie durchbrechen Obwohl ich endlich einmal niederknie, gehen verschiedene Gedanken herum und in der Darstellung, die wieder aufsteht Es ist eine Darstellung des Teils, in dem dabei jeden Moment die Zeit vergeht.

Sätze vor und nach dem Satz, der am negativsten zu sein scheint(Referenz)


Lauf! Meros.
Mir wird vertraut. Mir wird vertraut. Das Flüstern dieses Teufels war früher ein Traum. Es ist ein böser Traum. Vergiss es.
Wenn die fünf Organe müde sind, haben sie so einen schlechten Traum. Meros, es ist nicht deine Schande.
Immerhin bist du ein wahrer Held. Ist es nicht möglich wieder zu stehen und zu rennen? Vielen Dank!
Ich kann als Gerechtigkeitskämpfer sterben. Oh, die Sonne geht unter. Es sinkt stetig. Warte, Zeus.
Ich bin seit meiner Geburt ein ehrlicher Mann. Lass es als ehrlicher Mann und lass ihn sterben.

Wenn Sie den emotionalen Wert in Blöcken analysieren ...

Das Negative und Positive des emotionalen Wertes, der Teil, in dem jeder organisiert ist, ist wie folgt.

Streukartenanzeige


#plt.plot(graph_x, graph_y, color = 'red', marker = 'o', linestyle = '-', label = 'Sensor1')
plt.scatter(graph_x, graph_y, color = 'red', marker = 'o', linestyle = '-', label = 'Sensor1')
Streudiagramm

meros_scat.png

Blöcke mit aufeinanderfolgenden positivsten Werten (orange eingekreist)

python


Ich hoffe, die Verpflichtung zu erfüllen.
Ich hoffe, mich umzubringen und meine Ehre zu schützen.
Der Sonnenschein wirft rotes Licht auf die Blätter der Bäume, und die Blätter und Zweige leuchten, wenn sie brennen.
Es ist noch Zeit vor Sonnenuntergang. Jemand wartet auf mich.
Es gibt Leute, die mich ohne Zweifel ruhig erwarten.
Ich werde geglaubt. Mein Lebensgeheimnis spielt keine Rolle. Ich kann nichts Nettes darüber sagen, tot zu sein und mich zu entschuldigen.
Ich muss mein Vertrauen belohnen. Das ist jetzt nur eine Sache.
Lauf! Meros.
Mir wird vertraut. Mir wird vertraut. Das Flüstern dieses Teufels war früher ein Traum. Es ist ein böser Traum. Vergiss es.
Wenn die fünf Organe müde sind, haben sie so einen schlechten Traum. Meros, es ist nicht deine Schande.
Immerhin bist du ein wahrer Held. Ist es nicht möglich wieder zu stehen und zu rennen?
Vielen Dank! Ich kann als Gerechtigkeitskämpfer sterben.

Es ist eine Darstellung von Melos, der einmal niederkniete, als er wieder aufsteht. Sie können die erhöhten Emotionen lesen. (Übrigens ist es der Satz unmittelbar vor dem oben beschriebenen negativsten Satz.)

Blöcke mit aufeinanderfolgenden negativsten Werten (blau markiert)

python


Wenn das passiert, werde ich schwerer sein als zu sterben. Ich bin für immer ein Verräter. Die schändlichste Rasse der Welt.
Serinuntius, ich werde auch sterben. Lass mich mit dir sterben. Nur du musst mir glauben.
Nein, ist das auch meine Selbstsucht? Ah, lass uns als Bösewicht überleben.
Mein Haus ist im Dorf. Es gibt auch Schafe. Meine Schwester und ihr Mann würden mich niemals aus dem Dorf vertreiben.

Es ist eine Darstellung, wenn man versucht, es aufzugeben, einem Freund Seriuntius zu helfen. Sicher ist es weggeworfen. (Danach werfe ich meine Glieder raus und werde endlich schläfrig.)

Zusammenfassung

~~ Aufgrund des positiven emotionalen Wertes dachte ich, dass Melos ein Syscon ist. ~~

Es ist einfach, aber ich habe versucht, "Run Meros" mithilfe der Emotionsanalyse zu lesen. Es ist ziemlich interessant, die Sätze so zu lesen.

das ist alles. Vielen Dank, dass Sie so weit gelesen haben.

Recommended Posts

Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, den Sieg oder die Niederlage der Premier League mit dem Qore SDK vorherzusagen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
[Erste COTOHA-API] Ich habe versucht, die alte Geschichte zusammenzufassen
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren (Re-Challenge)
Ich habe versucht, das Zugriffsprotokoll mit Node.js auf dem Server auszugeben
Ich wollte den Motor mit einer Raspeltorte laufen lassen, also habe ich versucht, das Motor Driver Board von Waveshare zu verwenden
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, die Infektion mit einer neuen Lungenentzündung mithilfe des SIR-Modells vorherzusagen: ☓ Wuhan ed. ○ Hubei ed.
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die Erstellung einer praktischen Umgebung mithilfe der SoftLayer-API der IBM Cloud zu automatisieren
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich wollte die Klassifizierung von CIFAR-10 mit dem Chainer-Trainer in Frage stellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, die COTOHA-API zu verwenden (es gibt auch Code auf GitHub).
Ich habe mir die Metainformationen von BigQuery angesehen und versucht, sie zu verwenden
Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern