Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java

Qu'est-ce que l'API COTOHA?

Il s'agit d'un service fourni par NTT Group qui fournit diverses API de traitement du langage naturel et de traitement de la voix telles que l'analyse syntaxique, l'analyse de la correspondance, l'extraction de mots-clés, la reconnaissance vocale et la synthèse.

API COTOHA | Plateforme API de traitement du langage naturel et de reconnaissance vocale utilisant le plus grand dictionnaire japonais du Japon développé par NTT Communications https://api.ce-cotoha.com/contents/index.html

Certains peuvent se demander: "NTT est-il une compagnie de téléphone?", Mais les laboratoires NTT étudient le traitement japonais sur ordinateur depuis des décennies. (J'ai également été pris en charge en visitant les laboratoires des sciences de la communication NTT et en lisant des articles lorsque j'étais étudiant.)

Récemment, la technologie du cloud a progressé et il est devenu possible de fournir un traitement qui était auparavant exécuté sur un ordinateur local en tant que service API via Internet. Il semble que l'on ne sache pas quelle société / service de NTT fournit le développement de la logique elle-même, mais il semble que l'API soit fournie par NTT Communications.

Connaissances préalables qui devraient être présentes

URL Requête HTTP POST Réponse HTTP commande curl POST JSON GSON Java Maven C'est autour.

Qu'est-ce que l'analyse syntaxique?

La page API COTOHA contient les éléments suivants:

Analyse syntaxique L'API d'analyse syntaxique reçoit une phrase écrite en japonais comme entrée, analyse et sort la structure et la signification de la phrase. La phrase d'entrée est décomposée en clauses et éléments morphologiques, et des informations sémantiques telles que les relations de dépendance entre les clauses, les relations de dépendance entre les éléments morphologiques et les informations de paroles de partie sont ajoutées.

"Phrases écrites en japonais (= phrases naturelles)"

J'ai couru à l'école aujourd'hui.

Il dit une phrase comme. Si vous divisez cela en phrases

Aujourd'hui / je suis allé à l'école / j'ai couru.

Ce sera comme. (Dans l'API, la clause s'appelle chunk) Aussi, si vous divisez par unité morphologique

Aujourd'hui / ha / école / ni / run / tsu / te / line / ki / better / ta /.

