2016-02-09 20 views
5

Sto tentando di configurare un server locale su Windows con Stanford CoreNLP per calcolare i punteggi degli errori per oltre 1 milione di articoli e video. Non conosco Java, quindi avrò bisogno di aiuto.Come configurare un server Stanford CoreNLP su Windows per restituire il sentimento per il testo

ho installato con successo Stanford CoreNLP 3.6.0, e ho un server che esegue con:

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

esecuzione di questo post http dai miei altri lavori di computer, e io ottenere una risposta prevista (xxx.xxx.xxx .xxx è l'indirizzo IP del server):

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 - 

Tuttavia, la risposta non contiene sentimento. La soluzione ovvia sarebbe quella di aggiungere un commentatore:

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 - 

Tuttavia, sul lato server, ottengo questo errore:

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) 

La soluzione più ovvia successivo sarebbe quello di aggiungere un parametro per avviare il server , che funziona:

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

L'esecuzione degli stessi post http da prima fornisce rispettivamente lo stesso risultato esatto e l'errore.

Sto facendo qualcosa di sbagliato, o c'è qualche modifica al codice base che deve funzionare? Non conosco Java, quindi non sono in grado di apportare tali modifiche.

Come nota a margine, questo comando simile avvia una console, e sembra a caricare correttamente il sentimento:

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> _ 

risposta

5

provare a eseguire con la GitHub version del codice. La vostra prima soluzione è corretta - il fatto che non riusciva a trovare l'annotator sentimento è un bug nel codice:

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 - 

(Una nota a margine: la proprietà è tokenize.whitespace nella documentazione per dimostrare che è possibile passare in proprietà arbitrarie, ma consiglio di non utilizzarlo in produzione).

+0

Il download della versione di GitHub non è molto utile, dal momento che non c'è documentazione su come usarlo. Indicano semplicemente la documentazione per il download sul loro sito Web, che è impostata diversamente. Non ho ancora avuto successo con questo. – Eric

+0

Basta eseguire 'ant jar 'e dovrebbe creare un file jar che puoi usare al posto della versione ufficiale. –

+0

Questo ha funzionato per me. (Eseguendo prima 'ant' e poi' ant jar'.) Si noti che la versione github non ha tutti i modelli, quindi potrebbe essere necessario scaricarli [qui] (http://nlp.stanford.edu/software/ Stanford-inglese-corenlp-modelli-current.jar). Inoltre, non ho molta familiarità con java, quindi ho avuto difficoltà a capire il comando da eseguire per includere il file jar che è stato creato e il modello jar e i jar in 'lib'. Nel caso in cui altri abbiano problemi, ecco cosa ha funzionato per me: 'java -mx4g -cp" javanlp-core.jar: stanford-inglese-corenlmodels-current.jar: lib/* "edu.stanford.nlp.pipeline.StanfordCoreNLPServer' – Erin