javanullpointerexceptioninputstreamopennlppos-tagger

opennlp.tools.postag.POSTaggerME.train() java.lang.NullPointerException


There are same problem! I get InputSteram = null, I used IntelliJ IDEA, OpenNLP 1.9.1. on Ubuntu 18.04

    public void makeDataTrainingModel() {
    model = null;
    System.out.println("POS model started");
    //InputStream dataIn = null;
    InputStreamFactory dataIn = null;
    try {
        dataIn = new InputStreamFactory() {
            public InputStream createInputStream() throws IOException {
                return NLPClassifier.class.getResourceAsStream("/home/int/src          
    /main/resources/en-pos.txt");
            }
        };
        //I get null pointer here in dataIn
        ObjectStream<String> lineStream = new PlainTextByLineStream((InputStreamFactory) , "UTF-8");
        ObjectStream<POSSample> sampleStream = new WordTagSampleStream(lineStream);
     **//This train part IS NOT WORK ?**
        model = POSTaggerME.train("en", sampleStream, TrainingParameters.defaultParams(), null);
    } catch (IOException e) {
        // Failed to read or parse training data, training failed
        e.printStackTrace();
    } finally {
        if (dataIn != null) {
           
            System.out.println("InputStreamFactory was not created!");
        }
    }
    System.out.println("POS model done...");
    System.out.println("Success generate model...");
    //write Data model
    OutputStream modelOut = null;
    try {
        String currentDir = new File("").getAbsolutePath();
        modelOut = new BufferedOutputStream(new FileOutputStream(currentDir + "//src//main//resources//example-bad-model.dat"));


        model.serialize(modelOut);
    } catch (IOException e) {
        // Failed to save model
        e.printStackTrace();
    } finally {
        if (modelOut != null) {
            try {
                modelOut.close();
            } catch (IOException e) {
                // Failed to correctly save model.
                // Written model might be invalid.
                e.printStackTrace();
            }
        }
    }
    System.out.println("Model generated and treated successfully...");
}

I get null pointer in inputStream and Error... InputStreamFactory was not created!

    Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:113)
    at     
    opennlp.tools.util.PlainTextByLineStream.reset(PlainTextByLineStream.java:57)
    at opennlp.tools.util.PlainTextByLineStream.<init>   
    (PlainTextByLineStream.java:48)
    at opennlp.tools.util.PlainTextByLineStream.<init>    
   (PlainTextByLineStream.java:39)

   at NLPClassifier.makeDataTrainingModel(NLPClassifier.java:98)
   at NlpProductClassifier.main(NlpProductClassifier.java:39)

Data looks like this:
profit_profit shell_environment 384912_CD bucks_currency
salary_profit finger_body 913964_CD usd_currency
profit_profit faith_law 3726_CD rur_currency
profit_profit game_entertainment 897444_CD dollar_currency
got_buy gift_jewelery 534841_CD rub_currency

**Why the thread does not open and it throw an exception?**

Solution

  • If getResourceAsStream returns null, it means that the resource wasn't found.

    You should check for null and do something else, such as throwing an exception (IOException or FileNotFoundException in this case, since IOException and subclasses are allowed by the throws declaration) - you shouldn't let it pass the null to the rest of your code.

    NLPClassifier.class.getResourceAsStream("/home/int/src/main/resources/en-pos.txt") won't work, because resources have the same structure as Java packages, except that dots are replaced with slashes. It's not a path in the file system.

    Change it to: getResourceAsStream("/en-pos.txt") (because your file is at the root of the package hierarchy)