in opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderEvaluatorTool.java [77:148]
public void run(String format, String[] args) {
super.run(format, args);
TokenNameFinderModel model = new TokenNameFinderModelLoader().load(params.getModel());
List<EvaluationMonitor<NameSample>> listeners = new LinkedList<>();
if (params.getMisclassified()) {
listeners.add(new NameEvaluationErrorListener());
}
TokenNameFinderFineGrainedReportListener 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 TokenNameFinderFineGrainedReportListener(model.getSequenceCodec(),
reportOutputStream);
listeners.add(reportListener);
} catch (FileNotFoundException e) {
throw new TerminateToolException(-1,
"IO error while creating Name Finder fine-grained report file: "
+ e.getMessage());
}
}
if (params.getNameTypes() != null) {
String[] nameTypes = params.getNameTypes().split(",");
sampleStream = new NameSampleTypeFilter(nameTypes, sampleStream);
}
TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator(
new NameFinderME(model),
listeners.toArray(new TokenNameFinderEvaluationMonitor[0]));
final PerformanceMonitor monitor = new PerformanceMonitor("sent");
try (ObjectStream<NameSample> measuredSampleStream = new ObjectStream<>() {
@Override
public NameSample 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();
if (reportFile != null) {
reportListener.writeReport();
}
logger.info(evaluator.getFMeasure().toString());
}