Stanford CoreNLP: ошибка здания (NoSuchMethodError) - PullRequest
2 голосов
/ 06 января 2012

Извините, если это вопрос новичка.Я пытался использовать maven в Netbeans для создания парсера CoreNLP.

Сначала я добавил зависимость stanford-corenlp 1.2.0.Тем не менее, я всегда получал ошибку при компиляции моего кода.Я попытался упростить свой код, чтобы просто создать объект StanfordCoreNLP, но он все еще не работал с тем же сообщением об ошибке.Я полагаю, что здесь может возникнуть основная проблема.

Мой упрощенный код выглядит так:

import java.util.Properties;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

Сообщение об ошибке:

Exception in thread "main" java.lang.NoSuchMethodError: 
edu.stanford.nlp.process.PTBTokenizer.factory
(Ledu/stanford/nlp/process/LexedTokenFactory;Ljava/lang/String;)Ledu/stanford/nlp/objectbank/TokenizerFactory;
        at edu.stanford.nlp.pipeline.PTBTokenizerAnnotator.<init>(PTBTokenizerAnnotator.java:42)
        at edu.stanford.nlp.pipeline.StanfordCoreNLP$1.create(StanfordCoreNLP.java:365)
        at edu.stanford.nlp.pipeline.StanfordCoreNLP$1.create(StanfordCoreNLP.java:355)
        at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:62)
        at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:328)
        at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:194)
        at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:184)
        at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:176)
        at com.mycompany.hellocore.App.main(App.java:26)

Я также попробовалто же самое с помощью maven на Eclipse, сообщение об ошибке остается тем же.Кто-нибудь может дать мне несколько советов?Спасибо!

ОС: Mac Lion / Java версия: 1.6.0_29


[Обновление] 01-6-2012 На основании предложения Шри Шанкарана я попытался mvn dependency: tree:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building hellocore 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ hellocore ---
[INFO] com.mycompany:hellocore:jar:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] \- edu.stanford.nlp:stanford-corenlp:jar:1.2.0:compile
[INFO]    +- xom:xom:jar:1.2.5:compile
[INFO]    |  +- xml-apis:xml-apis:jar:1.3.03:compile
[INFO]    |  +- xerces:xercesImpl:jar:2.8.0:compile
[INFO]    |  \- xalan:xalan:jar:2.7.0:compile
[INFO]    \- joda-time:joda-time:jar:2.0:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.483s
[INFO] Finished at: Fri Jan 06 08:55:06 EST 2012
[INFO] Final Memory: 5M/81M
[INFO] ------------------------------------------------------------------------

Настройка в моих Netbeans:

enter image description here

Но похоже, что нуждающаяся библиотека выглядит так же, как уже загруженная в Netbeans.Проект все еще останавливается, пока Adding annotator tokenize.


[Обновление] 01-09-2012

После переустановки системы проблема исчезла.Поэтому я думаю, что код и модуль являются правильными.Каталоги classpath могут быть просто испорчены мной.Спасибо за помощь всех людей.

Просто мягкое напоминание людям, использующим corenlp через Netbeans.В дополнение к стандартной зависимости stanford-corenlp.jar.Если вы хотите включить stanford-corenlp-models.jar в ваш проект.Похоже, вам также нужно указать <classifier> для добавления моделей в хранилище зависимостей.

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

Ответы [ 2 ]

1 голос
/ 09 января 2012

Вам нужно включить модель (POS-тег, NER, Coref и т. Д.), Чтобы ваш аннотатор работал.
Вы можете получить его здесь

enter image description here

0 голосов
/ 06 января 2012

Использование Standford NLP предполагает наличие других зависимостей.Если они не включены транзитивно в путь к классам в силу указанной зависимости от stanford-corenlp 1.2.0, вам придется явно указать и эти другие зависимости.Команда mvn dependency:tree должна отобразить ваше эффективное дерево зависимостей.

...