猿问

opennlp.tools.postag.POSTaggerME.train()

也有同样的问题!我得到InputSteram = null,我使用 IntelliJ IDEA、OpenNLP 1.9.1。在 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...");

}



MMTTMM
浏览 96回答 2
2回答

茅侃侃

如果getResourceAsStream返回null,则表示未找到该资源。您应该检查null并执行其他操作,例如抛出异常(IOException或者FileNotFoundException在本例中,因为声明IOException允许子类throws) - 您不应该让它传递null给代码的其余部分。NLPClassifier.class.getResourceAsStream("/home/int/src/main/resources/en-pos.txt")不起作用,因为资源与 Java 包具有相同的结构,只不过点被替换为斜线。它不是文件系统中的路径。将其更改为:(getResourceAsStream("/en-pos.txt")因为您的文件位于包层次结构的根目录)

慕容森

我更改了我的代码,正如 Erwin Bolwidt 所说:    /** I commented this part    return NLPClassifier.class.getResourceAsStream("/home/interceptor/src/main/resources/en-pos.txt");    */    /**     Add this location of my resoures:     /Project/src/main/resources    */    return getClass().getClassLoader().getResourceAsStream("en-pos.txt");之后,我发现 Apache OpenNLP: java.io.FileInputStream无法转换为 opennlp.tools.util.InputStreamFactory,有类似的问题,但使用其他方法。@schrieveslaach 说您需要一个InputStreamFactory 实例来检索您的InputStream。此外,TokenNameFinderFactory 不能为 null!像这样posFactory - 不能为空!   /**     *  Factory must not be a null. Add posModel.getFactory()     *  model = POSTaggerME.train("en", sampleStream, TrainingParameters.defaultParams(), null);     */     model = POSTaggerME.train("en", sampleStream, TrainingParameters.defaultParams(), posModel.getFactory());仓库中项目的完整代码 https://github.com/AlexTitovWork/NLPclassifier
随时随地看视频慕课网APP

相关分类

Java
我要回答