2016-02-23 30 views
0

我使用Apache OpenNLP的命令行工具创建了一个模型来识别命名实体。下面的代码使用文件sentences4OpenNLP.txt作为训练集创建模型。加载NER .bin文件时出错,作为openNLP :: Maxent_Entity_Annotator()的模型参数

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 

我从命令行通过将句子传递给标记来测试模型,并且模型似乎运行良好。但是,我无法成功使用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

解决了错误。 R函数openNLP::Maxent_Entity_Annotator与OpenNLP 1.6.0生成的命名实体识别(NER)模型不兼容。使用OpenNLP 1.5.3构建NER模型导致openNLP::Maxent_Entity_Annotator无误地运行。