2016-02-04 5 views
2

Я пытаюсь выполнить модель OpenNLP, которую я подготовил для своих индивидуальных имен. Я выполнил команду ниже, чтобы сделать настраиваемую модель:Как обращаться с ExtensionNotLoadedException при использовании пользовательской модели NER в OpenNLP?

OpenNLP TokenNameFinderTrainer -Кодирование UTF-8 -lang ан -data C: \ Users \ nshah \ Desktop \ ан-нер-person.train -модели ан-ner- personName.bin

Я могу успешно создать модель под названием ан-нер-personName.bin.

Теперь я пытаюсь выполнить свою программу, как показано ниже:

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.util.InvalidFormatException; 
import opennlp.tools.util.Span; 

public class NameFinder { 

    public String nameFind(String inputText){ 

     String finalNames = ""; 
     try { 

      TokenNameFinderModel tokenNameFinderModel = new TokenNameFinderModel(new FileInputStream("D://NISUM_OFFICIAL_WORKSPACE//opennlp//src//models//en-ner-personName.bin")); 
      NameFinderME nameFinderME = new NameFinderME(tokenNameFinderModel); 
      Tokenization tokenize = new Tokenization(); 
      String[] tokens = tokenize.tokenization(inputText); 
      Span drugSp[] = nameFinderME.find(tokens); 
      String [] sp = Span.spansToStrings(drugSp, tokens); 
      StringBuilder string = new StringBuilder(); 
      if(sp.length!=0){ 
       for(int i=0;i<=sp.length;i++){ 
        string = string.append(sp[i]+"\n"); 
       } 
       finalNames = string.toString(); 
      } 
     } catch (InvalidFormatException e) { 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return finalNames; 
    } 

} 

, но после выполнения выше программы я получаю ниже исключение на консоль, как упоминалось:

Could not instantiate the opennlp.tools.namefind.TokenNameFinderFactory. The initialization throw an exception. 
opennlp.tools.util.ext.ExtensionNotLoadedException: Unable to find implementation for opennlp.tools.util.BaseToolFactory, the class or service opennlp.tools.namefind.TokenNameFinderFactory could not be located! 
    at opennlp.tools.util.ext.ExtensionLoader.instantiateExtension(ExtensionLoader.java:97) 
    at opennlp.tools.util.BaseToolFactory.create(BaseToolFactory.java:106) 
    at opennlp.tools.util.model.BaseModel.initializeFactory(BaseModel.java:254) 
    at opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:237) 
    at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181) 
    at opennlp.tools.namefind.TokenNameFinderModel.<init>(TokenNameFinderModel.java:110) 
    at com.naimesh.opennlp.DrugNameFinder.drugNameFind(DrugNameFinder.java:19) 
    at com.naimesh.opennlp.TextFinder.main(TextFinder.java:18) 
Exception in thread "main" java.lang.IllegalArgumentException: opennlp.tools.util.InvalidFormatException: Could not instantiate the opennlp.tools.namefind.TokenNameFinderFactory. The initialization throw an exception. 
    at opennlp.tools.util.model.BaseModel.initializeFactory(BaseModel.java:256) 
    at opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:237) 
    at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181) 
    at opennlp.tools.namefind.TokenNameFinderModel.<init>(TokenNameFinderModel.java:110) 
    at com.naimesh.opennlp.DrugNameFinder.drugNameFind(DrugNameFinder.java:19) 
    at com.naimesh.opennlp.TextFinder.main(TextFinder.java:18) 
Caused by: opennlp.tools.util.InvalidFormatException: Could not instantiate the opennlp.tools.namefind.TokenNameFinderFactory. The initialization throw an exception. 
    at opennlp.tools.util.BaseToolFactory.create(BaseToolFactory.java:117) 
    at opennlp.tools.util.model.BaseModel.initializeFactory(BaseModel.java:254) 
    ... 5 more 
Caused by: opennlp.tools.util.ext.ExtensionNotLoadedException: Unable to find implementation for opennlp.tools.util.BaseToolFactory, the class or service opennlp.tools.namefind.TokenNameFinderFactory could not be located! 
    at opennlp.tools.util.ext.ExtensionLoader.instantiateExtension(ExtensionLoader.java:97) 
    at opennlp.tools.util.BaseToolFactory.create(BaseToolFactory.java:106) 
    ... 6 more 

Пожалуйста, кто-то может мне помочь по этому вопросу я много пробовал и читал блоги, но не мог найти что-то полезное. Это будет действительно оценено, если кто-то может дать полезное решение.

ответ

1

Это потому, что вы обучили и создали свою модель model.bin, используя другую версию opennlp say (1.6.0), и вы используете в своем коде слово 1.5.3, эта ошибка возникает из-за использования моделей обученных с использованием другой версии. проверьте, какую версию opennlp вы используете в коде (проверьте .classpath)

Надеюсь, это поможет! ура!

 Смежные вопросы

  • Нет связанных вопросов^_^