2017-01-12 7 views
0

В настоящее время я пытаюсь использовать специально разработанную модель OpenNLP Name Finder в коде. Мой проект использует OpenNLP 1.6.0 и разработан с использованием Eclipse IDE. Модель также была обучена с использованием OpenNLP 1.6.0.OpenNLP - версия версии 1.6.0, не поддерживаемая этой версией (1.5.3) OpenNLP

Однако, я получаю эту досадную ошибку:

java.lang.IllegalArgumentException : opennlp.tools.util.InvalidFormatException: Model version 1.6.0 is not supported by this (1.5.3) version of OpenNLP! 

Аналогичный вопрос был задан here и ответ заявил, что проблема была из-за модель OpenNLP обучаясь с использованием той же версии, что и один в (например, обучение модели с использованием 1.6.0 и ее использование в проекте, который также использует 1.6.0). Однако у меня также есть другие Java-проекты с использованием OpenNLP 1.6.0, и они смогли загрузить модель успешно, поэтому я не думаю, что это относится ко мне.

.classpath моего проекта также показывает, что проект ссылается на библиотеки OpenNLP 1.6.0.

Я знаю, что вопрос довольно расплывчатый, но если кто-нибудь знает, почему это может произойти, сообщите мне об этом!

Подводя итог: невозможно загрузить пользовательскую модель OpenNLP Name Finder в код из-за очевидной несовместимости версии OpenNLP. Модель была подготовлена ​​в OpenNLP 1.6.0, которую также использует мой проект. Другие проекты, также использующие 1.6.0, смогли успешно загрузить модель.

ответ

0

Я определил источник своей ошибки - мой проект также использовал библиотеку Apache Tika 1.13, которая содержит собственную реализацию OpenNLP 1.5.3.

В результате путь к классу содержал несколько JAR, которые содержат свои собственные версии классов OpenNLP.

РЕДАКТИРОВАТЬ 16/1/2017: Из моих данных, порядок загрузки библиотек имеет значение.

Пожалуйста, исправьте меня, если я ошибаюсь здесь: на Java (и других языках), как только компонент зависимостей был загружен в память, то по умолчанию он не будет загружен снова, даже если другая версия требуется позже.

Из-за этого, если библиотека загружается Тик перед OpenNLP 1.6.0 библиотеки, OpenNLP 1.5.3 будет загружен первым, и программа «прилипнет» к 1.5.3, несмотря на последующей загрузке 1,6,0. Аналогично, если происходит обратное (загрузка 1.6.0 перед Tika), программа будет «придерживаться» до 1.6.0 вместо этого.