当前位置: 首页 > 知识库问答 >
问题:

在OpenNLP中使用自定义NER模型时,如何处理“ExtensionNotLoadedException”?

冯嘉珍
2023-03-14

我正在尝试执行OpenNLP模型,我已经为我的自定义名称进行了培训。我执行以下命令来制作定制模型:

OpenNLP TokenNameFinderTrainer-编码UTF-8-lang en-data c:\用户\nshah\桌面\en-ner-person.train-model en-ner-PERName.bin

我能够成功创建名为en-ner personName的模型。箱子

现在我正在尝试执行我的程序如下:

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个答案

乐正育
2023-03-14

这是因为您已经训练并创建了您的模型model.bin使用不同版本的opennlp say(1.6.0)并且您在代码中使用say 1.5.3,由于使用使用不同版本训练的模型而发生此错误。检查您在代码中使用的opennlp版本(检查. classpath)

希望这有帮助!干杯!

 类似资料:
  • 我们有一个报告编写工具,我们正在尝试添加搜索功能。基本上,用户可以输入一个问题,并根据句子中的标准返回一份报告。我们正在尽可能地保持开放性,不需要特定的句子结构,这就是为什么我们想尝试OpenNLP-NER。 例如: “上季度的艺术出勤率是多少?” 标记为: 我们试着用不同的部门,不同的过滤器等提出不同的问题。。我们还没有达到15k,只有14.6k,所以我们还在努力。 就分析问题而言,这是问题的开

  • 我试图使用OpenNLPJavaAPI从文档中提取名称、技能等实体。但它没有提取正确的名称。我使用opennlp源锻造链接上可用的模型 下面是一段java代码- 我想做的是: 我正在使用ApacheTika将PDF文档转换为纯文本文档 但它正在提取姓名和其他单词。它不是提取专有名称。如何创建自定义模型,从文档中提取游泳、编程等技能? 给我一些想法! 任何帮助都将不胜感激!?

  • 我正在尝试为多个实体训练自定义NER模型。以下是示例训练数据: 方法采用字符串参数。这个参数有什么用途?还有,我如何为多个实体(例如,在我的例子中,,,)训练一个模型 }

  • 我是NLP领域的新手,正在使用入门。 我在这里看了一些留档中给出的命令:https://opennlp.apache.org/documentation/manual/opennlp.html (我正在使用命令行界面开始) 我使用已经可用的示例模型来试验不同的工具,最后决定创建一个自定义NER模型。 我遵循了上述链接中给出的说明。 将给出的例句复制到文件(我只是创建了一个具有该扩展名的新文件,并将

  • 大家已经提到了这个,这个,这个和这个,但是仍然发现很难建立一个自定义的名字查找器模型。。以下是代码: 我在尝试执行命令行时不断出现错误: 让我把论点1改为 然后我收到一个运行时错误,说你不能强制转换这个。这是我在线程“main”中强制转换 第二个问题是: 给出一个语法错误。不确定这里出了什么问题。如果有任何帮助,我将不胜感激,因为我已经尝试了上述链接上的所有代码片段。 祝好

  • 我想使用Apache OpenNLP为我的母语乌尔都语训练NER模型。我已经准备好了中的训练数据。制作训练模型(. bin)的下一步是什么,就像我们在模型下载部分的OpenNLP站点上找到的那样。