2015-05-07 3 views
5

Я использую stanford-corenlp-3.2.0.jar и stanford-corenlp-3.2.0-models.jar для определения местоположения в определенном предложении. Однако я заметил, что stanford-nlp не может определить местоположение, если слово передано в маленьком регистре.Получение местоположений в ядре standford nlp

Например: "Find a restaurant in London". Здесь Стэнфорд определит Лондон как место.

Однако, если следующее предложение передано, например: «Найдите ресторан в london», то stanford не может определить london в качестве местоположения.

Чтобы решить эту проблему, я конвертирую первую букву каждого слова в предложение в капитал. Однако, если я это сделаю, у меня появятся другие проблемы.

На основании ответа предоставленной meskobalazs, Я скачал банку: stanford-corenlp-caseless-2015-04-20-models.jar.

Я заменил более раннюю банку: stanford-corenlp-3.2.0-models.

Однако теперь я получаю НИЖЕ за исключением

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 

Место, где я инициализации, когда сервер запускается в

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); 
    } 

Пожалуйста, помогите мне о том, как решить эту проблему.

ответ

4

Из чего я вижу here, вы должны опробовать модели, которые игнорируют капитализацию слов. Вам просто нужно добавить этот файл jar модели к существующему: caseless models.

Для справки в будущем: ссылка на банку может быть нарушена, но первая ссылка идет на страницу, где можно найти ссылку для последней банки.

+0

Я попытался заменить модельную банку той, которую вы указали. Однако теперь я не могу инициализировать nlp. Исключением является java.lang.RuntimeException: edu.stanford.nlp.io.RuntimeIOException: Неустранимая ошибка при загрузке модели тегов. \t at edu.stanford.nlp.pipeline.StanfordCoreNLP $ 4.create (StanfordCoreNLP.java:493) \t на edu.stanford.nlp.pipeline.AnnotatorPool.get (AnnotatorPool.java:81) \t в edu.stanford.nlp.pipeline.StanfordCoreNLP.construct (StanfordCoreNLP.java:260) –

+1

Как вы хотите загрузить различные модели , вам нужно изменить код загрузки модели, не могли бы вы разместить соответствующий код в вопросе? – meskobalazs

+0

Я инициализирую как public void contextInitialized (ServletContextEvent arg0) { \t Свойства props = new Properties(); props.put («аннотаторы», «tokenize, ssplit, pos, lemma, parse, ner, dcoref»); StanfordCoreNLP snlp = новый StanfordCoreNLP (реквизит); NlpBO.snlp = snlp; } –

Смежные вопросы