为了账号安全,请及时绑定邮箱和手机立即绑定

opennlp.tools.postag.POSTaggerME.train()

opennlp.tools.postag.POSTaggerME.train()

MMTTMM 2024-01-25 22:01:11
也有同样的问题!我得到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...");}
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

如果getResourceAsStream返回null,则表示未找到该资源。

您应该检查null并执行其他操作,例如抛出异常(IOException或者FileNotFoundException在本例中,因为声明IOException允许子类throws) - 您不应该让它传递null给代码的其余部分。

NLPClassifier.class.getResourceAsStream("/home/int/src/main/resources/en-pos.txt")不起作用,因为资源与 Java 包具有相同的结构,只不过点被替换为斜线。它不是文件系统中的路径。

将其更改为:(getResourceAsStream("/en-pos.txt")因为您的文件位于包层次结构的根目录)


查看完整回答
反对 回复 2024-01-25
?
慕容森

TA贡献1853条经验 获得超18个赞

我更改了我的代码,正如 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


查看完整回答
反对 回复 2024-01-25
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信