Java 在Stanford CoreNLP中使用NERClassifierCombiner时出现空指针异常

Java 在Stanford CoreNLP中使用NERClassifierCombiner时出现空指针异常,java,stanford-nlp,Java,Stanford Nlp,我在CoreNLP中使用NERClassifierCombiner来组合RegexNERSequenceClassifier和CRFClassizer import edu.stanford.nlp.ie.ClassifierCombiner; import edu.stanford.nlp.ie.NERClassifierCombiner; import edu.stanford.nlp.ie.crf.CRFClassifier; import edu.stanford.nlp.ie.rege

我在CoreNLP中使用NERClassifierCombiner来组合RegexNERSequenceClassifier和CRFClassizer

import edu.stanford.nlp.ie.ClassifierCombiner;
import edu.stanford.nlp.ie.NERClassifierCombiner;
import edu.stanford.nlp.ie.crf.CRFClassifier;
import edu.stanford.nlp.ie.regexp.RegexNERSequenceClassifier;
import edu.stanford.nlp.io.IOUtils;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        String basePath = "some_base_path";
        String filename = basePath + "input.txt";
        String inputText = IOUtils.slurpFile(filename);

        String mucClassifierPath = basePath +  "english.muc.7class.distsim.crf.ser.gz";
        String connlClassifierPath = basePath + "english.conll.4class.distsim.crf.ser.gz";

        CRFClassifier classifier_muc = CRFClassifier.getClassifier(mucClassifierPath);
        CRFClassifier classifier_connl = CRFClassifier.getClassifier(connlClassifierPath);

        String mappingPath = basePath + "regexner.rules";
        RegexNERSequenceClassifier regexNERSequenceClassifier = new RegexNERSequenceClassifier(mappingPath, true, true, null);

        NERClassifierCombiner combinedNERClassifier = new NERClassifierCombiner(false, false, classifier_connl, classifier_muc, regexNERSequenceClassifier);

        String output = combinedNERClassifer.classifyToString(inputText);
        System.out.println(output);

        return;

    }
}


下面是调用classifyToText方法时引发的异常的堆栈跟踪

Exception in thread "main" java.lang.NullPointerException
    at edu.stanford.nlp.ie.AbstractSequenceClassifier.labels(AbstractSequenceClassifier.java:286)
    at edu.stanford.nlp.ie.ClassifierCombiner.mergeDocuments(ClassifierCombiner.java:334)
    at edu.stanford.nlp.ie.ClassifierCombiner.classify(ClassifierCombiner.java:481)
    at edu.stanford.nlp.ie.NERClassifierCombiner.classifyWithGlobalInformation(NERClassifierCombiner.java:273)
    at edu.stanford.nlp.ie.NERClassifierCombiner.classify(NERClassifierCombiner.java:268)
    at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyObjectBank(AbstractSequenceClassifier.java:481)
    at edu.stanford.nlp.ie.AbstractSequenceClassifier.classify(AbstractSequenceClassifier.java:441)
    at com.company.Main.main(Main.java:27)

PS:我无法使用CoreNLP管道,需要将RegexNER与生产中现有的CRFClassizer合并。

检查AbstractSequenceClassifier上的代码。java:286看起来就像CoreNLP中的一个bug。约翰·鲍尔(又名AngledLuffa)已经修复了它。