我尝试这样使用openNLP分块:
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)我想不出如何摆脱这个异常。
发布于 2014-02-18 04:16:51
有两种方法可以解决它。
:
切换到更高的GATE版本。在最新的gate构建中,它工作得很好。我使用gate-7.2-SNAPSHOT-build4745-ALL对其进行了测试。你可以从Jenkins continuous integration server上取一个。我没有测试latest stable release,但我相信它也会对你有帮助。
第二名:
如果你受制于现有的GATE版本(我猜大概是5.1...6),这会让事情变得更加复杂。
如果在GATE安装中有OpenNLPPlugun的源代码,只需使用Ant重新构建插件即可。您可以在$GATE_HOME$/ build.xml /OpenNLP文件夹中找到Ant。
第3位(最坏情况。如果第一种和第二种方法不起作用):
通常,您必须解决两个(或更多)之间依赖关系冲突。不同版本的OpenNLP库。
问题是你的OpenNLPChunker是来自Ontotext的GATE处理资源的非常旧的版本。它取决于特定版本的opennlp.maxent.io.BinaryGISModelReader类。如果没有关于GATE配置的详细信息,很难准确地说出在您的计算机上发生了什么。但事情通常会以以下方式发生:
在运行时,类路径中有多个版本的OpenNLP库。一些附加插件或其他模块依赖于OpenNLP库。插件(或任何代码)加载另一个版本的opennlp.maxent.io.BinaryGISModelReader类作为依赖项。在此之后,您将尝试加载OpenNLPChunker,它获取了错误版本的opennlp.maxent.io.BinaryGISModelReader类(已由ClassLoader加载)。在尝试调用"getModel()“方法的过程中,您得到了NoSuchMethodError异常。您必须确保只有一个OpenNLP库。
PS:
在后来的GATE版本中,Ian Roberts重写了OpenNLPChunker,并且不依赖于opennlp.maxent.io.BinaryGISModelReader类的版本。因此,第一种选择将是最简单的解决方案。
https://stackoverflow.com/questions/21820320
复制相似问题