我试图像这样使用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)
我无法弄清楚如何摆脱这种异常。
答案 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类的版本。因此,第一种选择是最简单的解决方案。