in opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorEvaluatorTool.java [71:145]
public void run(String format, String[] args) {
super.run(format, args);
LanguageDetectorModel model = new LanguageDetectorModelLoader().load(params.getModel());
List<EvaluationMonitor<LanguageSample>> listeners = new LinkedList<>();
if (params.getMisclassified()) {
listeners.add(new LanguageDetectorEvaluationErrorListener());
}
LanguageDetectorFineGrainedReportListener reportListener = null;
File reportFile = params.getReportOutputFile();
OutputStream reportOutputStream = null;
if (reportFile != null) {
CmdLineUtil.checkOutputFile("Report Output File", reportFile);
try {
reportOutputStream = new FileOutputStream(reportFile);
reportListener = new LanguageDetectorFineGrainedReportListener(reportOutputStream);
listeners.add(reportListener);
} catch (FileNotFoundException e) {
throw new TerminateToolException(-1,
"IO error while creating LanguageDetector fine-grained report file: "
+ e.getMessage());
}
}
LanguageDetectorEvaluator evaluator = new LanguageDetectorEvaluator(
new LanguageDetectorME(model),
listeners.toArray(new LanguageDetectorEvaluationMonitor[0]));
final PerformanceMonitor monitor = new PerformanceMonitor("doc");
try (ObjectStream<LanguageSample> measuredSampleStream = new ObjectStream<>() {
@Override
public LanguageSample read() throws IOException {
monitor.incrementCounter();
return sampleStream.read();
}
@Override
public void reset() throws IOException {
sampleStream.reset();
}
@Override
public void close() throws IOException {
sampleStream.close();
}
}) {
monitor.startAndPrintThroughput();
evaluator.evaluate(measuredSampleStream);
} catch (IOException e) {
throw new TerminateToolException(-1, "IO error while reading test data: "
+ e.getMessage(), e);
}
// sorry that this can fail
monitor.stopAndPrintFinalResult();
logger.info(evaluator.toString());
if (reportListener != null) {
logger.info("Writing fine-grained report to {}",
params.getReportOutputFile().getAbsolutePath());
reportListener.writeReport();
try {
reportOutputStream.flush();
reportOutputStream.close();
} catch (IOException e) {
// nothing to do
}
}
}