目前,我正在尝试在代码中使用经过自定义培训的OpenNLP名称查找器模型。我的项目使用OpenNLP 1.6.0,是使用Eclipse开发的。使用OpenNLP 1.6.0对模型进行了训练。
然而,我得到了这个恼人的错误:
java.lang.IllegalArgumentException : opennlp.tools.util.InvalidFormatException: Model version 1.6.0 is not supported by this (1.5.3) version of OpenNLP!向here提出了一个类似的问题,并回答说,问题是由于OpenNLP模型正在使用与使用中的模型相同的版本进行培训(即使用1.6.0对模型进行培训,并在也使用1.6.0的项目中使用)。不过,我还有其他使用OpenNLP 1.6.0的项目,它们能够成功地加载模型,所以我认为这不适用于我。
我的项目的.classpath还显示该项目引用的是OpenNLP 1.6.0库。
我知道这个问题相当模糊,但是如果有人对为什么会发生这种事有任何见解,请告诉我!
总结:由于明显的OpenNLP版本不兼容,无法在代码中加载经过自定义训练的OpenNLP名称查找器模型。模型在OpenNLP 1.6.0中进行了培训,我的项目也使用了该模型。其他也使用1.6.0的项目能够成功地加载模型。
发布于 2017-01-15 11:09:48
我已经指出了错误的来源--我的项目也在使用ApacheTika1.13库,它包含自己的OpenNLP 1.5.3实现。
因此,类路径包含多个JAR,这些JAR包含它们自己版本的OpenNLP类。
编辑16/1/2017:根据我的发现,加载库的顺序很重要.
请纠正我的错误:在Java (以及其他语言)中,一旦一个依赖组件加载到内存中,那么在默认情况下,即使以后需要另一个版本,也不会再次加载它。
由于这个原因,如果Tika库是在 1.6.0库之前加载的,那么OpenNLP 1.5.3将首先加载,尽管随后加载了1.6.0,程序仍将“坚持”到1.5.3。类似地,如果发生了相反的情况(1.6.0在Tika之前加载),则程序将“坚持”到1.6.0,而不是.。
https://stackoverflow.com/questions/41604271
复制相似问题