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.
URL Requête HTTP POST Réponse HTTP commande curl POST JSON GSON Java Maven C'est autour.
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.
Maintenant, appelons l'API COTOHA.
En guise de préparation, le déroulement est le suivant.
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».
«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.
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
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.
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 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"
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);
}
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": ""
}
Recommended Posts