所以我试图在Android Studio中使用OpenNLP,但是我的应用程序总是在OpenNLP在其XmlUtil类中使用的代码体中抛出ParserConfigurationException
,我无法修改它: / p>
public static DocumentBuilder createDocumentBuilder() {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
return documentBuilderFactory.newDocumentBuilder();
} catch (ParserConfigurationException var1) {
throw new IllegalStateException(var1);
}
}
documentBuilderFactory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
会导致应用程序抛出ParserConfigurationException
。
现在已经坚持了一个星期而且没有运气,有关如何解决此错误的任何提示?
答案 0 :(得分:1)
事实证明,使用给定的网址" http://javax.xml.XMLConstants/feature/secure-processing"对应于XMLConstants.FEATURE_SECURE_PROCESSING - >当XMLUtils类使用它来设置documentBuilderFactory的功能时 - >它将始终抛出异常,因为由于某种原因无法识别此XMLConstant。
为了解决这个问题,并且因为在opennlp-tools-1.8.3.jar文件中使用/抓取XMLUtil.java类是不可修改的:
我需要将opennlp-tools-1.8.3.jar解压缩到它的.class文件,然后使用ClassEditor(一个用于编辑.class文件的程序)来更改正在设置的功能:
我将XMLUtil.java文件中的功能值更改为另一个不会导致此函数抛出异常的值:
public static DocumentBuilder createDocumentBuilder() {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
return documentBuilderFactory.newDocumentBuilder();
} catch (ParserConfigurationException var1) {
throw new IllegalStateException(var1);
}
}
这允许我解决以前不可修改的XMLUtil.java文件,现在documentBuilderFactory.setFeature不会抛出异常,允许我在OpenNLP库中使用稍微修改过的代码!
答案 1 :(得分:0)
使用OpenNLP 1.9.1版时,我遇到了同样的问题,我改用了版本1.6.0 解决了这个问题。这是我设法开始使用的最新版本。
dependencies {
implementation 'org.apache.opennlp:opennlp-tools:1.6.0'
}
降级是无缝的,因为模型是相同的,并且公共API非常相似(至少供我使用)。
完整的故事:我正在使用OpenNLP制作一个prototype,以使用TokenizerME
和两个NameFinderME
来表示人员和位置。这些是我尝试过(但失败了)的所有OpenNLP版本:
ParserConfigurationException
而失败OutOfMemoryError
崩溃答案 2 :(得分:0)
@Keaton MacLeod 的回答也对我有用,但我没有修改类文件,而是在克隆他们的源代码库并重建所需的 jar 文件后编辑了 XmlUtil.java 文件。评论或删除 this line 和 this one。按照 their build instructions 构建 opennlp 项目 将生成的 jar 添加到您的项目中,它应该可以按预期工作