ClassNotFoundException:edu.stanford.nlp.tagger.maxent.ExtractorNonAlphanumeric

用户4955663

我尝试在此页面上编译并运行Stanford NLP Java示例:https : //stanfordnlp.github.io/CoreNLP/api.html#quickstart-with-convenience-wrappers(第一个示例BasicPipelineExample)

据说那里的例子是为3.9.0开发的,但是我在任何地方都找不到,所以我使用的是3.9.2。

我在简单的scala构建工具下运行代码,因为进一步的工作将用scala编写。

我的build.sbt在这里:

name := "nlpexp"

version := "1.0"

scalaVersion := "2.12.10"

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

val stanford_corenlpV = "3.9.2"
val AppleJavaExtensionsV = "1.4"
val jollydayV = "0.4.9"
val commons_lang3V = "3.3.1"
val lucene_queryparserV = "4.10.3"
val lucene_analyzers_commonV = "4.10.3"
val lucene_queriesV = "4.10.3"
val lucene_coreV = "4.10.3"
val javax_servlet_apiV = "3.0.1"
val xomV = "1.2.10"
val joda_timeV = "2.9.4"
val ejmlV = "0.23"
val javax_jsonV = "1.0.4"
val slf4j_apiV = "1.7.12"
val protobuf_javaV = "3.2.0"
val junitV = "4.12"
val junit_quickcheck_coreV = "0.5"
val junit_quickcheck_generatorsV = "0.5"
val javax_activation_apiV = "1.2.0"
val jaxb_apiV = "2.4.0-b180830.0359"
val jaxb_coreV = "2.3.0.1"
val jaxb_implV = "2.4.0-b180830.0438"

val logbackVersion = "1.2.3"

libraryDependencies ++= Seq(
  "ch.qos.logback" % "logback-classic" % logbackVersion withSources() withJavadoc(), //
  "ch.qos.logback" % "logback-core" % logbackVersion withSources() withJavadoc(), //
  "ch.qos.logback" % "logback-access" % logbackVersion withSources() withJavadoc(), //

  "com.apple" % "AppleJavaExtensions" % AppleJavaExtensionsV withJavadoc(),
  "de.jollyday" % "jollyday" % jollydayV withSources() withJavadoc(),
  "org.apache.commons" % "commons-lang3" % commons_lang3V withSources() withJavadoc(),
  "org.apache.lucene" % "lucene-queryparser" % lucene_queryparserV withSources() withJavadoc(),
  "org.apache.lucene" % "lucene-analyzers-common" % lucene_analyzers_commonV withSources() withJavadoc(),
  "org.apache.lucene" % "lucene-queries" % lucene_queriesV withSources() withJavadoc(),
  "org.apache.lucene" % "lucene-core" % lucene_coreV withSources() withJavadoc(),
  "javax.servlet" % "javax.servlet-api" % javax_servlet_apiV withSources() withJavadoc(),
  "com.io7m.xom" % "xom" % xomV withSources() withJavadoc(),
  "joda-time" % "joda-time" % joda_timeV withSources() withJavadoc(),
  "com.googlecode.efficient-java-matrix-library" % "ejml" % ejmlV withSources() withJavadoc(),
  "org.glassfish" % "javax.json" % javax_jsonV withSources() withJavadoc(),
  "org.slf4j" % "slf4j-api" % slf4j_apiV withSources() withJavadoc(),
  "com.google.protobuf" % "protobuf-java" % protobuf_javaV withSources() withJavadoc(),
  "junit" % "junit" % junitV  % "test" withSources() withJavadoc(),
  "com.pholser" % "junit-quickcheck-core" % junit_quickcheck_coreV % "test" withSources() withJavadoc(),
  "com.pholser" % "junit-quickcheck-generators" % junit_quickcheck_generatorsV % "test" withSources() withJavadoc(),
  "javax.activation" % "javax.activation-api" % javax_activation_apiV withSources() withJavadoc(),
  "javax.xml.bind" % "jaxb-api" % jaxb_apiV withSources() withJavadoc(),
  "com.sun.xml.bind" % "jaxb-core" % jaxb_coreV withSources() withJavadoc(),
  "com.sun.xml.bind" % "jaxb-impl" % jaxb_implV withSources() withJavadoc(),
"edu.stanford.nlp" % "stanford-corenlp" % stanford_corenlpV withSources() withJavadoc()
)

