2016-03-24 7 views
-1

Ich betreiben ein Stanford CoreNLP Server mit dem folgenden Befehl:UTF-8 Problem mit CoreNLP Server

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer 

Ich versuche Who was Darth Vader’s son? den Satz zu analysieren. Beachten Sie, dass das Apostroph hinter Vader kein ASCII-Zeichen ist.

Die online demo analysieren erfolgreich den Satz:

screenshot of the online webserver of CoreNLP

Der Server ich auf localhost laufen fehlschlägt:

screenshot of the localhost webserver of CoreNLP

ich auch die Abfrage mit Python auszuführen versucht.

import requests 
url = 'http://localhost:9000/' 
sentence = 'Who was Darth Vader’s son?' 
r=requests.post(url, params={'properties' : '{"annotators": "tokenize,ssplit,pos,ner", "outputFormat": "json"}'}, data=sentence.encode('utf8')) 
tree = r.json() 

Der letzte Befehl löst eine Ausnahme:

ValueError: Invalid control character at: line 1 column 1172 (char 1171) 

jedoch I Wiederholungen des Zeichens bemerkt \x00 im Text (d.h. r.text). Wenn ich sie zu entfernen, gelingt es die json-Analyse:

import json 
tree = json.loads(r.text.replace('\x00', '')) 

Schließlich r.encodingISO-8859-1 ist, auch wenn ich nicht die Möglichkeit, -strict verwendet habe, um den Server auszuführen. Beachten Sie, dass es nichts ändert, wenn ich es manuell durch UTF-8 ersetze.

Wenn ich den gleichen Code url = 'http://localhost:9000/' durch url = 'http://corenlp.run/' ersetzen, dann ist alles erfolgreich. Der Anruf r.json() gibt ein dict zurück, r.encoding ist in der Tat UTF-8, und kein Zeichen \x00 ist im Text.

Was ist falsch mit dem CoreNLP-Server, den ich betreibe?

Antwort

2

Dies ist ein bekannter Fehler mit der Version 3.6.0. Wenn Sie den Server von GitHub erstellen, sollte es ordnungsgemäß mit UTF-8-Zeichen funktionieren. Durch Festlegen des entsprechenden Headers für den Inhaltstyp in der Anforderung wird dieses Problem ebenfalls behoben (siehe https://github.com/stanfordnlp/CoreNLP/issues/125).