2017-07-25 3 views
1

Ich benutze Stanford CoreNLP für Pos-Tagging und NER auf einem vor-tokenisierten chinesischen Text, ich lese das offizielle Dokument https://stanfordnlp.github.io/CoreNLP/tokenize.html, sagen, dass die Option tokenize.whitespace 'Wenn gesetzt Zu wahr, trennt Wörter nur, wenn Leerräume angetroffen werden. Genau das möchte ich.Stanford CoreNLP tokenize.whitespace Eigenschaft funktioniert nicht auf Chinesisch

Aber ich benutze Python, pycorenlp, um mit CoreNLP Server zu interagieren und nichts über Java zu wissen. Dann lese ich die anwser How to NER and POS tag a pre-tokenized text with Stanford CoreNLP? und dachte, dass das einzige, was zu tun ist, "tokenize.whitespace" = "true" und eine andere Eigenschaft in meinem Post-Request-Eigenschaften-Wörterbuch hinzuzufügen, aber es funktioniert einfach nicht. Ich ließ meinen Server wie folgt:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -serverProperties StanfordCoreNLP-chinese.properties -port 9000 -timeout 150000 

und in meinem jupyter Notebook:

from pycorenlp import StanfordCoreNLP 
nlp = StanfordCoreNLP('http://localhost:9000') 

output = nlp.annotate('公司 作为 物联网 行业', properties={ 
    'annotators': 'pos,ner', 
    'tokenize.whitespace': 'true', # first property 
    'ssplit.eolonly': 'true', # second property 
    'outputFormat': 'json' 
}) 

for sentence in output['sentences']: 
    print(' '.join([token['word'] for token in sentence['tokens']])) 

die gibt:

公司 作为 物 联网 行业 

Die CoreNLP noch Zeichenüber das Token '物 联网', nur wie wenn ich die zwei Eigenschaften nicht addiere. Dann habe ich versucht, eine .properties-Datei zu erstellen und sie in der Befehlszeile anstelle von StanfordCoreNLP-chinese.properties zu verwenden, aber es funktioniert auch nicht. In meinem test.properties:

tokenize.whitespace=true 
ssplit.eolonly=true 

Dann lief ich den Server wie folgt:

java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -serverProperties 'test.properties' -port 9000 -timeout 150000 

Noch verhielt es sich, als ob ich nichts verändert hatte. Weiß jemand, was ich vermisse? Jede Hilfe wird geschätzt :)

Antwort

1

Endlich habe ich mein eigenes Problem gelöst.

Es ist schwierig zu verwenden tokenize.whitespace = true für chinesischen Text, scheint, dass es nie funktioniert; Stattdessen fügen

'tokenize.language': 'Whitespace' 

zu Ihren Eigenschaften Wörterbuch oder äquivalent hinzufügen

tokenize.language: Whitespace 

auf Ihre .properties Dinge richtig zu erledigen.

Diese Immobilie steht auf der gleichen Seite geschrieben https://stanfordnlp.github.io/CoreNLP/tokenize.html#options, die ich vorher nicht bemerkt habe. Es ist ein wenig verwirrend, warum es zwei Eigenschaften für denselben Zweck gibt.

Verwandte Themen