scalacOptions += "-deprecation"

我还下载了以下jar:

-rw-rw-r-- 1 jk jk  455928708 stanford-corenlp-models-current.jar
-rw-rw-r-- 1 jk jk 1238400073 stanford-english-corenlp-models-current.jar
-rw-rw-r-- 1 jk jk  473999694 stanford-english-kbp-corenlp-models-current.jar

哪个位于非托管库的目录中,以便构建可以找到它们。

示例代码编译成功并开始运行,但是在尝试加载pos注释器时失败。

输出是这样的:

[info] Running nlpexp.BasicPipelineExample 
Starting
Create pipeline
23:30:09.569 [run-main-0] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
23:30:09.587 [run-main-0] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
23:30:09.592 [run-main-0] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator pos
[error] (run-main-0) edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file)
[error] edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:925)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:823)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:797)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:320)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:273)
[error]     at edu.stanford.nlp.pipeline.POSTaggerAnnotator.loadModel(POSTaggerAnnotator.java:85)
[error]     at edu.stanford.nlp.pipeline.POSTaggerAnnotator.<init>(POSTaggerAnnotator.java:73)
[error]     at edu.stanford.nlp.pipeline.AnnotatorImplementations.posTagger(AnnotatorImplementations.java:53)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.lambda$getNamedAnnotators$3(StanfordCoreNLP.java:521)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.lambda$null$30(StanfordCoreNLP.java:602)
[error]     at edu.stanford.nlp.util.Lazy$3.compute(Lazy.java:126)
[error]     at edu.stanford.nlp.util.Lazy.get(Lazy.java:31)
[error]     at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:149)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:251)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:192)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:188)
[error]     at nlpexp.BasicPipelineExample.main(BasicPipelineExample.java:31)
[error]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:498)
[error] Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.tagger.maxent.ExtractorNonAlphanumeric
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
[error]     at java.lang.Class.forName0(Native Method)
[error]     at java.lang.Class.forName(Class.java:348)
[error]     at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:720)
[error]     at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1923)
[error]     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1806)
[error]     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2097)
[error]     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
[error]     at java.io.ObjectInputStream.readArray(ObjectInputStream.java:2030)
[error]     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1613)
[error]     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2342)
[error]     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2266)
[error]     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2124)
[error]     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1625)
[error]     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:465)
[error]     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:423)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readExtractors(MaxentTagger.java:628)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:874)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:823)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:797)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:320)
[error]     at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:273)
[error]     at edu.stanford.nlp.pipeline.POSTaggerAnnotator.loadModel(POSTaggerAnnotator.java:85)
[error]     at edu.stanford.nlp.pipeline.POSTaggerAnnotator.<init>(POSTaggerAnnotator.java:73)
[error]     at edu.stanford.nlp.pipeline.AnnotatorImplementations.posTagger(AnnotatorImplementations.java:53)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.lambda$getNamedAnnotators$3(StanfordCoreNLP.java:521)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.lambda$null$30(StanfordCoreNLP.java:602)
[error]     at edu.stanford.nlp.util.Lazy$3.compute(Lazy.java:126)
[error]     at edu.stanford.nlp.util.Lazy.get(Lazy.java:31)
[error]     at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:149)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:251)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:192)
[error]     at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:188)
[error]     at nlpexp.BasicPipelineExample.main(BasicPipelineExample.java:31)
[error]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:498)
[error] Nonzero exit code: 1
[error] (Compile / run) Nonzero exit code: 1
[error] Total time: 41 s, completed Feb 22, 2020 11:30:10 PM
sbt:nlpexp> 

