我正在尝试执行OpenNLP模型,我已经为我的定制名称进行了培训。我执行了以下命令来创建自定义模型:
opennlp TokenNameFinderTrainer -encoding UTF-8 -lang en -data c:\Users\nshah\Desktop\en Desktop. -model en-ner-personName.bin
我能够成功地创建名为en-ner-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请有人在这个问题上帮助我,我尝试了很多东西和阅读博客,但找不到有用的东西。如果有人能给出有用的解决方案,那将是非常感谢的。
发布于 2016-05-23 10:05:21
这是因为您已经使用opennlp (1.6.0)的不同版本训练和创建了模型model.bin,而且在代码中使用的是1.5.3,这是因为使用了使用不同版本培训的模型。检查代码中使用的opennlp版本(检查.classpath)
希望这能有所帮助!干杯!
https://stackoverflow.com/questions/35208252
复制相似问题