[PYTHON] Le problème qui me donne du chocolat ne se fait pas même si l'analyse de correspondance se fait avec l'API COTOHA

Background [Plan actuel de l'API Qiita x COTOHA] J'étais inquiet à ce sujet, alors j'ai décidé de l'utiliser pendant un moment.

MeCab ou KNP sont des bibliothèques réputées pour le traitement du langage naturel, mais j'avais honte de connaître l'API COTOHA pour la première fois lors de cet événement.

Motive Cela peut être un petit obstacle personnellement, mais j'ai d'abord essayé d'utiliser l'API d'analyse de correspondance. Cette analyse consiste à remplacer les synonymes («je», «vous», «il», etc.) et les directives («cela», «ceci») dans les phrases par de telles personnes et objets. La raison de son utilisation est que je voulais l'utiliser comme étape initiale pour clarifier qui a fait quoi et ensuite la traiter si j'avais du temps à perdre.

L'événement est-il à la mi-mars? .. ..

Sera-ce à temps?

Environment

Development

** Script code ** (Cliquez pour voir le code.)
import requests
import json
import time
import sys

#---Obtenez ces 4 paramètres dans Portal---
PUBLISH_URL = "--- get your parameter ---"
CLIENT_ID = "--- get your parameter ---" 
CLIENT_SECRET = "--- get your parameter ---" 
BASE_URL = "--- get your parameter ---"

def getToken():
    header = {"Content-Type": "application/json"}
    contents = {
        "grantType": "client_credentials",
        "clientId": CLIENT_ID,
        "clientSecret": CLIENT_SECRET
    }
    raw_res = requests.post(PUBLISH_URL, headers=header, json=contents)
    response = raw_res.json()
    return response["access_token"]

def coreference(token, sentence):
    header = {
        "Authorization": "Bearer {}".format(token),
        "Content-Type": "application/json"
    }
    contents = {
        "document": sentence
    }
    raw_res = requests.post(
        BASE_URL +
        "nlp/v1/coreference",
        headers=header,
        json=contents)
    response = raw_res.json()
    return response

if __name__ == "__main__":

    if len(sys.argv) != 2:
        sys.exit()
    message = sys.argv[1]

    token = getToken()
    time.sleep(0.5)
    
    print(coreference(token, message))

Comme un flux Get Token-> Appelez chaque API que vous souhaitez utiliser Il y en a deux.

curl fait la même chose en python.

$ curl -X POST -H "Content-Type:application/json" -d '{
  "grantType": "client_credentials",
  "clientId": "[clientid]",
  "clientSecret": "[clientsecret]"
}' [Access Token Publish URL
]
$ curl -H "Content-Type:application/json;charset=UTF-8" -H "Authorization:Bearer [access_token]" -X POST -d '{
"document": --Saisissez ici le texte que vous souhaitez analyser--
}' "[Developer API Base URL]/nlp/v1/coreference"

Consequence

Analysons en utilisant deux phrases.

--Yamada a acheté des nouilles en coupe. Il mangeait délicieusement. --Yamada a donné à Saito une tasse de nouilles. Il mangeait délicieusement.

$ python main.py Yamada a acheté des nouilles en coupe. Il mangeait délicieusement.
{'result': {'coreference': [{'representative_id': 0, 'referents': [{'referent_id': 0, 'sentence_id': 0, 'token_id_from': 0, 'token_id_to': 0, 'form': 'Yamada'}, {'referent_id': 1, 'sentence_id': 0, 'token_id_from': 10, 'token_id_to': 10, 'form': 'il'}]}], 'tokens': [['Yamada', 'Kun', 'Est', 'Coupe', 'nouilles', 'À', 'Acheter', 'Tsu', 'Ta', '。', 'il', 'Est', 'Délicieux', 'alors', 'À', 'manger', 'main', 'je', 'Ta', '。']]}, 'status': 0, 'message': 'OK'}
$ python main.py Yamada a donné à Saito une tasse de nouilles. Il mangeait délicieusement.
{'result': {'coreference': [{'representative_id': 0, 'referents': [{'referent_id': 0, 'sentence_id': 0, 'token_id_from': 0, 'token_id_to': 0, 'form': 'Yamada'}, {'referent_id': 1, 'sentence_id': 0, 'token_id_from': 13, 'token_id_to': 13, 'form': 'il'}]}], 'tokens': [['Yamada', 'Tu', 'Est', 'Saito', 'Tu', 'À', 'Coupe', 'nouilles', 'À', 'Watari', 'Shi', 'Ta', '。', 'il', 'Est', '美味Shi', 'alors', 'À', 'manger', 'main', 'je', 'Ta', '。']]}, 'status': 0, 'message': 'OK'}

