0

我从斯坦福 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 年的解析器版本(仍然不确定这里使用了哪些版本)。使用较新的模型文件解决了问题,很抱歉打扰您。

4

0 回答 0