package edu.stanford.nlp.time;
import java.util.Properties;
import edu.stanford.nlp.ling.tokensregex.Env;
import edu.stanford.nlp.util.PropertiesUtils;
/**
* Various options for using time expression extractor
*
* @author Angel Chang
*/
public class Options {
public enum RelativeHeuristicLevel { NONE, BASIC, MORE }
// Whether to mark time ranges like from 1991 to 1992 as one timex
// or leave it separate
public boolean markTimeRanges = false;
// Whether include non timex3 temporal expressions
boolean restrictToTimex3 = false;
// Heuristics for determining relative time
// level 1 = no heuristics (default)
// level 2 = basic heuristics taking into past tense
// level 3 = more heuristics with since/until
RelativeHeuristicLevel teRelHeurLevel = RelativeHeuristicLevel.NONE;
// Include nested time expressions
boolean includeNested = false;
// Create range for all temporals and include range attribute in timex annotation
boolean includeRange = false;
// Look for document date in the document text (if not provided)
boolean searchForDocDate = false;
// TODO: Add default country for holidays and default time format
// would want a per document default as well
String grammarFilename = null;
Env.Binder[] binders = null;
static final String DEFAULT_GRAMMAR_FILES = "edu/stanford/nlp/models/sutime/defs.sutime.txt,edu/stanford/nlp/models/sutime/english.sutime.txt,edu/stanford/nlp/models/sutime/english.holidays.sutime.txt";
static final String[] DEFAULT_BINDERS = { "edu.stanford.nlp.time.JollyDayHolidays" };
//static final String[] DEFAULT_BINDERS = { };
boolean verbose = false;
public Options()
{
}
public Options(String name, Properties props)
{
includeRange = PropertiesUtils.getBool(props, name + ".includeRange",
includeRange);
markTimeRanges = PropertiesUtils.getBool(props, name + ".markTimeRanges",
markTimeRanges);
includeNested = PropertiesUtils.getBool(props, name + ".includeNested",
includeNested);
restrictToTimex3 = PropertiesUtils.getBool(props, name + ".restrictToTimex3",
restrictToTimex3);
teRelHeurLevel = RelativeHeuristicLevel.valueOf(
props.getProperty(name + ".teRelHeurLevel",
teRelHeurLevel.toString()));
verbose = PropertiesUtils.getBool(props, name + ".verbose", verbose);
grammarFilename = props.getProperty(name + ".rules", DEFAULT_GRAMMAR_FILES);
searchForDocDate = PropertiesUtils.getBool(props, name + ".searchForDocDate", searchForDocDate);
String binderProperty = props.getProperty(name + ".binders");
int nBinders;
String[] binderClasses;
if (binderProperty == null) {
nBinders = DEFAULT_BINDERS.length;
binderClasses = DEFAULT_BINDERS;
} else {
nBinders = PropertiesUtils.getInt(props, name + ".binders", 0);
binderClasses = new String[nBinders];
for (int i = 0; i < nBinders; ++i) {
String binderPrefix = name + ".binder." + (i + 1);
binderClasses[i] = props.getProperty(binderPrefix);
}
}
if (nBinders > 0 && System.getProperty("STS") == null) {
binders = new Env.Binder[nBinders];
for (int i = 0; i < nBinders; i++) {
int bi = i+1;
String binderPrefix = name + ".binder." + bi;
try {
Class binderClass = Class.forName(binderClasses[i]);
binderPrefix = binderPrefix + ".";
binders[i] = (Env.Binder) binderClass.newInstance();
binders[i].init(binderPrefix, props);
} catch (Exception ex) {
throw new RuntimeException("Error initializing binder " + bi, ex);
}
}
}
}
}