当我删除除标记化和分割注释器之外的所有注释并运行缩短的示例时:

  public static void main(String[] args) {
    // set up pipeline properties
    Properties props = new Properties();
    // set the list of annotators to run
    props.setProperty("annotators", "tokenize,ssplit");
    // set a property for an annotator, in this case the coref annotator is being set to use the neural algorithm
    props.setProperty("coref.algorithm", "neural");
    // build pipeline
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    // create a document object
    CoreDocument document = new CoreDocument(text);
    // annnotate the document
    pipeline.annotate(document);
    // examples

    // 10th token of the document
    CoreLabel token = document.tokens().get(10);
    System.out.println("Example: token");
    System.out.println(token);
    System.out.println();

    // text of the first sentence
    String sentenceText = document.sentences().get(0).text();
    System.out.println("Example: sentence");
    System.out.println(sentenceText);
    System.out.println();

    // second sentence
    CoreSentence sentence = document.sentences().get(1);
  }

输出为:

sbt:nlpexp> run
Starting
Create pipeline
23:45:47.255 [run-main-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
23:45:47.271 [run-main-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
Create doc
Annotate doc
Example: token
he-4

Example: sentence
Joe Smith was born in California.

因此,似乎将标记化和拆分的注释器加载并运行正常,但可能无法加载。

我还是会错过一个或多个罐子吗?还是出现此错误的原因是什么?

谢谢您的支持!

杰恩德兰

我遇到了同样的问题,只是终于想通了。在主仓库页面上具有链接的模型位于:https : //github.com/stanfordnlp/CoreNLP,例如,该模型:http : //nlp.stanford.edu/software/stanford-corenlp-models-current.jar,并且相邻链接与最新的当前代码(即Git存储库的HEAD)匹配,而不是像3.9.2这样的任何特定版本。

要获取3.9.2版本的模型,必须从相应的models.jar中获取它:

<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.9.2</version>
<classifier>models</classifier>
</dependency>

如果您不想在构建中包括这个(非常胖的)jar,一个选择是首先在包含此依赖项的情况下进行构建,然后在本地〜/ .m2存储库(〜/ .m2 /仓库/edu/stanford/nlp/stanford-corenlp/3.9.2),从该jar中提取(通过jar xvf)所需的模型,将模型包括在您的构建中(例如,通过将它们放在main / resources下),注释从pom中删除或删除上述依赖项,然后进行重建。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

HTTP状态500-javax.servlet.ServletException:java.lang.NoClassDefFoundError:edu / stanford / nlp / tagger / maxent / MaxentTagger

Stanford NLP POS Tagger的短语非常简单?

Stanford NER Tagger in NLTK

Stanford CoreNLP创建edu.stanford.nlp.time.TimeExpressionExtractorImpl时出错

Stanford Spanish POS Tagger的含义

类型不匹配; 找到:edu.stanford.nlp.util.CoreMap =>所需单位:java.util.function.Consumer [_>:edu.stanford.nlp.util.CoreMap]

edu.stanford.nlp.util.ReflectionLoading$ReflectionLoadingException 与 Jython 一起使用 CoreNLP 时

Stanford NLP for Python

Stanford POS Tagger OutOfMemoryError阅读标记器

Stanford Core NLP使用令牌

Stanford Core NLP LexicalizedParser模型

Java Stanford NLP:拼写检查

使用Stanford NLP检测语言

在stanford pos tagger中编辑配置文件

在 pycharm 中运行 stanford ner tagger 不起作用

MetaClass无法使用args [sutime,{}]创建公共edu.stanford.nlp.time.TimeExpressionExtractorImpl(java.lang.String,java.util.Properties)

从Stanford Core NLP解析“ 1.5小时”

如何在商业上使用Stanford NLP?

Stanford.NLP for .NET未加载模型

Stanford Core NLP示例代码SemanticGraph异常

使用NLTK中的Stanford NER Tagger提取人员和组织列表

如何对stanford-core nlp的结果进行分类

解释Stanford NLP解析器输出的标签的在线文档?

Stanford NLP CoreNLP不为中文做句子拆分

如何制作轻量级的stanford-nlp.jar

Stanford Core NLP-了解共指解决方案

Stanford NLP情绪-如何检查单词中的单词是否被识别?

Stanford NLP:如何对单个词进行词法化?

stanford nlp 3.7.0 和 3.9.2 之间的性能下降