Ce sera comme. (Dans l'API, la morphologie est appelée jeton) Dans l'analyse morphologique, le "go" original est sorti pour la partie "ligne", et les paroles de la partie sont sorties pour chaque élément morphologique.

L'apprentissage automatique est également très populaire de nos jours, mais je pense que la réalité est qu'il est encore un peu difficile de traiter des phrases naturelles telles qu'elles sont sans analyse morphologique et syntaxique, ou que de bons résultats ne peuvent pas être obtenus. Même si vous appliquez le machine learning, je pense qu'il vaut mieux appliquer le machine learning aux valeurs obtenues par analyse morphologique et syntaxique. Dans le cas de l'analyse japonaise, il n'y a pas de division en japonais et l'ordre des mots est relativement libre, je pense donc qu'il peut y avoir des circonstances dans lesquelles le "simple apprentissage automatique" est difficile à appliquer.

Utiliser l'API

Maintenant, appelons l'API COTOHA.

En guise de préparation, le déroulement est le suivant.

  1. Créez un compte (https://api.ce-cotoha.com/)
  2. Obtenez "Client ID" et "Client secret" comme informations d'accès sur le portail API (https://api.ce-cotoha.com/home).
  3. Obtenez un "jeton d'accès" du programme
  4. Accédez à diverses API à l'aide du "jeton d'accès"

Si vous suivez le guide, l'enregistrement du compte en 1. sera effectué sans aucun problème.

En 2., lorsque vous accédez au portail API, l'écran suivant apparaîtra, alors notez-le en copiant le «Client ID» et le «Client secret».

image.png

«Client ID» et «Client secret» sont équivalents à l'ID utilisateur et au mot de passe, mais dans les API récentes, il n'est pas bon d'envoyer l'ID utilisateur et le mot de passe pour chaque accès, donc tout d'abord, «accès» Il est censé obtenir un «jeton» et le réutiliser. L'API COTOHA a un délai maximum de 24 heures, vous pouvez donc réutiliser ce que vous avez obtenu lors de la première session pendant 24 heures.

Découvrez comment obtenir un "jeton d'accès"

C'est presque la même chose lorsque vous appelez n'importe quel service d'API, mais regardez d'abord les spécifications pour savoir comment y accéder.

Obtenez un jeton d'accès|référence| COTOHA API https://api.ce-cotoha.com/contents/reference/accesstoken.html

Quand tu regardes

image.png

est ce qu'il lit.

Ce n'est pas un format de commande curl ... Du coup une faute de frappe!

Il est courant dans l'industrie informatique de dire que la documentation est fausse, alors ne vous laissez pas berner par cela. (Lol) Le code est la spécification. (← Citations)

Mais je comprends ce que je veux dire. Cela signifie que vous devez envoyer une requête POST comme celle ci-dessous dans la commande curl.

$ 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]"

Dans la partie [client id] [client secret] [Access Token Publish URL], entrez les paramètres écrits sur le portail.

Obtenez un "jeton d'accès" du programme

Il existe plusieurs façons d'envoyer des requêtes HTTP en Java, mais pour l'instant j'essaierai d'utiliser une bibliothèque appelée OkHttp. De plus, puisque JSON est utilisé lors de l'envoi d'une requête, cela utilise également le célèbre Gson.

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>

L'écriture de code en Java + OkHttp ressemble à ceci:

	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"           
//	          }
		}
	}

Je pense que la sortie ressemble à ce qui suit. Le jeton d'accès réel est celui qui est abrégé en "xxx". Ce n'est pas très cool en programmation, mais copions-le et utilisons-le.

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

Lisez les spécifications avant d'appeler l'API d'analyse de syntaxe

Lisez attentivement ce qui suit.

Analyse de la syntaxe des références API https://api.ce-cotoha.com/contents/reference/apireference.html

... Il existe plusieurs options d'appel, mais l'exemple de commande curl suivant semble être le plus simple.

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

Essayez d'appeler l'API d'analyse syntaxique

La commande curl est une simple ligne, mais en Java, c'est comme suit.

	String url = "https://api.ce-cotoha.com/api/dev" + "/nlp/v1/parse";
	String sentence = "Il fait beau aujourd'hui.";
	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);
	}

résultat

Eh bien, qu'en est-il du résultat? Je pense que cela ressemblera à ce qui suit.

Si vous regardez JSON en regardant les spécifications, des informations sur les phrases et la morphologie sont fournies avec beaucoup de détails. (Les résultats sont considérablement plus détaillés que les résultats d'analyse des API d'autres entreprises.)

Le résultat de sortie dans ce format JSON sera analysé et utilisé comme un objet Java. Cette partie est une technique Java générale plutôt qu'un appel d'API, je l'écrirai donc dans le prochain article. → Suite de l'article Analyse syntaxique de l'API COTOHA en Java

