[PYTHON] Korrespondenzanalyse von Sätzen mit COTOHA API und Speichern in Datei

Dieser Artikel stammt von Kronos Co., Ltd. "~ Frühling 2020 ~ Ich werde es ohne Erlaubnis tun Adventskalender" Dies ist der Artikel für den dritten Tag!

Einführung

Ich versuche auch, die sogenannte COTOHA-API (API-Plattform für die Verarbeitung natürlicher Sprache / Sprachverarbeitung) zu verwenden, die von hochmodernen Ingenieuren verwendet wird. ・ ・ ・ Deshalb Über COTOHA API, das viele interessante Artikel enthält, dachte ich auch, dass ich etwas lustiges und auffälliges machen würde. Ich habe geschrieben !! (Widerspruch) Wie wäre es mit der Vorbereitung auf etwas Auffälliges? Das habe ich vor.

Was du weißt / was du nicht weißt

** Was du weißt **

** Unbekannt **

Was ist Korrespondenzanalyse und was möchten Sie von nun an tun?

Hier ist zunächst ein Zitat aus der offiziellen Seite zum Thema "Was ist Korrespondenzanalyse?"

Extrahieren Sie die Vorläufer (einschließlich der aus mehreren Wörtern bestehenden Vorläufer), die den Anweisungen wie "dort" und "es" entsprechen, den Synonymen wie "er" und "sie" und den entsprechenden Wörtern wie "dasselbe 〇〇". Es ist eine RESTful-API, die alle als dasselbe ausgibt.

Hmmm zum Beispiel? (Weiteres Zitat)

Beispielsweise ist bei der Analyse des Dialogprotokolls zwischen der Dialog-Engine und dem Benutzer das Extrahieren des Wortes, auf das das Synonym zeigt, aus dem Satz, der das Synonym und den Kontext davor und danach enthält, für die Protokollanalyse wie "er" und "sie" nicht so aussagekräftig. Es ist möglich, fehlende Wörter durch vorhergehende Wörter zu ersetzen und eine genauere Protokollanalyse durchzuführen.

Mit anderen Worten (dies ist auch ein offizieller Beispielsatz), "** Taro " und " er **" werden analysiert, indem der Satz "Taro ist ein Freund. Er hat gegrilltes Fleisch gegessen." Das Ergebnis wird zusammen zurückgegeben.

Überprüfen Sie bis hier ** "Wenn Sie eine Vorverarbeitung mit Korrespondenzanalyse durchführen, bevor Sie auffällige Dinge tun, ändern sich die Ergebnisse anderer Verarbeitungen in natürlicher Sprache (mehr Genauigkeit)?" ** Dann entschied ich mich, den Titel "Korrespondenzanalyse von Sätzen mit COTOHA API" zu erstellen und sie in einer Datei zu speichern "(ich habe es am Anfang versucht, also bin ich beiseite gegangen) Vielleicht gibt es Nachfrage. Das ist auch ein Faktor.

Code

Diesmal

-Schaben eines beliebigen Textes von Aozora Bunko

Betrachten Sie die Implementierung. Im vorherigen Beispiel beispielsweise: "Taro ist ein Freund. Er hat gegrilltes Fleisch gegessen." "Und" Taro ist ein Freund. Taro hat gegrilltes Fleisch gegessen. "" In einer Textdatei speichern.

Gesamtgeschichte

Siehe hier für die gesamte Quelle Es enthält auch einige Verarbeitungen, die nicht mit der Korrespondenzanalyse zusammenhängen. Die Ordnerstruktur sieht so aus.

├── aozora_scraping.py
├── config.ini
├── cotoha_function.py
├── json_to_obj.py
├── main.py
├── respobj
│   ├── __init__.py
│   └── coreference.py
└── result

Scraping von Text in Aozora Bunko

Inhalt von aozora_scraping.py

aozora_scraping.py


# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup

def get_aocora_sentence(aozora_url):
    res = requests.get(aozora_url)
    #Schöne Suppeninitialisierung
    soup = BeautifulSoup(res.content, 'lxml')
    #Holen Sie sich den Haupttext von Aozora Bunko
    main_text = soup.find("div", class_="main_text")
    #Beseitigung von Rubin
    for script in main_text(["rp","rt","h4"]):
        script.decompose()
    sentences = [line.strip() for line in main_text.text.splitlines()]
    #Beseitigung leerer Teile
    sentences = [line for line in sentences if line != '']
    return sentences

