我使用Apache OpenNLP的命令行工具创建了一个模型来识别命名实体。以下代码使用文件sentences4OpenNLP.txt
作为训练集创建了模型。
opennlp TokenNameFinderTrainer -type maxent -model C:\Users\Documents\en-ner-org.bin -lang en -data C:\Users\Documents\apache-opennlp-1.6.0\sentences4OpenNLP.txt -encoding UTF-8
我通过将句子传递给tag来从命令行测试模型,模型似乎运行良好。但是,我无法成功使用R中的模型。我正在尝试使用以下行来创建组织注释函数。使用相同的代码加载从OpenNLP下载的模型可以正常工作。
modelNER <- "C:/Users/Documents/en-ner-org.bin"
oa <- openNLP::Maxent_Entity_Annotator(language = "en",
kind = "organization",
probs = TRUE,
model = modelNER)
运行上面的代码后,我收到错误消息:
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)
Error in .jnew("opennlp.tools.namefind.TokenNameFinderModel", .jcast(.jnew("java.io.FileInputStream", :
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.loadModel(BaseModel.java:237)
at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181)
at opennlp.tools.namefind.TokenNameFinderModel.<init>(TokenNameFinderModel.java:110)
有关如何修复错误的任何建议都将是一个很大的帮助。提前谢谢。
答案 0 :(得分:0)
解决了错误。 R函数openNLP::Maxent_Entity_Annotator
与OpenNLP 1.6.0生成的命名实体识别(NER)模型不兼容。使用OpenNLP 1.5.3构建NER模型导致openNLP::Maxent_Entity_Annotator
无错误地运行。