我从斯坦福 NLP 工具加载 Parse 模型时遇到问题。我像我应该的那样反序列化模型文件,但是当涉及到二进制语法部分时它失败了,除了这个例外:
Exception in thread "main" java.lang.NullPointerException
at edu.stanford.nlp.parser.lexparser.BinaryGrammar.init(BinaryGrammar.java:216)
at edu.stanford.nlp.parser.lexparser.BinaryGrammar.readObject(BinaryGrammar.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
...
有没有人遇到过类似的错误?可能是什么原因?
编辑:
这里是代码(没什么奇怪的,只是简单的反序列化)。
ObjectInputStream in;
InputStream is = null;
try {
is = aUrl.openStream();
in = new ObjectInputStream(new BufferedInputStream(new GZIPInputStream(is)));
ParserData parserdata = (ParserData) in.readObject();
in.close();
return parserdata;
} catch (ClassNotFoundException e) {
throw new IOException(e);
} finally {
is.close();
}
我不确定我使用的版本,因为我从私人存储库中获取库(就像我做模型一样),但我会检查那里有哪些版本。
编辑2:
检查版本后,我发现我使用了 2011 年的模型和 2012 年的解析器版本(仍然不确定这里使用了哪些版本)。使用较新的模型文件解决了问题,很抱歉打扰您。