Wenn Sie die URL von Aozora Bunko an die Methode "get_aocora_sentence" übergeben, wird der Text dieser Seite als Liste für jeden Zeilenumbruch zurückgegeben, wobei Rubin und Ränder weggelassen werden.

    main_text = soup.find("div", class_="main_text")

Irgendwie ist es ein Prozess, nachdem man weiß, dass der Textkörper von Aozora Bunko von "

</ div>" umgeben ist. Ich bezog mich auf Folgendes, wie man den Text von Aozora Bunko verarbeitet. Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen

Werfen Sie Sätze in die COTOHA API-Korrespondenzanalyse

Inhalt von cotoha_function.py

cotoha_function.py


# -*- coding:utf-8 -*-
import os
import urllib.request
import json
import configparser
import codecs

#COTOHA API-Operationsklasse
class CotohaApi:
    #Initialisieren
    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()

    #Zugriffstoken erhalten
    def getAccessToken(self):
        #Zugriff auf die URL-Angabe für die Token-Erfassung
        url = self.access_token_publish_url

        #Header-Spezifikation
        headers={
            "Content-Type": "application/json;charset=UTF-8"
        }

        #Körperspezifikation anfordern
        data = {
            "grantType": "client_credentials",
            "clientId": self.client_id,
            "clientSecret": self.client_secret
        }
        #Codieren Sie die Anforderungshauptteilspezifikation in JSON
        data = json.dumps(data).encode()

        #Anforderungsgenerierung
        req = urllib.request.Request(url, data, headers)

        #Senden Sie eine Anfrage und erhalten Sie eine Antwort
        res = urllib.request.urlopen(req)

        #Antwortkörper erhalten
        res_body = res.read()

        #Dekodieren Sie den Antworttext von JSON
        res_body = json.loads(res_body)

        #Holen Sie sich das Zugriffstoken vom Antworttext
        self.access_token = res_body["access_token"]

    #Korrespondenzanalyse-API
    def coreference(self, document):
        #URL-Angabe der API für die Korrespondenzanalyse-Erfassung
        url = self.developer_api_base_url + "v1/coreference"
        #Header-Spezifikation
        headers={
            "Authorization": "Bearer " + self.access_token,
            "Content-Type": "application/json;charset=UTF-8",
        }
        #Körperspezifikation anfordern
        data = {
            "document": document
        }
        #Codieren Sie die Anforderungshauptteilspezifikation in JSON
        data = json.dumps(data).encode()
        #Anforderungsgenerierung
        req = urllib.request.Request(url, data, headers)
        #Senden Sie eine Anfrage und erhalten Sie eine Antwort
        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 lautet, fordern Sie das Zugriffstoken erneut an und fordern Sie es erneut an
            if e.code == 401:
                print ("get access token")
                self.access_token = getAccessToken(self.client_id, self.client_secret)
                headers["Authorization"] = "Bearer " + self.access_token
                req = urllib.request.Request(url, data, headers)
                res = urllib.request.urlopen(req)
            #Wenn der Fehler nicht 401 ist, wird die Ursache angezeigt.
            else:
                print ("<Error> " + e.reason)

        #Antwortkörper erhalten
        res_body = res.read()
        #Dekodieren Sie den Antworttext von JSON
        res_body = json.loads(res_body)
        #Holen Sie sich das Analyseergebnis vom Antworttext
        return res_body

Informationen zu den Funktionen, die die COTOHA-API verwenden, finden Sie unter Ich habe versucht, die COTOHA-API in Python zu verwenden, die angeblich einfach in der Verarbeitung natürlicher Sprache zu handhaben ist. Ich hab es geschafft. Beachten Sie jedoch, dass sich die URL für die Kollatierungsanalyse von "Beta / Coreference" in "V1 / Coreference" geändert hat. (Jetzt wird sich die Beta-Version vielleicht eines Tages ändern)

Die erste Hälfte der Übergabe des Textes an die Korrespondenzanalyse in "main.py" ist wie folgt. Ich habe es geschrieben (ich habe es so geschrieben, wie es ist, weil es einen Teil zu erklären gibt)

main.py


