Im пытается использовать Oficial сайт OpenNLP вручную, например, чтобы подготовить новую модель, вот пример:OpenNLP предложение учебный пример
Charset charset = Charset.forName("UTF-8");
ObjectStream lineStream = new PlainTextByLineStream(new FileInputStream("en-sent.train"), charset);
ObjectStream sampleStream = new SentenceSampleStream(lineStream);
SentenceModel model;
try {
model = SentenceDetectorME.train("en", sampleStream, true, null, TrainingParameters.defaultParams());
} finally {
sampleStream.close();
}
OutputStream modelOut = null;
try {
modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
model.serialize(modelOut);
} finally {
if (modelOut != null)
modelOut.close();
}
Проблема заключается в 2º линии,
ObjectStream lineStream = new PlainTextByLineStream(new FileInputStream("en-sent.train"), charset);
помогите сказать мне: Устаревший. Вместо этого используйте PlainTextByLineStream (InputStreamFactory, Charset). Но ... я не знаю, как использовать этот конструктор. Я бы хотел, чтобы этот пример использовал этот конструктор без устаревших данных, используя тот же файл corpus.
Я написал следующий код, используя OpenNLP помощь и 2 способа использовать метод поезда, устаревшие и предложил в док помощи:
Charset charset = Charset.forName("UTF-8");
InputStreamFactory inputStreamFactory=null;
ObjectStream<String> lineStream=null;
ObjectStream<SentenceSample> sampleStream=null;
SentenceModel model=null;
OutputStream modelOut = null;
try{
inputStreamFactory=InputStreamFactory.class.newInstance();
lineStream=new PlainTextByLineStream(inputStreamFactory,charset);
sampleStream = new SentenceSampleStream(lineStream);
//The deprecated:
model = SentenceDetectorME.train("en", sampleStream, true, null, TrainingParameters.defaultParams());
//The sugested:
model = SentenceDetectorME.train("en", sampleStream, new SentenceDetectorFactory(), new TrainingParameters());
} catch (InstantiationException e2){
e2.printStackTrace();
} catch (IllegalAccessException e2){
e2.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}finally {
try{
sampleStream.close();
} catch (IOException e){
e.printStackTrace();
}
}
try {
modelOut = new BufferedOutputStream(new FileOutputStream(new File("modelFile")));
model.serialize(modelOut);
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
if (modelOut != null) try{
modelOut.close();
} catch (IOException e){
e.printStackTrace();
}
}
Но в этом новом коде я не знаю, где получить мой файл данных корпуса. Любая идея?
http://www.programcreek.com/java-api-examples/index.php?api=opennlp.tools.util. InputStreamFactory – giorgio79