gpt4 book ai didi

java - Apache OpenNLP : java. io.FileInputStream 无法转换为 opennlp.tools.util.InputStreamFactory

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:14 24 4
gpt4 key购买 nike

我正在尝试使用 Apache OpenNLP 1.7 构建自定义 NER。来自可用文档 Here ,我开发了如下代码

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;

import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.NameSample;
import opennlp.tools.namefind.NameSampleDataStream;
import opennlp.tools.namefind.TokenNameFinderFactory;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.util.ObjectStream;
import opennlp.tools.util.PlainTextByLineStream;
import opennlp.tools.util.TrainingParameters;

public class PersonClassifierTrainer {

static String modelFile = "/opt/NLP/data/en-ner-customperson.bin";

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

Charset charset = Charset.forName("UTF-8");
**ObjectStream<String> lineStream = new PlainTextByLineStream(new FileInputStream("/opt/NLP/data/person.train"), charset);**
ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);

TokenNameFinderModel model;
TokenNameFinderFactory nameFinderFactory = null;

try {
model = NameFinderME.train("en", "person", sampleStream, TrainingParameters.defaultParams(),
nameFinderFactory);
} finally {
sampleStream.close();
}

BufferedOutputStream modelOut = null;

try {
modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
model.serialize(modelOut);
} finally {
if (modelOut != null)
modelOut.close();
}
}
}

上面突出显示的代码显示 - 'Cast argument 'file' to 'insputstreamfactory'

我不得不强制转换它,否则它会显示错误。

现在,当我运行我的代码时,出现以下错误

java.io.FileInputStream cannot be cast to opennlp.tools.util.InputStreamFactory

这里有什么遗漏吗?

编辑 1:Person.train 文件有这个数据

<START:person> Hardik <END> is a software Professional.<START:person> Hardik works at company<END> and <START:person> is part of development team<END>. <START:person> Hardik<END> lives in New York
<START:person> Hardik<END> loves R statistical software
<START:person> Hardik<END> is a student at ISB
<START:person> Hardik<END> loves nature

Edit2:我现在遇到空指针异常,有什么帮助吗?

最佳答案

您需要一个 InputStreamFactory 实例,它将检索您的 InputStream。此外,TokenNameFinderFactory 不能为 null

public class PersonClassifierTrainer {

static String modelFile = "/opt/NLP/data/en-ner-customperson.bin";

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

InputStreamFactory isf = new InputStreamFactory() {
public InputStream createInputStream() throws IOException {
return new FileInputStream("/opt/NLP/data/person.train");
}
};

Charset charset = Charset.forName("UTF-8");
ObjectStream<String> lineStream = new PlainTextByLineStream(isf, charset);
ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);

TokenNameFinderModel model;
TokenNameFinderFactory nameFinderFactory = new TokenNameFinderFactory();

try {
model = NameFinderME.train("en", "person", sampleStream, TrainingParameters.defaultParams(),
nameFinderFactory);
} finally {
sampleStream.close();
}

BufferedOutputStream modelOut = null;

try {
modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
model.serialize(modelOut);
} finally {
if (modelOut != null)
modelOut.close();
}
}
}

编辑 1:Person.train 文件有这个数据

<START:person> Hardik <END> is a software Professional.<START:person> Hardik works at company<END> and <START:person> is part of development team<END>. <START:person> Hardik<END> lives in New York
<START:person> Hardik<END> loves R statistical software
<START:person> Hardik<END> is a student at ISB
<START:person> Hardik<END> loves nature

关于java - Apache OpenNLP : java. io.FileInputStream 无法转换为 opennlp.tools.util.InputStreamFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com