2016-02-09 7 views
5

Ich versuche einen lokalen Server unter Windows mit Stanford CoreNLP einzurichten, um Stimmungswerte für über 1 Mio. Artikel- und Videotexte zu berechnen. Ich kenne Java nicht, also brauche ich Hilfe.Wie richte ich einen Stanford CoreNLP Server unter Windows ein, um die Stimmung für Text zurückzugeben?

ich erfolgreich installiert Stanford CoreNLP 3.6.0, und ich habe einen Server mit ausgeführt wird:

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

Ausführen diese http Post von meinem anderen Computer funktioniert, und ich erhalte eine erwartete Antwort (xxx.xxx.xxx .xxx ist die IP-Adresse des Servers):

wget --post-data 'the quick brown fox jumped over the lazy dog' 'xxx.xxx.xxx.xxx:9000/?properties={"tokenize.whitespace": "true", "annotators": "tokenize,ssplit,pos,lemma,parse", "outputFormat": "json"}' -O - 

Die Antwort enthält jedoch keine Stimmung. Die offensichtliche Lösung wäre einen Kommentator hinzuzufügen:

wget --post-data 'the quick brown fox jumped over the lazy dog' 'xxx.xxx.xxx.xxx:9000/?properties={"tokenize.whitespace": "true", "annotators": "tokenize,ssplit,pos,lemma,parse,sentiment", "outputFormat": "json"}' -O - 

jedoch auf der Server-Seite, bekomme ich diesen Fehler:

java.lang.IllegalArgumentException: Unknown annotator: sentiment 
at edu.stanford.nlp.pipeline.StanfordCoreNLP.ensurePrerequisiteAnnotators(StanfordCoreNLP.java:281) 
at edu.stanford.nlp.pipeline.StanfordCoreNLPServer$CoreNLPHandler.getProperties(StanfordCoreNLPServer.java:476) 
at edu.stanford.nlp.pipeline.StanfordCoreNLP$CoreNLPHandler.handle(StanfordCoreNLPServer.java:350) 
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) 
at sun.net.httpserver.AuthFilter.doFilter(Unknown Source) 
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) 
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(Unknown Source) 
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) 
at sun.net.httpserver.ServerImpl$Exchange.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.thread.run(Unknown Source) 

Die nächste offensichtliche Lösung wäre, um einen Parameter zu dem Starten des Servers hinzufügen , die läuft:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -annotators "tokenize,ssplit,pos,lemma,parse,sentiment" 

Das Ausführen der gleichen HTTP-Beiträge von zuvor gibt das gleiche genaue Ergebnis bzw. Fehler.

Mache ich etwas falsch oder gibt es einige Änderungen am Kerncode, die es funktionieren muss? Ich kenne Java nicht, daher kann ich diese Änderungen nicht vornehmen.

Als Randbemerkung, ähnlich der Befehl startet eine Konsole und scheint richtig Stimmung zu laden:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators "tokenize,ssplit,pos,lemma,parse,sentiment" 

[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize 
[main] INFO edu.stanford.nlp.pipeline.TokenizerAnnotator - TokenizerAnnotator: No tokenizer type provided. Defaulting to PTBTokenizer. 
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit 
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator pos 
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [0.5 sec]. 
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator lemma 
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator parse 
[main] INFO edu.stanford.nlp.parser.common.ParserGrammar - Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [0.4 sec]. 
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator sentiment 

Entering interactive shell. Type q RETURN or EOF to quit. 
NLP> _ 

Antwort

5

Versuchen Sie, mit dem GitHub version des Codes ausgeführt wird. Ihre erste Lösung ist richtig - die Tatsache, dass es nicht das Gefühl Kommentator ist ein Fehler im Code gefunden:

wget --post-data 'the quick brown fox jumped over the lazy dog' 'xxx.xxx.xxx.xxx:9000/?properties={"annotators": "tokenize,ssplit,pos,lemma,parse,sentiment", "outputFormat": "json"}' -O - 

(A-Seite Anmerkung: die tokenize.whitespace Eigenschaft in der Dokumentation zu zeigen, dass Sie passieren in können willkürliche Eigenschaften, aber ich empfehle gegen die Verwendung in der Produktion).

+0

Das Herunterladen der GitHub-Version ist nicht sehr hilfreich, da es keine Dokumentation für die Verwendung gibt. Sie verweisen lediglich auf die Dokumentation zum Download auf ihrer Website, die anders aufgebaut ist. Ich war noch nicht erfolgreich damit. – Eric

+0

Starten Sie einfach 'ant jar' und es sollte eine JAR-Datei erstellen, die Sie anstelle der offiziellen Version verwenden können. –

+0

Das hat bei mir funktioniert. (Running 'ant' zuerst und dann' ant jar'.) Beachten Sie, dass die Github-Version nicht alle Modelle hat, also müssen Sie sie vielleicht [hier] herunterladen (http://nlp.stanford.edu/software/ stanford-english-corenlp-models-current.jar). Außerdem bin ich mit Java nicht sehr vertraut, so dass ich Schwierigkeiten hatte, herauszufinden, welchen Befehl ich ausführen soll, um die JAR-Datei, die ameise gemacht hat, und das Model-Jar und die Jars in 'lib' zu enthalten. Falls andere Probleme haben, hier ist, was für mich funktionierte: 'java -mx4g -cp 'javanlp-core.jar: stanford-englisch-corenlmodels-current.jar: lib/*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer " – Erin

Verwandte Themen