2015-12-24 2 views
2

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(); 
     }  
    } 

Но в этом новом коде я не знаю, где получить мой файл данных корпуса. Любая идея?

+0

http://www.programcreek.com/java-api-examples/index.php?api=opennlp.tools.util. InputStreamFactory – giorgio79

ответ

1

Вы должны инициализировать inputStreamFactory с нужным файлом данных, используйте

inputStreamFactory = new MarkableFileInputStreamFactory(
     new File("en-sent.train")); 
Смежные вопросы