[PYTHON] Das Problem, das mir Schokolade gibt, tritt nicht auf, selbst wenn die Korrespondenzanalyse mit der COTOHA-API durchgeführt wird

Background [Qiita x COTOHA API präsentieren Plan] Ich machte mir darüber Sorgen und beschloss, es für eine Weile zu benutzen.

MeCab oder KNP sind berühmte Bibliotheken für die Verarbeitung natürlicher Sprache, aber ich schämte mich, die COTOHA-API bei dieser Veranstaltung zum ersten Mal zu kennen.

Motive Es mag persönlich eine kleine Hürde sein, aber ich habe zuerst versucht, die Korrespondenzanalyse-API zu verwenden. Bei dieser Analyse werden Synonyme ("Ich", "Sie", "Er" usw.) und Anweisungen ("Das", "Dies") in Sätzen durch solche Personen und Objekte ersetzt. Der Grund für die Verwendung ist, dass ich es als erste Phase verwenden wollte, um zu klären, wer was getan hat, und es dann zu verarbeiten, wenn ich Zeit hatte.

Ist die Veranstaltung Mitte März? .. ..

Wird es rechtzeitig sein?

Environment

Development

** Skriptcode ** (Klicken Sie hier, um den Code anzuzeigen.)
import requests
import json
import time
import sys

#---Holen Sie sich diese 4 Parameter in 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))

Als Fluss Get Token-> Rufen Sie jede API auf, die Sie verwenden möchten Es gibt zwei.

Curl macht das gleiche in 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": --Geben Sie hier den zu analysierenden Text ein--
}' "[Developer API Base URL]/nlp/v1/coreference"

Consequence

Lassen Sie uns mit zwei Sätzen analysieren.

  • Yamada kaufte Cup Nudeln. Er aß köstlich.
  • Yamada gab Saito eine Tasse Nudeln. Er aß köstlich.
$ python main.py Yamada kaufte Cup Nudeln. Er aß köstlich.
{'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': 'er'}]}], 'tokens': [['Yamada', 'Kun', 'Ist', 'Tasse', 'Nudeln', 'Zu', 'Kaufen', 'Tsu', 'Ta', '。', 'er', 'Ist', 'Köstlich', 'damit', 'Zu', 'Essen', 'Hand', 'ich', 'Ta', '。']]}, 'status': 0, 'message': 'OK'}
$ python main.py Yamada gab Saito eine Tasse Nudeln. Er aß köstlich.
{'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': 'er'}]}], 'tokens': [['Yamada', 'Du', 'Ist', 'Saito', 'Du', 'Zu', 'Tasse', 'Nudeln', 'Zu', 'Watari', 'Shi', 'Ta', '。', 'er', 'Ist', '美味Shi', 'damit', 'Zu', 'Essen', 'Hand', 'ich', 'Ta', '。']]}, 'status': 0, 'message': 'OK'}

Consideration

Yamada kaufte Cup Nudeln. Er aß köstlich. `` Dann '' Koreferenz ': [{' repräsentative_ID ': 0,' Referenten ': [{' referent_id ': 0,' Satz_ID ': 0,' token_id_from ': 0,' token_id_to ': 0,' form ':' Yamada ' }, {'referent_id': 1, 'satz_id': 0, 'token_id_from': 10, 'token_id_to': 10, 'form': 'he'}] Sie können sehen, dass "Yamada-he" verbunden ist.

Aber, Yamada gab Saito eine Tasse Nudeln. Er aß köstlich. `` Dann '' Koreferenz ': [{' repräsentative_ID ': 0,' Referenten ': [{' referent_id ': 0,' Satz_ID ': 0,' token_id_from ': 0,' token_id_to ': 0,' form ':' Yamada ' }, {'referent_id': 1, 'satz_id': 0, 'token_id_from': 13, 'token_id_to': 13, 'form': 'he'}] Und "Yamada-er" sind verbunden und nicht "Saito-er". In diesem Fall hat Yamada die Cup-Nudeln auch dann gegessen, wenn Sie sie übergeben haben. Es ist Gouda, der denkt: schreien :.

Comparation -> KNP

Ich werde versuchen, ob es KNP war. http://lotus.kuee.kyoto-u.ac.jp/~ryohei/zero_anaphora/index.cgi noodle.png

Das ist Saito-he Es scheint, dass es richtig erkannt wird, weil es ist.

aber, `Yamada gab Saito eine Tasse Nudeln. Ich habe es köstlich gegessen. `` Wenn ich das Synonym lösche und analysiere, wird es zu "Yamada-he" und es wird nicht richtig erkannt.

noodle.png

Conclusion

Dieses Mal haben wir die Korrespondenz analysiert, wenn sie als direkte Korrespondenz bezeichnet wird und die Synonyme explizit geschrieben sind, aber oft nicht im Text geschrieben sind. http://adsmedia.hatenablog.com/entry/2017/02/20/084846 Es gibt indirekte Korrespondenz, Korrespondenz außerhalb der Welt, Nullkorrespondenz usw.

Das Genom wurde alle in den 2000er Jahren analysiert, aber ich weiß nicht, wie ich es herstellen soll. Es gibt Typen, aber es gibt unzählige Kombinationen.

Die natürliche Sprache kann auch von einem Satz zum Worttyp unterscheiden, kann aber dennoch wie eine Kollatierungsanalyse untersucht werden. Es gibt viele. Als eine der Methoden kann es für Benutzer schwierig sein, Quellen zu sammeln und maschinelles Lernen anzuwenden, um Wörter zu schreiben, die nicht im Satz enthalten sind. Es ist, als würde Saito Cup-Nudeln essen, mit einer Wahrscheinlichkeit von 80%, unter verschiedenen Charakteren zu sein. : Roboter:

PostScript

Verwenden Sie als Nächstes Syntaxanalyse, um ein Produkt zu analysieren oder zu erstellen.

Recommended Posts

Das Problem, das mir Schokolade gibt, tritt nicht auf, selbst wenn die Korrespondenzanalyse mit der COTOHA-API durchgeführt wird
Problem, dass selbst wenn Pool.close () mit der Mehrfachverarbeitung von Python ausgeführt wird, der Prozess angehalten bleibt und der Speicher stetig zunimmt.
[VLC] Wie man mit dem Problem umgeht, dass es während der Wiedergabe nicht im Vordergrund steht
Beachten Sie, dass GoogleMap.getProjection in der Android-API von Google Maps kein Singleton ist
Problem, dass selbst wenn Pool.close () mit der Mehrfachverarbeitung von Python ausgeführt wird, der Prozess angehalten bleibt und der Speicher stetig zunimmt.
Töte den Prozess mit sudo kill -9