Stanford nlp CRFClassizer:从流加载模型会出现异常;无效的流标头:1F8B0800“;

Stanford nlp CRFClassizer:从流加载模型会出现异常;无效的流标头:1F8B0800“;,stanford-nlp,Stanford Nlp,我正在尝试从文件加载CRFClassizer模型。这种方式有效: // this works classifier = CRFClassifier.getClassifier("../res/stanford-ner-2018-02-27/classifiers/english.all.3class.distsim.crf.ser.gz"); 当我想使用流时,但是,我得到的流头无效:1F8B0800异常: // this throws an exception String modelReso

我正在尝试从文件加载
CRFClassizer
模型。这种方式有效:

// this works
classifier = CRFClassifier.getClassifier("../res/stanford-ner-2018-02-27/classifiers/english.all.3class.distsim.crf.ser.gz");
当我想使用流时,但是,我得到的
流头无效:1F8B0800
异常:

// this throws an exception
String modelResourcePath = "../res/stanford-ner-2018-02-27/classifiers/english.all.3class.distsim.crf.ser.gz";
BufferedInputStream stream = new BufferedInputStream(new FileInputStream(modelResourcePath));
classifier = CRFClassifier.getClassifier(stream);
例外情况:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 1F8B0800
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1473)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1456)
at edu.stanford.nlp.ie.crf.CRFClassifier.getClassifier(CRFClassifier.java:2890)
at com.sv.research.ner.stanford.StanfordEntityExtractor.<init>(StanfordEntityExtractor.java:34)
at com.sv.research.ner.stanford.StanfordEntityExtractor.main(StanfordEntityExtractor.java:59)

您尝试使用的分类器是通过GZIPInputStream序列化的,从它们的源代码中我可以看到

因此,您可以尝试反序列化它们的序列化方式,如下所示:

BufferedInputStream stream = new BufferedInputStream(new GZIPInputStream(new FileInputStream(modelResourcePath)));

欢呼声

很有魅力,被接受了。我很好奇,将BufferedInputStream放在GZIPInputStream之前还是之后更有意义?
BufferedInputStream stream = new BufferedInputStream(new GZIPInputStream(new FileInputStream(modelResourcePath)));