繁体   English   中英

OpenNLP-此(1.5.3)版本的OpenNLP不支持模型版本1.6.0

[英]OpenNLP - Model version 1.6.0 not supported by this (1.5.3) version of OpenNLP

我目前正在尝试在代码中使用经过定制训练的OpenNLP名称查找器模型。 我的项目使用OpenNLP 1.6.0,并且是使用Eclipse IDE开发的。 该模型还使用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!

在这里提出一个类似的问题,答案表明该问题是由于使用与使用的版本相同的版本来训练OpenNLP模型(即使用1.6.0训练模型并在也使用1.6的项目中使用该模型。 0)。 但是,我还有其他使用OpenNLP 1.6.0的Java项目,它们能够成功加载模型,所以我认为这不适用于我。

我的项目的.classpath也显示该项目正在引用OpenNLP 1.6.0库。

我知道这个问题比较模糊,但是如果有人对为什么会发生这种情况有任何见解,请告诉我!

总结:由于明显的OpenNLP版本不兼容,无法在代码中加载经过定制的经过培训的OpenNLP Name Finder模型。 我的项目也使用OpenNLP 1.6.0对模型进行了训练。 同样使用1.6.0的其他项目也能够成功加载模型。

我已经查明了错误的根源-我的项目也正在使用Apache Tika 1.13库,该库包含自己的OpenNLP 1.5.3实现。

结果,类路径包含多个JAR,这些JAR包含自己的OpenNLP类版本。

编辑2017年1月1日:根据我的发现,加载库的顺序很重要。

如果我错了,请纠正我:在Java(以及其他语言)中,一旦依赖项组件已加载到内存中,则默认情况下,即使以后需要另一个版本,也不会再次加载它。

因此,如果Tika库在OpenNLP 1.6.0库之前加载,则OpenNLP 1.5.3将首先加载,并且尽管随后加载了1.6.0,程序仍将“粘贴”到1.5.3。 同样,如果发生相反的情况(在Tika之前加载1.6.0),程序将改为“粘贴”到1.6.0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM