2015-05-07 5 views
5

Sto utilizzando stanford-corenlp-3.2.0.jar e stanford-corenlp-3.2.0-models.jar per identificare posizioni in una frase particolare. Tuttavia, ho osservato che stanford-nlp non è in grado di identificare la posizione se la parola viene passata nel caso di piccole dimensioni.Ottenimento di posizioni in standford core nlp

Ad esempio: "Find a restaurant in London". Qui Stanford identificherà Londra come luogo.

Tuttavia, se la seguente frase è passata come segue: "Trova un ristorante in londra", quindi stanford non è in grado di identificare london come posizione.

Per risolvere questo, sto convertendo la prima lettera di ogni parola in una frase in maiuscolo. Tuttavia, sto ottenendo altri problemi se faccio questo.

in base alla risposta fornita da meskobalazs, Ho scaricato il vaso: stanford-corenlp-caseless-2015-04-20-models.jar.

Ho sostituito con il vaso precedente: stanford-corenlp-3.2.0-models.

Comunque ora sto ottenendo l'eccezione di seguito

SEVERE: Exception sending context initialized event to listener instance of class servlets.NLP_initializer 
java.lang.RuntimeException: edu.stanford.nlp.io.RuntimeIOException: Unrecoverable error while loading a tagger model 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP$4.create(StanfordCoreNLP.java:493) 
    at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:81) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:260) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:127) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:123) 
    at servlets.NLP_initializer.contextInitialized(NLP_initializer.java:34) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.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) 
Caused by: edu.stanford.nlp.io.RuntimeIOException: Unrecoverable error while loading a tagger model 
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:749) 
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:283) 
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:247) 
    at edu.stanford.nlp.pipeline.POSTaggerAnnotator.loadModel(POSTaggerAnnotator.java:78) 
    at edu.stanford.nlp.pipeline.POSTaggerAnnotator.<init>(POSTaggerAnnotator.java:62) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP$4.create(StanfordCoreNLP.java:491) 
    ... 14 more 
Caused by: java.io.IOException: Unable to resolve "edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger" as either class path, filename or URL 
    at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:419) 
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:744) 
    ... 19 more 

Il luogo, dove sono in fase di inizializzazione, mentre il server si avvia è

public static edu.stanford.nlp.pipeline.StanfordCoreNLP snlp; 
    /** 
    * @see ServletContextListener#contextInitialized(ServletContextEvent) 
    */ 
    public void contextInitialized(ServletContextEvent arg0) { 
     Properties props = new Properties(); 
     props.put("annotators", "tokenize,ssplit,pos,lemma,parse,ner,dcoref"); 
     StanfordCoreNLP snlp = new StanfordCoreNLP(props); 
    } 

Please help me su come risolvere questo.

risposta

4

Da quello che vedo here, dovresti provare modelli che ignorano la maiuscola delle parole. Hai solo bisogno di aggiungere questo file jar modello a quello esistente: caseless models.

Per riferimento futuro: il collegamento del barattolo potrebbe essere rotto, ma il primo collegamento va alla pagina, dove è possibile trovare un collegamento per il vaso aggiornato.

+0

Ho provato a sostituire il vaso modello con quello specificato. Comunque ora non sono in grado di inizializzare il nlp. L'eccezione ora è java.lang.RuntimeException: edu.stanford.nlp.io.RuntimeIOException: Errore irreversibile durante il caricamento di un modello di tagger \t a edu.stanford.nlp.pipeline.StanfordCoreNLP $ 4.create (StanfordCoreNL.java:493) \t a edu.stanford.nlp.pipeline.AnnotatorPool.get (AnnotatorPool.java:81) \t a edu.stanford.nlp.pipeline.StanfordCoreNLP.construct (StanfordCoreNLP.java:260) –

+1

Come si desidera caricare un diverso modelli , è necessario modificare il codice di caricamento del modello, potresti pubblicare il codice pertinente nella domanda? – meskobalazs

+0

Sto inizializzando come public void contextInitialized (ServletContextEvent arg0) { \t Proprietà props = new Properties(); props.put ("annotators", "tokenize, ssplit, pos, lemma, parse, ner, dcoref"); StanfordCoreNLP snlp = new StanfordCoreNLP (oggetti di scena); NlpBO.snlp = snlp; } –