[PYTHON] Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen

Überblick

Wenn die Phase der Geschichte lokal ist, ist es der Typ, den Sie selbst lesen Ich habe versucht, das Stadium der Geschichte mithilfe der einzigartigen Ausdrucksextraktion von COTOHA zu extrahieren und zu veranschaulichen.

Prozessablauf

  1. Holen Sie sich einen Roman von Aozora Bunko
  2. Holen Sie sich mit der COTOHA-API nur den Ortsnamen (LOC) (eindeutigen Ausdruck extrahieren)
  3. Verwenden Sie den erfassten Ortsnamen, um mit WordCroud zu veranschaulichen.

Umgebung

Google Colaboratory

Bibliothek

-Wordcloud ist die einzige, die einzeln installiert werden muss. (Google Colaboratory ist praktisch, da einige Bibliotheken bereits installiert sind.)   Führen Sie den folgenden Befehl aus, um die Vorbereitung abzuschließen.

Installieren Sie Wordcloud und laden Sie Schriftarten herunter


!pip install wordcloud
!apt-get -y install fonts-ipafont-gothic
!rm /root/.cache/matplotlib/fontlist-v300.json

Klonen Sie die Blue Sky-Bibliothek


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

Code

1. Der Teil, um einen beliebigen Roman von Aozora Bunko zu erhalten

Der Teil, um einen Roman von Aozora Bunko zu bekommen


from bs4 import BeautifulSoup

def get_word():

  #Geben Sie den Pfad aus dem geklonten HTML an(Das Beispiel ist Osamu Osamus Good Buy)
  path_to_html='aozorabunko/cards/000035/files/258_20179.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)

  #Aufgeteilt nach Anzahl der Zeichen für den Cotoha-API-Aufruf(Alle 1800 Zeichen)
  aozora_text_list = [aozora_text[i: i+1800] for i in range(0, len(aozora_text), 1800)]
  return aozora_text_list
Holen Sie sich den vollständigen Text, indem Sie den Pfad (path_to_html) eines Romans aus der von Git geklonten Blue Sky-Bibliothek angeben Ich analysiere mit Beautiful Soup. (Das Beispiel ist übrigens Osamu Osamus Good Buy)

Darüber hinaus ist die Zeichenfolge in 1800 Zeichen unterteilt und so angeordnet, dass COTOHA sie ausführen kann. (Ich habe es nicht richtig überprüft, aber 2000 Zeichen haben nicht funktioniert, und als ich es mit 1800 Zeichen ausgeführt habe, war es cool ... ~~ Check it out ~~)


2. Der Teil, der COTOHA_API
aufruft

COTOHA_Der Teil, der die API aufruft


import 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):
    #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/ne" 
    url = developer_api_base_url + base_url_footer
    headers={
        "Authorization": "Bearer " + getAccessToken(), #access_token,
        "Content-Type": "application/json;charset=UTF-8",
    }
    data = {
        "sentence": sentence
    }
    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

Den Teil, der COTOHA (eindeutige Ausdrucksextraktion) aufruft, versuche ich nur bei den Fehlern 401 und 500 erneut zu versuchen.


3. Der in WordCloud
dargestellte Teil

Der in Word Cloud dargestellte Teil


from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image

def get_wordcrowd_mask(text):
  
  #Japanische Schriftartspezifikation
  f_path = '/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf'

  #wc Parameterspezifikation
  wc = WordCloud(background_color="white",
                  width=500,
                  height=500,
                  font_path=f_path,
                  collocations=False,
                  ).generate( text )

  #Bildschirmdarstellung
  plt.figure(figsize=(5,5), dpi=200)
  plt.imshow(wc, interpolation="bilinear")
  plt.axis("off")
  plt.show()

Dies ist der Teil, der den Text mit WordCloud veranschaulicht.


4. Main

Der Teil, der den Prozess ausführt


aozora_text_list = get_word()
json_list = []
loc_str = ''
cnt = 0
for i in aozora_text_list:
  cnt+=1
  print( str(cnt) + '/' + str(len(aozora_text_list)) )
  json_list.append(cotoha_call(i))


for i in json_list:
  for j in i['result']:
    if(j['class'] == 'LOC'):
      loc_str = loc_str + j['form'] + ","

get_wordcrowd_mask(loc_str)

Der Teil, der einfach 1 bis 3 ausführt Darüber hinaus wird der Fortschritt zum Zeitpunkt des API-Aufrufs als Ausgabeergebnis unten angezeigt. (Zahl im Array, wenn Text durch n / 1 geteilt wird)

python


1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

Ausgabeergebnis

・ Auf Wiedersehen (Osamu Tadashi)

goodbye.png

Es gibt einige Zeichen, die anscheinend nichts mit dem Ortsnamen zu tun haben, aber es scheint, dass sie im Allgemeinen extrahiert werden können. Nachfolgend sind die Ergebnisse anderer Studien aufgeführt.

・ Shayo (Osamu Taisei)

syayou.png

・ Galaxy Railroad Night (Kenji Miyazawa)

gingatetudou.png

・ Zitrone (Motojiro Kajii)

REMON.png

Es macht Spaß. .. ..

Zusammenfassung

Sowohl COTOHA als auch Colab können kostenlos verwendet werden, und Sie können die Sprachverarbeitung problemlos berühren. Es ist eine Umgebung, also ist es großartig!

Das ist alles, danke fürs Lesen!

Was für eine Arbeit ist das Bild unten! (Hör auf, weil es nervt ...) gongitune.png

Recommended Posts

Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
[Erste COTOHA-API] Ich habe versucht, die alte Geschichte zusammenzufassen
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, die Syntax zu bewerten, die mit der COTOHA-API zu humorvoll und humorvoll war.
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
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 Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
zoom Ich habe versucht, den Grad der Aufregung der Geschichte auf der Konferenz zu quantifizieren
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich wurde entsetzt, als ich versuchte, mithilfe von PCA und NMF die Anzahl der Merkmale eines animierten Gesichts zu ermitteln.
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe die gängige Geschichte der Vorhersage des Nikkei-Durchschnitts mithilfe von Deep Learning (Backtest) ausprobiert.
Ich habe versucht, die Höhen und Tiefen des Schlusskurses des Aktienkurses von Guru Navi mit TensorFlow vorherzusagen (Fortschritt)
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
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
Die Geschichte der Verwendung von Circleci zum Bau vieler Linux-Räder
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
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
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, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
[TF] Ich habe versucht, das Lernergebnis mit Tensorboard zu visualisieren
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich möchte die Natur von Python und Pip kennenlernen
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen