Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java

Was ist die COTOHA-API?

Es handelt sich um einen Dienst der NTT Group, der verschiedene APIs für die Verarbeitung natürlicher Sprache und die Sprachverarbeitung bereitstellt, z. B. Syntaxanalyse, Korrespondenzanalyse, Schlüsselwortextraktion, Spracherkennung und Zusammenfassung.

COTOHA API | API-Plattform für die Verarbeitung natürlicher Sprache und Spracherkennung unter Verwendung von Japans größtem japanischen Wörterbuch, das von NTT Communications entwickelt wurde https://api.ce-cotoha.com/contents/index.html

Einige mögen sich fragen: "Ist NTT eine Telefongesellschaft?", Aber die NTT-Labors untersuchen seit Jahrzehnten die japanische Verarbeitung auf Computern. (Als Student besuchte ich auch die NTT Communication Science Laboratories und las Papiere.)

In jüngster Zeit hat sich die Cloud-Technologie weiterentwickelt, und es ist möglich geworden, Verarbeitungen, die zuvor auf einem lokalen Computer ausgeführt wurden, als API-Dienst über das Internet bereitzustellen. Es scheint nicht bekannt zu sein, welches Unternehmen / welche Abteilung von NTT die Entwicklung der Logik selbst bereitstellt, aber es scheint, dass die API von NTT Communications bereitgestellt wird.

Vorausgesetztes Wissen, das vorhanden sein sollte

URL HTTP-Anfrage POST HTTP-Antwort Curl-Befehl POST JSON GSON Java Maven Es ist herum.

Was ist syntaktische Analyse?

Die COTOHA-API-Seite enthält Folgendes:

Syntaxanalyse Die Syntaxanalyse-API empfängt einen in Japanisch geschriebenen Satz als Eingabe, analysiert und gibt die Struktur und Bedeutung des Satzes aus. Der Eingabesatz wird in Klauseln und morphologische Elemente zerlegt, und semantische Informationen wie Abhängigkeitsbeziehungen zwischen Klauseln, Abhängigkeitsbeziehungen zwischen morphologischen Elementen und Teiltextinformationen werden hinzugefügt.

"Sätze in Japanisch geschrieben (= natürliche Sätze)"

Ich bin heute zur Schule gelaufen.

Es sagt ein Satz wie. Wenn Sie dies in Sätze unterteilen

Heute / bin ich zur Schule gegangen / bin gelaufen.

Es wird so sein. (In der API heißt die Klausel chunk) Auch wenn Sie durch morphologische Einheit teilen

Heute / ha / school / ni / run / tsu / te / line / ki / better / ta /.

Es wird so sein. (In der API wird Morphologie als Token bezeichnet.) In der morphologischen Analyse wird das ursprüngliche "go" für den "line" -Teil ausgegeben, und die Teiltexte werden für jedes morphologische Element ausgegeben.

Maschinelles Lernen ist heutzutage ebenfalls sehr beliebt, aber ich denke, die Realität ist, dass es immer noch ein wenig schwierig ist, natürliche Sätze zu verarbeiten, da sie ohne morphologische Analyse und syntaktische Analyse sind oder dass keine guten Ergebnisse erzielt werden können. Selbst wenn Sie maschinelles Lernen anwenden, ist es meiner Meinung nach besser, maschinelles Lernen auf die Werte anzuwenden, die durch morphologische Analyse und syntaktische Analyse erhalten werden. Im Fall der japanischen Analyse gibt es keine Unterteilung in Japanisch, und die Reihenfolge der Wörter ist relativ frei, so dass ich denke, dass es Umstände geben kann, unter denen "einfaches maschinelles Lernen" schwierig anzuwenden ist.

Verwenden Sie die API

Rufen wir nun die COTOHA-API auf.

