package edu.stanford.nlp.coref;
import edu.stanford.nlp.io.RuntimeIOException;
import edu.stanford.nlp.util.StringUtils;
import edu.stanford.nlp.util.logging.Redwood;
import junit.framework.TestCase;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.*;
public class CorefBenchmark extends TestCase {
// coref system
public static CorefSystem corefSystem;
// properties for test
public static Properties props;
// temp working directory path
public static File WORK_DIR_FILE;
// test specific values
protected static Redwood.RedwoodChannels logger;
public double EXPECTED_F1_SCORE;
public String PROPERTIES_PATH;
public String WORK_DIR_NAME;
public String testName;
public void setUp() throws Exception, IOException {
// set up working dir
WORK_DIR_FILE = File.createTempFile(WORK_DIR_NAME, "");
if ( ! (WORK_DIR_FILE.delete() && WORK_DIR_FILE.mkdir())) {
throw new RuntimeIOException("Couldn't create temp directory " + WORK_DIR_FILE);
}
WORK_DIR_FILE.delete();
WORK_DIR_FILE.mkdir();
WORK_DIR_FILE.deleteOnExit();
// settings for coref
String[] corefArgs = { "-props", PROPERTIES_PATH};
props = StringUtils.argsToProperties(corefArgs);
props.setProperty("coref.conllOutputPath", WORK_DIR_FILE.getAbsolutePath()+"/");
// build CorefSystem
corefSystem = new CorefSystem(props);
}
public void testCoref() throws Exception {
// run CorefSystem
corefSystem.runOnConll(props);
// get final score
double finalConllScore =
CorefScorer.getFinalConllScoreFromOutputDir(
WORK_DIR_FILE.getAbsolutePath()+"/",CorefProperties.getScorerPath(props));
logger.log("---");
logger.log(testName);
logger.log(
"Final conll score ((muc+bcub+ceafe)/3) = " + (
new DecimalFormat("#.##")).format(finalConllScore));
// test score is sufficient
assertTrue("CoNLL score below threshold: "+finalConllScore+" < " + EXPECTED_F1_SCORE,
finalConllScore >= EXPECTED_F1_SCORE);
}
}