斯坦福 POS 标记器不适用于类路径中的 SLF4J
Stanford POS tagger doesn't work with SLF4J in classpath
我在 Java 项目中使用 Stanford POS tagger 3.7.0,该项目也使用 Jena RDF API。 Jena 需要 slf4j-api-1.7.12.jar 和 slf4j-log4j12-1.7.12.jar,但是当尝试调用在类路径中包含这些 jar 的 POS 标记器时,我收到以下错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
at edu.stanford.nlp.util.logging.Redwood$ConsoleHandler.out(Redwood.java:920)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.<init>(RedwoodConfiguration.java:28)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.empty(RedwoodConfiguration.java:385)
at util.Splitter.split(Splitter.java:58)
at core.Main.main(Main.java:23)
Caused by: java.lang.IllegalStateException: Could not find SLF4J in your classpath
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.lambda$static0(RedwoodConfiguration.java:190)
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.buildChain(RedwoodConfiguration.java:309)
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.apply(RedwoodConfiguration.java:318)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.lambda$handlers5(RedwoodConfiguration.java:363)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.apply(RedwoodConfiguration.java:41)
at edu.stanford.nlp.util.logging.Redwood.<clinit>(Redwood.java:609)
... 5 more
Caused by: edu.stanford.nlp.util.MetaClass$ClassCreationException: java.lang.ClassNotFoundException: edu.stanford.nlp.util.logging.SLF4JHandler
at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:364)
at edu.stanford.nlp.util.MetaClass.createInstance(MetaClass.java:381)
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.lambda$static0(RedwoodConfiguration.java:186)
... 10 more
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.util.logging.SLF4JHandler
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at edu.stanford.nlp.util.MetaClass$ClassFactory.construct(MetaClass.java:135)
at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:202)
at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:69)
at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:360)
... 12 more
我看到有 的人通过从类路径中删除 SLF4J 来解决它。事实上,当我移除罐子时,POS 标记器工作正常,但随后 Jena 停止工作。
有没有办法将 SLF4J 保留在类路径中并仍然让 POS 标记器工作?
我认为最好的解决方案是只使用完整的 Stanford CoreNLP 3.7.0 版本,它不会有这个问题,但具有所有 POS 标记功能。
完整下载可在此处获得:
http://stanfordnlp.github.io/CoreNLP/download.html
这个问题应该在 Stanford CoreNLP 3.8.0 的独立发行版中得到解决,我们将尝试在初夏发布。
我在 Java 项目中使用 Stanford POS tagger 3.7.0,该项目也使用 Jena RDF API。 Jena 需要 slf4j-api-1.7.12.jar 和 slf4j-log4j12-1.7.12.jar,但是当尝试调用在类路径中包含这些 jar 的 POS 标记器时,我收到以下错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
at edu.stanford.nlp.util.logging.Redwood$ConsoleHandler.out(Redwood.java:920)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.<init>(RedwoodConfiguration.java:28)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.empty(RedwoodConfiguration.java:385)
at util.Splitter.split(Splitter.java:58)
at core.Main.main(Main.java:23)
Caused by: java.lang.IllegalStateException: Could not find SLF4J in your classpath
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.lambda$static0(RedwoodConfiguration.java:190)
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.buildChain(RedwoodConfiguration.java:309)
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.apply(RedwoodConfiguration.java:318)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.lambda$handlers5(RedwoodConfiguration.java:363)
at edu.stanford.nlp.util.logging.RedwoodConfiguration.apply(RedwoodConfiguration.java:41)
at edu.stanford.nlp.util.logging.Redwood.<clinit>(Redwood.java:609)
... 5 more
Caused by: edu.stanford.nlp.util.MetaClass$ClassCreationException: java.lang.ClassNotFoundException: edu.stanford.nlp.util.logging.SLF4JHandler
at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:364)
at edu.stanford.nlp.util.MetaClass.createInstance(MetaClass.java:381)
at edu.stanford.nlp.util.logging.RedwoodConfiguration$Handlers.lambda$static0(RedwoodConfiguration.java:186)
... 10 more
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.util.logging.SLF4JHandler
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at edu.stanford.nlp.util.MetaClass$ClassFactory.construct(MetaClass.java:135)
at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:202)
at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:69)
at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:360)
... 12 more
我看到有
有没有办法将 SLF4J 保留在类路径中并仍然让 POS 标记器工作?
我认为最好的解决方案是只使用完整的 Stanford CoreNLP 3.7.0 版本,它不会有这个问题,但具有所有 POS 标记功能。
完整下载可在此处获得:
http://stanfordnlp.github.io/CoreNLP/download.html
这个问题应该在 Stanford CoreNLP 3.8.0 的独立发行版中得到解决,我们将尝试在初夏发布。