Search code examples
stanford-nlppos-tagger

Stanford NLP pos-tagger model REQUIREMENTS


I have made a basic application where I use Stanford Parser through OpenIE Lib and when the StanfordCoreNLP is initialized with the specified properties it stops as pos (pos-tagger). I do think all the required models are included so not sure why the process is unable to find the model data.

Properties props = new Properties();       
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation doc = new Annotation(testString);
pipeline.annotate(doc);
for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class))
{
  Collection<RelationTriple> triples = sentence.get(NaturalLogicAnnotations.RelationTriplesAnnotation.class);
  for (RelationTriple triple : triples) {              
    System.out.println(triple.confidence + "\t" +
       triple.subjectLemmaGloss() + "\t" +
       triple.relationLemmaGloss() + "\t" +
       triple.objectLemmaGloss());
  }
}

The includes are

stanford-parser.jar
stanford-parser-3.5.2-models.jar
stanford-openie.jar
stanford-openie-models.jar
JDK1.8

Stack-trace when the StanfordCoreNLP class is initiated.

Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [1.2 sec].
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: REQUIREMENTS
    at edu.stanford.nlp.pipeline.POSTaggerAnnotator.requires(POSTaggerAnnotator.java:169)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:362)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:131)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:127)
    at org.sjdp.q2sm.GUI.extractTriplets(GUI.java:373)
    at org.sjdp.q2sm.GUI.processSPARQL(GUI.java:353)
    at org.sjdp.q2sm.GUI.actionPerformed(GUI.java:153)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Solution

  • This is almost certainly a class incompatibility bug from including both the parser and the OpenIE system at the same time. It'll be fixed in the next release (3.5.3) when everything syncs up again, but since OpenIE didn't exist at the 3.5.2 release the code in that jar is a bit "ahead" of the parser.

    The easiest way to run the two at the same time is to run from the Github version of CoreNLP. The command ant jar should create a jar file which contains both the parser and the OpenIE system. The most recent models (warning: large download) should have both the parser and OpenIE models.