{
	"result": [
		{
			"chunk_info": {"id": 0,"head": 2,"dep": "D","chunk_head": 0,"chunk_func": 1,
				"links": []
			},
			"tokens": [
				{
					"id": 0,
					"form": "aujourd'hui",
					"kana": "aujourd'hui",
					"lemma": "aujourd'hui",
					"pos": "nom",
					"features": ["Date et l'heure"],
					"dependency_labels": [
						{
							"token_id": 1,
							"label": "case"
						}
					],
					"attributes": {
						
					}
				},
				{
					"id": 1,
					"form": "Est",
					"kana": "C",
					"lemma": "Est",
					"pos": "Mots auxiliaires consécutifs",
					"features": [],
					"attributes": {
						
					}
				}
			]
		},
		{
			"chunk_info": {
				"id": 1,
				"head": 2,
				"dep": "D",
				"chunk_head": 0,
				"chunk_func": 1,
				"links": []
			},
			"tokens": [
				{
					"id": 2,
					"form": "je",
					"kana": "je",
					"lemma": "Bien",
					"pos": "Adjectif radical",
					"features": [
						"Étape"
					],
					"dependency_labels": [
						{
							"token_id": 3,
							"label": "aux"
						}
					],
					"attributes": {
						
					}
				},
				{
					"id": 3,
					"form": "je",
					"kana": "je",
					"lemma": "je",
					"pos": "Suffixe d'adjectif",
					"features": [
						"syndicat"
					],
					"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": "Météo",
					"kana": "Météo",
					"lemma": "Météo",
					"pos": "nom",
					"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": "est",
					"kana": "mort",
					"lemma": "est",
					"pos": "Jugement",
					"features": [
						"Arrêtez"
					],
					"attributes": {
						
					}
				},
				{
					"id": 6,
					"form": "。",
					"kana": "",
					"lemma": "。",
					"pos": "Phrase",
					"features": [],
					"attributes": {
						
					}
				}
			]
		}
	],
	"status": 0,
	"message": ""
}

Lien

COTOHA API Portal

c'est tout

Recommended Posts

Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Analyser l'analyse syntaxique de l'API COTOHA en Java
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'API au format JSON en Java
ChatWork4j pour l'utilisation de l'API ChatWork en Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser RocksDB avec Java
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Commentaire sur l'API d'analyse de syntaxe COTOHA
J'ai essayé d'utiliser l'API Elasticsearch en Java
Appelez l'API de notification Windows en Java
Essayez d'appeler le service CORBA sur Java 11+
Essayez d'utiliser l'API Emotion d'Android
Essayez d'utiliser la télécommande Wii en Java
[Java] Création d'API à l'aide de Jerjey (Jax-rs) avec eclipse
NLP4J [002] Essayez l'analyse syntaxique du japonais à l'aide de Yahoo! Developer Network Japanese Dependency Analysis (V1) en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
API Zabbix en Java
J'ai appelé l'analyse de la syntaxe de l'API COTOHA 100 fois en Java pour mesurer les performances.
Afficher "Hello World" dans le navigateur à l'aide de Java
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java
Essayez d'implémenter le tamis Eratostenes en utilisant la bibliothèque standard de Java
Différences de code lors de l'utilisation du système de longueur en Java
Essayez de gratter en utilisant Java [Note]
Essayez d'appeler JavaScript en Java
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
API Java Stream en 5 minutes
2 Implémentez une analyse syntaxique simple en Java
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
Traduire à l'aide de l'API de texte Microsoft Translator en Java (japonais → anglais)
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java
Comment lire un fichier MIDI à l'aide de l'API Java Sound
Accéder à l'interface réseau avec Java
Essayez d'implémenter Android Hilt en Java
Devinez le code de caractère en Java
[java8] Pour comprendre l'API Stream
Exporter un problème à l'aide de l'API Java de JIRA
[Parse] Hit l'API en utilisant callFunctionInBackground
Spécifiez l'emplacement Java dans eclipse.ini
Chiffrer à l'aide du chiffrement RSA en Java
Comparaison Java à l'aide de la méthode compareTo ()
Essayez d'utiliser Redis avec Java (jar)
Générer l'URL de l'API CloudStack en Java
Essayez une expression If en Java
Hit l'API de Zaim (OAuth 1.0) en Java
J'ai essayé d'utiliser l'API Java8 Stream
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'utiliser le système de messagerie Pulsar
Connexion HTTPS utilisant tls1.2 dans Java 6
Essayez d'exécuter AWS X-Ray en Java
Essayez d'implémenter Yuma en Java
Essayez d'utiliser le traçage de méthode IBM Java