Consideration

Yamada a acheté des nouilles en coupe. Il mangeait délicieusement. '' Puis `` 'coreference': [{'represent_id': 0, 'referents': [{'referent_id': 0, 'sentence_id': 0, 'token_id_from': 0, 'token_id_to': 0, 'form': 'Yamada' }, {'referent_id': 1, 'sentence_id': 0, 'token_id_from': 10, 'token_id_to': 10, 'form': 'he'}] Vous pouvez voir que «Yamada-he» est connecté.

Mais, Yamada a donné à Saito une tasse de nouilles. Il mangeait délicieusement. '' Puis `` 'coreference': [{'represent_id': 0, 'referents': [{'referent_id': 0, 'sentence_id': 0, 'token_id_from': 0, 'token_id_to': 0, 'form': 'Yamada' }, {'referent_id': 1, 'sentence_id': 0, 'token_id_from': 13, 'token_id_to': 13, 'form': 'he'}] Et «Yamada-he» sont connectés et non «Saito-he». Dans ce cas, même si vous donnez la tasse de nouilles, Yamada l'aura mangée. C'est Gouda qui pense: crier:.

Comparation -> KNP

J'essaierai si c'était KNP. http://lotus.kuee.kyoto-u.ac.jp/~ryohei/zero_anaphora/index.cgi noodle.png

C'est «Saito-he» Il semble qu'il soit correctement reconnu car il l'est.

mais, `Yamada a donné à Saito une tasse de nouilles. Je le mangeais délicieusement. '' Lorsque je supprime le synonyme et que je l’analyse, il devient «Yamada-he» et il n’est pas reconnu correctement.

noodle.png

Conclusion

Cette fois, nous avons analysé la correspondance lorsqu'elle est appelée correspondance directe et que les synonymes sont explicitement écrits, mais il n'est souvent pas écrit dans le texte. http://adsmedia.hatenablog.com/entry/2017/02/20/084846 Il y a correspondance indirecte, correspondance avec le monde extérieur, correspondance nulle, etc.

Le génome entier a été analysé dans les années 2000, mais je ne sais pas comment le fabriquer. Il existe des types, mais il existe d'innombrables combinaisons.

Le langage naturel peut également faire la distinction entre une phrase et le type de mot, mais il peut toujours être étudié comme une analyse de collation. Il y a beaucoup de. En tant que l'une des méthodes, il peut être difficile pour les utilisateurs de collecter des sources et d'appliquer l'apprentissage automatique pour écrire des mots qui ne figurent pas dans la phrase. C'est comme si Saito mangeait des nouilles en coupe avec 80% de chances d'être parmi divers personnages. : robot:

PostScript

Ensuite, utilisez Syntax Analysis pour analyser ou créer un produit.

Recommended Posts

Le problème qui me donne du chocolat ne se fait pas même si l'analyse de correspondance se fait avec l'API COTOHA
Problème que même si Pool.close () est fait avec le multitraitement de Python, le processus reste en pause et la mémoire augmente régulièrement.
[VLC] Comment gérer le problème de ne pas être au premier plan pendant la lecture
Notez que GoogleMap.getProjection dans l'API Google Maps Android n'est pas un singleton
Problème que même si Pool.close () est fait avec le multitraitement de Python, le processus reste en pause et la mémoire augmente régulièrement.
Tuez le processus avec sudo kill -9