使用openNLP chunker时出错

时间:2014-02-17 03:42:15

标签: gate

我试图像这样使用openNLP chunker:

Gate.getCreoleRegister().registerDirectories( new File(Gate.getGateHome().getAbsolutePath()
                                         + "/plugins/OpenNLP").toURI().toURL());
ProcessingResource chunkPr = (ProcessingResource) Factory.createResource("gate.opennlp.OpenNlpChunker", Factory.newFeatureMap());
annieController.add(chunkPr);

但是我得到以下例外:

Exception in thread "main" java.lang.NoSuchMethodError: opennlp.maxent.io.BinaryGISModelReader.getModel()Lopennlp/maxent/GISModel;
at gate.opennlp.OpenNlpChunker.getModel(OpenNlpChunker.java:59)
at gate.opennlp.OpenNlpChunker.init(OpenNlpChunker.java:190)

我无法弄清楚如何摆脱这种异常。

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决它。

<强>第一

切换到稍后的GATE版本。在最新的门构建中,它工作得很好。我用gate-7.2-SNAPSHOT-build4745-ALL测试了它。你可以从Jenkins continuous integration server取一个。我没有测试latest stable release,但我确信它也可以帮助你。

<强>第二

如果您受到现有版本GATE的限制(我猜它类似于5.1 ... 6) 使事情变得更加复杂。

如果你在GATE安装中有OpenNLPPlugun的源代码,只需使用Ant重建插件。你会在$ GATE_HOME $ / plugins / OpenNLP文件夹中找到Ant的build.xml。

第3名(最糟糕的情况。如果第1和第2路没有帮助):

通常,您必须在两个(或更多!)不同版本的OpenNLP库之间解决依赖冲突。

问题是你的OpenNLPChunker是来自Ontotext的GATE处理资源的旧版本。它取决于opennlp.maxent.io.BinaryGISModelReader类的特定版本。如果没有关于GATE配置的详细信息,很难准确说出计算机上发生了什么。但事情通常以下列方式发生:

在运行时,类路径中有多个版本的OpenNLP库。一些额外的插件或其他模块依赖于OpenNLP库。 (它不必是GATE的插件,但它在Java类路径中呈现)该插件(或任何代码)将另一个版本的opennlp.maxent.io.BinaryGISModelReader类作为依赖项加载。之后,您正在尝试加载OpenNLPChunker,它获取opennlp.maxent.io.BinaryGISModelReader类的错误版本(已由ClassLoader加载)。在尝试调用“getModel()”方法期间,您将获得NoSuchMethodError异常。您必须确保只有一个OpenNLP库。

PS:

OpenNLPChunker由Ian Roberts在更高版本的GATE中重写,并不依赖于opennlp.maxent.io.BinaryGISModelReader类的版本。因此,第一种选择是最简单的解决方案。