Zur Vorbereitung ist der Fluss wie folgt.

  1. Registrieren Sie ein Konto (https://api.ce-cotoha.com/)
  2. Erhalten Sie "Client ID" und "Client Secret" als Zugriffsinformationen im API-Portal (https://api.ce-cotoha.com/home).
  3. Holen Sie sich ein "Zugriffstoken" aus dem Programm
  4. Greifen Sie mit dem "Zugriffstoken" auf verschiedene APIs zu.

Wenn Sie dem Leitfaden folgen, wird die Kontoregistrierung in 1. problemlos abgeschlossen.

Wenn Sie in 2. auf das API-Portal zugreifen, wird der folgende Bildschirm angezeigt. Notieren Sie sich dies, indem Sie die "Client-ID" und das "Client-Geheimnis" kopieren.

image.png

"Client-ID" und "Client-Geheimnis" entsprechen der Benutzer-ID und dem Kennwort. In neueren APIs ist es jedoch nicht sinnvoll, Benutzer-ID und Kennwort für jeden Zugriff zu senden. Daher zunächst "Zugriff". Es soll ein "Token" bekommen und es wiederverwenden. Die COTOHA-API hat eine maximale Frist von 24 Stunden, sodass Sie das, was Sie in der ersten Sitzung erhalten haben, 24 Stunden lang wiederverwenden können.

Finden Sie heraus, wie Sie ein "Zugriffstoken" erhalten.

Es ist fast dasselbe, wenn Sie einen API-Dienst aufrufen, aber schauen Sie sich zuerst die Spezifikationen an, um herauszufinden, wie Sie darauf zugreifen können.

Zugriffstoken erhalten|Referenz| COTOHA API https://api.ce-cotoha.com/contents/reference/accesstoken.html

Wenn Sie anschauen

image.png

ist was es liest.

Es ist kein Curl-Befehlsformat ... Plötzlich ein Tippfehler!

In der IT-Branche ist es üblich zu sagen, dass die Dokumentation falsch ist. Lassen Sie sich davon nicht täuschen. (Lol) Der Code ist die Spezifikation. (← Zitate)

Aber ich verstehe was ich meine. Dies bedeutet, dass Sie eine POST-Anfrage wie die folgende im Befehl curl senden sollten.

$ curl -X POST -H "Content-Type:application/json;charset=UTF-8" -d '{"grantType":"client_credentials","clientId": "[client id]","clientSecret":"[client secret]"}' "[Access Token Publish URL]"

Geben Sie im Teil [Client-ID] [Client-Geheimnis] [URL zur Veröffentlichung von Zugriffstoken] die im Portal geschriebenen Parameter ein.

Holen Sie sich ein "Zugriffstoken" aus dem Programm

Es gibt verschiedene Möglichkeiten, HTTP-Anforderungen in Java zu senden, aber im Moment werde ich versuchen, eine Bibliothek namens OkHttp zu verwenden. Da JSON beim Senden einer Anfrage verwendet wird, wird auch der berühmte Gson verwendet.

Maven

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
	<groupId>com.squareup.okhttp3</groupId>
	<artifactId>okhttp</artifactId>
	<version>3.14.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.8.6</version>
</dependency>

Das Schreiben von Code in Java + OkHttp sieht folgendermaßen aus:

	String url = "https://api.ce-cotoha.com/v1/oauth/accesstokens";
	String clientId = "[client id]";
	String clientSecret = "[client secret]";
//		{
//		 "grantType": "client_credentials",
//		 "clientId": "[client id]",
//		 "clientSecret": "[client secret]"
//		}
	Gson gson = new Gson();
	JsonObject jsonObj = new JsonObject();
	jsonObj.addProperty("grantType", "client_credentials");
	jsonObj.addProperty("clientId", clientId);
	jsonObj.addProperty("clientSecret", clientSecret);

	OkHttpClient client = new OkHttpClient();
	MediaType JSON = MediaType.get("application/json; charset=utf-8");
	RequestBody body = RequestBody.create(JSON, jsonObj.toString());
	Request request = new Request.Builder() //
			.url(url) //
			.post(body) //
			.build();
	try (Response response = client.newCall(request).execute()) {
		int responseCode = response.code();
		String originalResponseBody = response.body().string();
		System.err.println(responseCode); // 201
		System.err.println(originalResponseBody);

		// 201
//	          {
//	              "access_token": "xxx", 
//	              "token_type": "bearer",
//	              "expires_in": "86399" ,
//	              "scope": "" ,    
//	              "issued_at": "1581590104700"           
//	          }
		}
	}

Ich denke, die Ausgabe sieht wie folgt aus. Das eigentliche Zugriffstoken wird als "xxx" abgekürzt. Programmatisch ist es nicht sehr cool, aber lasst es uns kopieren und verwenden.

{
    "access_token": "xxx", 
    "token_type": "bearer",
    "expires_in": "86399" ,
    "scope": "" ,    
    "issued_at": "1581590104700"           
}

Lesen Sie die Spezifikationen, bevor Sie die Syntaxanalyse-API aufrufen

Lesen Sie Folgendes genau durch.

API-Referenzsyntaxanalyse https://api.ce-cotoha.com/contents/reference/apireference.html

... Es gibt mehrere Aufrufoptionen, aber das folgende Beispiel für einen Curl-Befehl scheint das einfachste zu sein.

$ curl -X POST -H "Content-Type:application/json;charset=UTF-8" -H "Authorization:Bearer [Access Token]" -d '{"sentence":"Der Hund geht.","type": "default"}' "[API Base URL]/nlp/v1/parse"

Versuchen Sie, die Syntax-Parsing-API aufzurufen

Der Befehl curl ist eine einfache Zeile, in Java jedoch wie folgt.

	String url = "https://api.ce-cotoha.com/api/dev" + "/nlp/v1/parse";
	String sentence = "Es ist heute ein gutes Wetter.";
	String type = "default";
	String access_token = "xxx";

	Gson gson = new Gson();
	JsonObject jsonObj = new JsonObject();
	jsonObj.addProperty("sentence", sentence);
	jsonObj.addProperty("type", type);

	OkHttpClient client = new OkHttpClient();
	MediaType JSON = MediaType.get("application/json; charset=utf-8");	
	RequestBody body = RequestBody.create(JSON, jsonObj.toString());
	Request request = new Request.Builder() //
			.addHeader("Authorization", "Bearer " + access_token) //
			.url(url) //
			.post(body) //
			.build();

	try (Response response = client.newCall(request).execute()) {
		String originalResponseBody = response.body().string();
		System.err.println(originalResponseBody);
	}

Ergebnis

Was ist mit dem Ergebnis? Ich denke, es wird wie folgt aussehen.

Wenn Sie sich JSON ansehen, während Sie einen Blick auf die technischen Daten werfen, werden Informationen zu Phrasen und Morphologie sehr detailliert ausgegeben. (Die Ergebnisse sind erheblich detaillierter als die Analyseergebnisse der APIs anderer Unternehmen.)

Das Ausgabeergebnis in diesem JSON-Format wird analysiert und als Java-Objekt verwendet. Dieser Teil ist eher eine allgemeine Java-Technik als ein API-Aufruf, daher werde ich ihn im nächsten Artikel schreiben. → Fortsetzung Artikel Analyse der COTOHA-API-Syntaxanalyse mit Java

{
	"result": [
		{
			"chunk_info": {"id": 0,"head": 2,"dep": "D","chunk_head": 0,"chunk_func": 1,
				"links": []
			},
			"tokens": [
				{
					"id": 0,
					"form": "heute",
					"kana": "heute",
					"lemma": "heute",
					"pos": "Substantiv",
					"features": ["Datum (und Uhrzeit"],
					"dependency_labels": [
						{
							"token_id": 1,
							"label": "case"
						}
					],
					"attributes": {
						
					}
				},
				{
					"id": 1,
					"form": "Ist",
					"kana": "C.",
					"lemma": "Ist",
					"pos": "Aufeinanderfolgende Hilfswörter",
					"features": [],
					"attributes": {
						
					}
				}
			]
		},
		{
			"chunk_info": {
				"id": 1,
				"head": 2,
				"dep": "D",
				"chunk_head": 0,
				"chunk_func": 1,
				"links": []
			},
			"tokens": [
				{
					"id": 2,
					"form": "ich",
					"kana": "ich",
					"lemma": "Gut",
					"pos": "Adjektivstamm",
					"features": [
						"Schritt"
					],
					"dependency_labels": [
						{
							"token_id": 3,
							"label": "aux"
						}
					],
					"attributes": {
						
					}
				},
				{
					"id": 3,
					"form": "ich",
					"kana": "ich",
					"lemma": "ich",
					"pos": "Adjektivsuffix",
					"features": [
						"Union"
					],
					"attributes": {
						
					}
				}
			]
		},
		{
			"chunk_info": {
				"id": 2,
				"head": -1,
				"dep": "O",
				"chunk_head": 0,
				"chunk_func": 1,
				"links": [
					{
						"link": 0,
						"label": "time"
					},
					{
						"link": 1,
						"label": "adjectivals"
					}
				],
				"predicate": []
			},
			"tokens": [
				{
					"id": 4,
					"form": "Wetter",
					"kana": "Wetter",
					"lemma": "Wetter",
					"pos": "Substantiv",
					"features": [],
					"dependency_labels": [
						{
							"token_id": 0,
							"label": "nmod"
						},
						{
							"token_id": 2,
							"label": "amod"
						},
						{
							"token_id": 5,
							"label": "cop"
						},
						{
							"token_id": 6,
							"label": "punct"
						}
					],
					"attributes": {
						
					}
				},
				{
					"id": 5,
					"form": "ist",
					"kana": "Tod",
					"lemma": "ist",
					"pos": "Beurteilung",
					"features": [
						"halt"
					],
					"attributes": {
						
					}
				},
				{
					"id": 6,
					"form": "。",
					"kana": "",
					"lemma": "。",
					"pos": "Phrase",
					"features": [],
					"attributes": {
						
					}
				}
			]
		}
	],
	"status": 0,
	"message": ""
}

Verknüpfung

COTOHA API Portal

das ist alles

Recommended Posts

Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Analysieren der COTOHA-API-Syntaxanalyse in Java
Versuchen Sie es mit der Stream-API in Java
Versuchen Sie es mit der JSON-Format-API in Java
ChatWork4j für die Verwendung der ChatWork-API in Java
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
Kommentar zur COTOHA Syntax Analysis API
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Versuchen Sie, den CORBA-Dienst unter Java 11+ aufzurufen
Versuchen Sie es mit der Emotion API von Android
Versuchen Sie es mit der Wii-Fernbedienung in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse
NLP4J Versuchen Sie eine syntaktische Analyse von Japanisch unter Verwendung der japanischen Abhängigkeitsanalyse (V1) von Yahoo! Developer Network in Java
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Zabbix API in Java
Ich habe die COTOHA-API-Syntaxanalyse 100 Mal in Java aufgerufen, um die Leistung zu messen.
Zeigen Sie "Hello World" im Browser mit Java an
Versuchen Sie, mit Scala mithilfe der Standardbibliothek von Java Text zu einem Bild hinzuzufügen
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung der Syntaxanalyse in Java
Versuchen Sie, das Eratostenes-Sieb mithilfe der Java-Standardbibliothek zu implementieren
Unterschiede im Code bei Verwendung des Längensystems in Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Versuchen Sie, JavaScript in Java aufzurufen
Lassen Sie uns Spresense mit Java entwickeln (1)
Probieren Sie den Funktionstyp in Java aus! ①
Java Stream API in 5 Minuten
2 Implementieren Sie eine einfache Syntaxanalyse in Java
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
[Java] Versuchen Sie, die Elemente der Json-Zeichenfolge mithilfe der Bibliothek zu bearbeiten
Übersetzen mit der Microsoft Translator-Text-API in Java (Japanisch → Englisch)
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
So spielen Sie eine MIDI-Datei mit der Java Sound API ab
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
Versuchen Sie, Android Hilt in Java zu implementieren
Errate den Zeichencode in Java
[java8] Um die Stream-API zu verstehen
Exportieren Sie ein Problem mithilfe der Java-API von JIRA
[Parse] Drücken Sie die API mit callFunctionInBackground
Geben Sie den Java-Speicherort in eclipse.ini an
Verschlüsselung mit RSA-Verschlüsselung in Java
Java-Vergleich mit der compareTo () -Methode
Versuchen Sie es mit Redis mit Java (jar)
Generieren Sie die CloudStack-API-URL in Java
Versuchen Sie einen If-Ausdruck in Java
Treffen Sie Zaims API (OAuth 1.0) in Java
Ich habe versucht, die Java8 Stream API zu verwenden
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie es mit dem Nachrichtensystem Pulsar
HTTPS-Verbindung mit tls1.2 in Java 6
Versuchen Sie, AWS X-Ray in Java auszuführen
Versuchen Sie, Yuma in Java zu implementieren
Versuchen Sie es mit der IBM Java-Methodenverfolgung