2015-05-07 3 views
5

Ich verwende stanford-corenlp-3.2.0.jar und stanford-corenlp-3.2.0-models.jar für die Identifizierung von Standorten in einem bestimmten Satz. Allerdings habe ich beobachtet, dass stanford-nlp ist nicht in der Lage, den Ort zu identifizieren, wenn das Wort in kleinen Fall übergeben wird.Abrufen von Standorten in Standford-Kern

Zum Beispiel: "Find a restaurant in London". Hier wird Stanford London als Standort identifizieren.

Wenn jedoch der folgende Satz wie folgt übergeben wird: "Suchen Sie ein Restaurant in London", dann kann Stanford london nicht als Standort identifizieren.

Um dies zu beheben, konvertiere ich den ersten Buchstaben jedes Wortes in einem Satz in Großbuchstaben. Ich bekomme jedoch andere Probleme, wenn ich das tue. stanford-corenlp-caseless-2015-04-20-models.jar:

Basierend auf Antwort von meskobalazs zur Verfügung gestellt haben ich das Glas heruntergeladen.

Ich ersetzte mit dem früheren Glas: stanford-corenlp-3.2.0-models.

aber jetzt habe ich die unten Ausnahme

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 

Der Ort bin immer, wo ich bin initialisiert, während der Server startet ist

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

Bitte helfen Sie mir, wie Sie dieses Problem zu beheben.

Antwort

4

Von dem, was ich sehe here, sollten Sie Modelle ausprobieren, die die Großschreibung von Wörtern ignorieren. Sie müssen nur die JAR-Datei dieses Modells zu der vorhandenen hinzufügen: caseless models.

Für zukünftige Referenz: der Jar-Link möglicherweise gebrochen, aber der erste Link geht auf die Seite, wo ein Link für die aktuelle jar gefunden werden kann.

+0

Ich habe versucht, das Modellglas durch das von Ihnen angegebene zu ersetzen. Aber jetzt kann ich das nlp nicht initialisieren. Die Ausnahme ist jetzt java.lang.RuntimeException: edu.stanford.nlp.io.RuntimeIOException: Fehler beim Laden eines Tagger-Modells \t bei edu.stanford.nlp.pipeline.StanfordCoreNLP $ 4.create (StanfordCoreNLP.java:493) \t bei edu.stanford.nlp.pipeline.AnnotatorPool.get (AnnotatorPool.java:81) \t bei edu.stanford.nlp.pipeline.StanfordCoreNLP.construct (StanfordCoreNLP.java:260) –

+1

Wie Sie eine andere Modelle laden möchten , müssen Sie Ihren Modellladecode ändern, könnten Sie den relevanten Code in der Frage veröffentlichen? – meskobalazs

+0

Ich initialisiere wie public void contextInitialized (ServletContextEvent arg0) { \t Eigenschaften props = new Properties(); props.put ("Annotatoren", "Tokenize, sssplit, pos, Lemma, Parse, ner, dcoref"); StanfordCoreNLP snlp = neue StanfordCoreNLP (Requisiten); NlpBO.snlp = snlp; } –

Verwandte Themen