ClassNotFoundException: edu.stanford.nlp.tagger.maxent.ExtractorNonAlphanumeric - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь скомпилировать и запустить пример Stanford NLP java на этой странице: https://stanfordnlp.github.io/CoreNLP/api.html#quickstart -with-comfort-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 annotator.

Вывод такой:

[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> 

Когда я удаляю все, кроме tokenize и ssplit annotators, и запускаю сокращенный пример:

  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.

Так что, похоже, что tokenize и ssplit annotators загружаются и работают нормально, но возможно pos не загружается.

Я все еще пропускаю одну или несколько банок или что причина этой ошибки здесь?

Спасибо за вашу поддержку!

1 Ответ

0 голосов
/ 28 февраля 2020

Я столкнулся с той же проблемой, только наконец понял. Модели со ссылками на главной странице репо: https://github.com/stanfordnlp/CoreNLP, например, эта: http://nlp.stanford.edu/software/stanford-corenlp-models-current.jar, а соседние ссылки сопоставлены с последним текущим кодом (т. Е. ГОЛОВКА репо Git, а не какой-либо конкретный релиз c, например 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 в вашей сборке, один из вариантов - сначала собрать с включенной зависимостью, а затем найти, где jar устанавливается в вашем локальном репозитории ~ / .m2 (~ / .m2 / repositories / edu / stanford / nlp / stanford-corenlp / 3.9.2), извлеките (с помощью jar xvf) нужные вам модели из этого jar, включите модели в свою сборку (например, поместив их в main / resources), закомментируйте или удалите вышеуказанную зависимость из pom и перестройте .

...