# -*- coding:utf-8 -*-
import os
import json
import configparser
import datetime
import codecs
import cotoha_function as cotoha
from aozora_scraping import get_aocora_sentence
from respobj.coreference import Coreference
from json_to_obj import json_to_coreference

if __name__ == '__main__':
    #Rufen Sie den Speicherort der Quelldatei ab
    APP_ROOT = os.path.dirname(os.path.abspath( __file__)) + "/"

    #Stellen Sie den eingestellten Wert ein
    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")

    #Konstante
    max_word = 1800
    max_call_api_count = 150
    max_elements_count = 20
    #URL von Aozora Bunko
    aozora_html = 'Irgendein'
    #Aktuelle Uhrzeit
    now_date = datetime.datetime.today().strftime("%Y%m%d%H%M%S")
    #Pfad der Datei zum Speichern des Originaltextes
    origin_txt_path = './result/origin_' + now_date + '.txt'
    #Pfad der Datei zum Speichern der Ergebnisse
    result_txt_path = './result/converted_' + now_date + '.txt'

    #COTOHA API-Instanziierung
    cotoha_api = cotoha.CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)

    #Holen Sie sich den Text von Aozora Bunko
    sentences = get_aocora_sentence(aozora_html)
    #Speichern Sie den Originaltext zum Vergleich
    with open(origin_txt_path, mode='a') as f:
        for sentence in sentences:
            f.write(sentence + '\n')

    #Ursprünglicher Wert
    start_index = 0
    end_index = 0
    call_api_count = 1
    temp_sentences = sentences[start_index:end_index]
    elements_count = end_index - start_index
    limit_index = len(sentences)
    result = []
    print("Gesamtzahl der Listen" + str(limit_index))
    while(end_index <= limit_index and call_api_count <= max_call_api_count):
        length_sentences = len(''.join(temp_sentences))
        if(length_sentences < max_word and elements_count < max_elements_count and end_index < limit_index):
            end_index += 1
        else:
            if end_index == limit_index:
                input_sentences = sentences[start_index:end_index]
                print('Index: ' + str(start_index) + 'Von' + str(end_index) + 'Bis')
                #Ausgangsbedingungen
                end_index += 1
            else:
                input_sentences = sentences[start_index:end_index - 1]
                print('Index: ' + str(start_index) + 'Von' + str(end_index-1) + 'Bis')
            print(str(call_api_count) + 'Zweite Mitteilung')
            response = cotoha_api.coreference(input_sentences)
            result.append(json_to_coreference(response))
            call_api_count += 1
            start_index = end_index - 1
        temp_sentences = sentences[start_index:end_index]
        elements_count = end_index - start_index

Erstens ist es nicht möglich, alle Sätze auf einmal zu senden (obwohl dies natürlich sein kann).

Verhalten im Prozess gefunden

Ich konnte keine Erwähnung in der Referenz finden,

(Es wurde nicht verifiziert, aber ich denke, dass die Verarbeitung anderer COTOHA-APIs ähnlich oder eng sein kann.) Nach der while-Anweisung in der if-Anweisung "Wirf die in die Liste gepackten Textdaten für jeden Zeilenumbruch so weit wie möglich in die Korrespondenzanalyse" wird implementiert.

Mir ging es eher um die Liste als nur um die einfache Satzlänge, da ich dachte, dass die Genauigkeit beeinträchtigt werden könnte, wenn die Korrespondenzanalyse nicht an den Satzpausen durchgeführt würde. (Erwartet und nicht überprüft)

call_api_count <= max_call_api_count Mit dem kostenlosen Plan beträgt jede API 1000 Aufrufe pro Tag, daher habe ich eine schlechte Aussage gemacht, dass ich die Anzahl der API-Aufrufe bis zu einem gewissen Grad kontrollieren wollte.

Weisen Sie der Klasse die Antwort aus dem JSON-Format zu.

Ich denke, das ist Geschmackssache, Ist es nicht einfacher, die API-Antwort einer Klasse zuzuweisen, als sie wie im Wörterbuchtyp zu verwenden? Es ist eine Angebotsabteilung.

Mit der COTOHA-API scheint der Wörterbuchtyp die Mehrheit im Qiita-Artikel zu sein, daher werde ich eine Referenz zur Korrespondenzanalyse veröffentlichen.

