Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting locations in stanford core nlp

I am using stanford-corenlp-3.2.0.jar and stanford-corenlp-3.2.0-models.jar for identifying locations in a particular sentence. However I have observed that stanford-nlp is not able to identify the location if the word is passed in small case.

For example: "Find a restaurant in London". Here stanford will identify London as location.

However if the following sentence is passed like: "Find a restaurant in london", then stanford is unable to identify london as a location.

To resolve this, I am converting first letter of every word in a sentence to capital. However, I am getting other issues if I do this.

Based on answer provided by meskobalazs, I have downloaded the jar: stanford-corenlp-caseless-2015-04-20-models.jar.

I replaced with the earlier jar: stanford-corenlp-3.2.0-models.

However now I am getting the below exception

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

The place, where I am initializing, while the server starts up is

  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);
    }
like image 832
Partha Bisoi Avatar asked Sep 28 '22 01:09

Partha Bisoi


1 Answers

From what I see here, you should try out models which ignore the capitalization of words. You just need to add this models jar file to the existing one: caseless models.

For future reference: the jar link may be broken, but the first link goes to the page, where a link for the up to date jar can be found.

like image 82
meskobalazs Avatar answered Oct 27 '22 12:10

meskobalazs