Schauen wir uns zunächst ein offizielles Beispiel an, in welchem JSON-Format die Antwort der Korrespondenzanalyse eingeht. (Wie üblich, wenn Sie werfen "Taro ist ein Freund. Er hat gegrilltes Fleisch gegessen.")

coreference.json


{
  "result" : {
    "coreference" : [ {
      "representative_id" : 0,
      "referents" : [ {
        "referent_id" : 0,
        "sentence_id" : 0,
        "token_id_from" : 0,
        "token_id_to" : 0,
        "form" : "Taro"
      }, {
        "referent_id" : 1,
        "sentence_id" : 1,
        "token_id_from" : 0,
        "token_id_to" : 0,
        "form" : "er"
      } ]
    } ],
    "tokens" : [ [ "Taro", "Ist", "Freund", "ist" ], [ "er", "Ist", "Gebratenes Fleisch", "Zu", "Essen", "Ta" ] ]
  },
  "status" : 0,
  "message" : "OK"
}

Die Definition der Klasse, der dies zugeordnet werden kann, lautet wie folgt. Wenn Sie einen Blick auf die [offizielle Referenz] werfen (https://api.ce-cotoha.com/contents/reference/apireference.html#correspond), sollten Sie sie verstehen können. Definieren wir die JSON-Hierarchie aus dem tiefsten Teil.

resobj/coreference.py


# -*- coding: utf-8; -*-
from dataclasses import dataclass, field
from typing import List

#Entitätsobjekt
@dataclass
class Referent:
    #Entitäts-ID
    referent_id: int
    #Die Nummer der Anweisung, die die Entität enthält
    sentence_id: int
    #Entitätsstartformular Elementnummer
    token_id_from: int
    #Endform der Entität Elementnummer
    token_id_to: int
    #Zielkorrespondenz
    form: str

#Informationsobjekt zur Korrespondenzanalyse
@dataclass
class Representative:
    #ID der Korrespondenzanalyse
    representative_id: int
    #Array von Entitätsobjekten
    referents: List[Referent] = field(default_factory=list)

#Ergebnisobjekt der Korrespondenzanalyse
@dataclass
class Result:
    #Array von Informationsobjekten zur Korrespondenzanalyse
    coreference: List[Representative] = field(default_factory=list)
    #Anordnung der Notation, erhalten durch morphologische Analyse jedes Satzes des Analysezielsatzes
    tokens: List[List[str]] = field(default_factory=list)

#Antwort
@dataclass
class Coreference:
    #Ergebnisobjekt der Korrespondenzanalyse
    result: Result
    #Statuscode 0:OK, >0:Error
    status: int
    #Fehlermeldung
    message: str

Wo ich erwischt wurde Aus irgendeinem Grund wurde das Formularfeld der Klasse "Referent" in Official Reference nicht erläutert. Es dauerte einige Zeit, bis ich bemerkte, dass die "Token" der "Result" -Klasse "List [List [str]]" waren.

Methode zum Zuweisen von json zur Klasse (json_to_coreference wird auch in main.py beschrieben)

json_to_obj.py


# -*- coding:utf-8 -*-
import json
import codecs
import marshmallow_dataclass
from respobj.coreference import Coreference

def json_to_coreference(jsonstr):
    json_formated = codecs.decode(json.dumps(jsonstr),'unicode-escape')
    result = marshmallow_dataclass.class_schema( Coreference )().loads(json_formated)
    return result

Es ist als "Datenklassen", "Marshmallow_Dataclass" implementiert. Die marshmallow_dataclass wird oft nicht installiert. (PyPI-Seite)

Dies ist der Hauptgrund, warum dieses Mal Python 3.7 verwendet werden sollte. Ich empfehle diese Methode, da selbst bei einer Änderung der Spezifikationen die entsprechenden Teile leicht zu verstehen sind und ich denke, dass die Korrespondenz schnell sein wird. (Ich denke, es ist nur so, dass ich nicht an Pythons Wörterbuchtyp gewöhnt bin, also benutze ihn bitte nur als Referenz.)

Referenzseite JSON die Python-Klasse

Speichern Sie es in einer Datei, nachdem Sie es in eine Korrespondenz eingeschlossen haben.

Die Frage hier ist "welche Korrespondenz zum Runden verwendet wird". Dieses Mal werden wir es basierend auf der Vorhersage, dass das, was zuerst im Text erscheint, der Hauptteil ~~ easy ~~ ist, mit den entsprechenden Wörtern implementieren, die zuvor erschienen sind.

main.py


    #Zweite Hälfte
    for obj in result:
        coreferences = obj.result.coreference
        tokens = obj.result.tokens
        for coreference in coreferences:
            anaphor = []
            #Basierend auf der ersten Entsprechung in der Koreferenz.
            anaphor.append(coreference.referents[0].form)
            for referent in coreference.referents:
                sentence_id = referent.sentence_id
                token_id_from = referent.token_id_from
                token_id_to = referent.token_id_to
                #Schreiben Sie neu, damit die Anzahl der Elemente in der Liste für die nachfolgende Verarbeitung nicht geändert wird.
                anaphor_and_empty = anaphor + ['']*(token_id_to - token_id_from)
                tokens[sentence_id][token_id_from: (token_id_to + 1)] = anaphor_and_empty
        #Speichern Sie den geänderten Text in einer Datei
        with open(result_txt_path, mode='a') as f:
            for token in tokens:
                line = ''.join(token)
                f.write(line + '\n')

Welches Zahlenelement (Satz) des Satzes in "Token" ist "Satz_ID" token_id_from und token_id_to bedeuten, dass die token_id_toth totoken_id_toth des im Satz id_idth analysierten Elements der Entsprechung entspricht.

Finden Sie die Korrespondenz zum Umschreiben mit coreference.referents [0] .form, Beim Umschreiben

                #Schreiben Sie neu, damit die Anzahl der Elemente in der Liste für die nachfolgende Verarbeitung nicht geändert wird.
                anaphor_and_empty = anaphor + ['']*(token_id_to - token_id_from)
                tokens[sentence_id][token_id_from: (token_id_to + 1)] = anaphor_and_empty

Ich werde so ein bisschen arbeiten. (Die Anzahl der neu zu schreibenden Elemente und die Anzahl der neu zu schreibenden Elemente stimmen zwangsweise überein.) Wenn Sie dies nicht tun, sind die Nummern von "token_id_from" und "token_id_to" falsch. (Bitte sag mir, ob es einen besseren Weg gibt)

Das gesamte Bild von main.py

main.py


# -*- coding:utf-8 -*-
import os
import json
import configparser
import datetime
import codecs
import cotoha_function as cotoha
from aozora_scraping import get_aocora_sentence
from respobj.coreference import Coreference
from json_to_obj import json_to_coreference

if __name__ == '__main__':
    #Rufen Sie den Speicherort der Quelldatei ab
    APP_ROOT = os.path.dirname(os.path.abspath( __file__)) + "/"

    #Stellen Sie den eingestellten Wert ein
    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")

    #Konstante
    max_word = 1800
    max_call_api_count = 150
    max_elements_count = 20
    #URL von Aozora Bunko
    aozora_html = 'https://www.aozora.gr.jp/cards/000155/files/832_16016.html'
    #Aktuelle Uhrzeit
    now_date = datetime.datetime.today().strftime("%Y%m%d%H%M%S")
    #Pfad der Datei zum Speichern des Originaltextes
    origin_txt_path = './result/origin_' + now_date + '.txt'
    #Pfad der Datei zum Speichern der Ergebnisse
    result_txt_path = './result/converted_' + now_date + '.txt'

    #COTOHA API-Instanziierung
    cotoha_api = cotoha.CotohaApi(CLIENT_ID, CLIENT_SECRET, DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)

    #Holen Sie sich den Text von Aozora Bunko
    sentences = get_aocora_sentence(aozora_html)
    #Speichern Sie den Originaltext zum Vergleich
    with open(origin_txt_path, mode='a') as f:
        for sentence in sentences:
            f.write(sentence + '\n')

    #Ursprünglicher Wert
    start_index = 0
    end_index = 0
    call_api_count = 1
    temp_sentences = sentences[start_index:end_index]
    elements_count = end_index - start_index
    limit_index = len(sentences)
    result = []
    print("Gesamtzahl der Listen" + str(limit_index))
    while(end_index <= limit_index and call_api_count <= max_call_api_count):
        length_sentences = len(''.join(temp_sentences))
        if(length_sentences < max_word and elements_count < max_elements_count and end_index < limit_index):
            end_index += 1
        else:
            if end_index == limit_index:
                input_sentences = sentences[start_index:end_index]
                print('Index: ' + str(start_index) + 'Von' + str(end_index) + 'Bis')
                #Ausgangsbedingungen
                end_index += 1
            else:
                input_sentences = sentences[start_index:end_index - 1]
                print('Index: ' + str(start_index) + 'Von' + str(end_index-1) + 'Bis')
            print(str(call_api_count) + 'Zweite Mitteilung')
            response = cotoha_api.coreference(input_sentences)
            result.append(json_to_coreference(response))
            call_api_count += 1
            start_index = end_index - 1
        temp_sentences = sentences[start_index:end_index]
        elements_count = end_index - start_index
    
    for obj in result:
        coreferences = obj.result.coreference
        tokens = obj.result.tokens
        for coreference in coreferences:
            anaphor = []
            #Basierend auf der ersten Entsprechung in der Koreferenz.
            anaphor.append(coreference.referents[0].form)
            for referent in coreference.referents:
                sentence_id = referent.sentence_id
                token_id_from = referent.token_id_from
                token_id_to = referent.token_id_to
                #Schreiben Sie neu, damit die Anzahl der Elemente in der Liste für die nachfolgende Verarbeitung nicht geändert wird.
                anaphor_and_empty = anaphor + ['']*(token_id_to - token_id_from)
                tokens[sentence_id][token_id_from: (token_id_to + 1)] = anaphor_and_empty
        #Speichern Sie den geänderten Text in einer Datei
        with open(result_txt_path, mode='a') as f:
            for token in tokens:
                line = ''.join(token)
                f.write(line + '\n')

Verarbeitungsergebnis

Natsume Soseki "Herz"

Bild, das den Originaltext und einen Teil des konvertierten Textes mit FileMerge vergleicht (links ist original, rechts ist nach der Konvertierung) スクリーンショット 2020-03-04 1.53.24.png

Erstaunliche COTOHA API

before:

Ich hatte einen Freund aus Kagoshima und lernte natürlich, während ich diese Person nachahmte, also war ich gut darin, diese Rasenpfeife zu läuten.
Als ich weiter blies, sah der Lehrer weg und ging weg.

↓ after:

Mit einer Kagoshima-Person als Freund lernte ich natürlich, während ich eine Kagoshima-Person imitierte, und ich war gut darin, diese Rasenpfeife zu läuten.
Als ich weiter diese Rasenpfeife blies, schaute der Lehrer weg und ging weg.

"Diese Person" sagt "einer Kagoshima-Person", dass "wenn Sie weiter blasen" zu "wenn Sie diese Rasenpfeife weiter blasen" wird.

Wie wäre es mit? COTOHA API

before:

Ich ging sofort, um das Geld an den Lehrer zurückzugeben. Ich habe auch den Shiitake-Pilz mitgebracht.
~Etwa 6 Sätze weggelassen~
Der Lehrer wusste viele Dinge, die ich über Nierenerkrankungen nicht wusste.
"Das Merkmal der Krankheit ist, dass Sie selbst krank sind, aber Sie bemerken es nicht.
Ein Offizier, den ich kannte, wurde schließlich getötet, aber er starb wie eine Lüge.
~

after:

Ich ging sofort, um das Geld an den Lehrer zurückzugeben. Ich habe auch den Shiitake-Pilz mitgebracht.
~Etwa 6 Sätze weggelassen~
Der Lehrer wusste viele Dinge, die ich über Nierenerkrankungen nicht wusste.
"Das Merkmal einer Krankheit ist, dass Sie selbst krank sind, aber Sie bemerken es nicht.
Ein Offizier, den ich kannte, wurde schließlich von dem üblichen Shiitake-Pilz getötet, aber er starb wie eine Lüge.
~

Beispiel Shiitake ... Es gibt viele andere Schmerzen. Das Symbol wird nicht gut verarbeitet.

Bonus

Ranpo Edogawa "Ich bin zwanzig Gesichter"

スクリーンショット 2020-03-04 2.00.20.png

Kinukiyuki "Tosa Diary"

Ich denke nicht, dass die alten Texte so viel entsprechen. Halbe Geschichte (es ist nur interessant, weil es so ist)

スクリーンショット 2020-03-04 2.03.34.png

Beide sind das Original links und das umgebaute rechts.

Schließlich

Ist am Ende die Annahme von "". Wenn die Vorverarbeitung durch Korrespondenzanalyse erfolgt, bevor auffällige Dinge ausgeführt werden, ändern sich die Ergebnisse anderer natürlicher Sprachverarbeitungen (mehr Genauigkeit)? "" Ist wahr oder nicht? Das Ergebnis war unbeschreiblich. Ich denke, dass mehr Überprüfung erforderlich ist.

Um die Konvertierungsgenauigkeit zu verbessern, scheint es besser, genauer über die Frage nachzudenken, "welche Korrespondenz zum Runden verwendet werden soll", und es kann wichtig sein, den Rahmen des Satzes zu berücksichtigen.

Da Japanisch eine Parade von Richtlinien und Synonymen ist, scheint Perfektion schwierig zu sein, aber es gibt Orte, an denen es bequem konvertiert werden kann. Ich bin daher der Meinung, dass die COTOHA-API ein beträchtliches Potenzial hat. das ist alles!

Recommended Posts

Korrespondenzanalyse von Sätzen mit COTOHA API und Speichern in Datei
Führen Sie Jupyter mit der REST-API aus, um Python-Code zu extrahieren und zu speichern
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
Speichern Sie das Objekt in einer Datei mit pickle
[AWS; Einführung in Lambda] 2. Extrahieren Sie Sätze aus der JSON-Datei und speichern Sie S3 ♬
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion
Eine Geschichte über den Versuch, mit der kostenlosen Stufe von AWS zur COVID-19-Analyse beizutragen, und das Scheitern
Eine Geschichte über das Lesen eines Bilderbuchs durch Synthetisieren von Sprache mit COTOHA API und Cloud Vision API
Einfache Verwendung der Nifty Cloud API mit Botocore und Python
Führen Sie mit Python und Matplotlib eine Isostromanalyse offener Wasserkanäle durch
kobitonote.py - Mit Kobito bearbeitete Elemente in Evernote synchronisieren
Bildanalyse mit Objekterkennungs-API zum Ausprobieren in 1 Stunde
Verarbeiten Sie die mit Redshift entladene gzip-Datei mit Python of Lambda, gzipen Sie sie erneut und laden Sie sie in S3 hoch
Numerische Analyse gewöhnlicher Differentialgleichungen mit Scipys Odeint und Ode
Speichern Sie das Ergebnis des Crawls mit Scrapy im Google Data Store
Verarbeiten Sie das Ausführungsergebnis von Splunk mit Python und speichern Sie es in einer Datei
Erhalten Sie Conversions und Einnahmen mit der Google Analytics-API und melden Sie sich bei Slack
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion
Geben Sie die Ergebnisse der Nachsuche mithilfe der Mattermost-API in eine Datei aus
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Holen Sie sich OCTA-Simulationsbedingungen aus einer Datei und speichern Sie sie mit Pandas
Ich habe ein Leben mit viel "Glück" geführt. [Verwenden Sie die COTOHA API, um "menschliche Disqualifikation" "glücklich" zu machen]
Das Problem, das mir Schokolade gibt, tritt nicht auf, selbst wenn die Korrespondenzanalyse mit der COTOHA-API durchgeführt wird
[Python] Mit Python in eine CSV-Datei schreiben
Ausgabe in eine CSV-Datei mit Python
Konvertieren Sie Sätze mit gensim in Vektoren
Speichern und Abrufen von Dateien mit Pepper
Koexistenz von Python2 und 3 mit CircleCI (1.0)
So verarbeiten Sie Kamerabilder mit Teams und Zoom Volumen der Emotionsanalyse mit Tensorflow
Herausforderung beim Erstellen eines Zeitachsenlistenberichts mit der Toggl-API und Python
Schließen Sie das Lesen und Schreiben von GCP an Secret Manager mit Google-Unterbefehlen ab
Klicken Sie auf die Rakuten-Ranking-API, um das Ranking einer beliebigen Kategorie in CSV zu speichern
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Erhalten Sie Tweets mit der Google Cloud-Funktion und speichern Sie Bilder automatisch in Google Fotos
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Python-Code zum Trainieren und Testen mit Custom Vision of Cognitive Service
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen