features.addAll(this.dateExtractor.extract(jCas, eventMention)); //add the closest NE type
features.addAll(this.umlsExtractor.extract(jCas, eventMention)); //add umls features
// features.addAll(this.durationExtractor.extract(jCas, eventMention)); //add duration feature
// features.addAll(this.disSemExtractor.extract(jCas, eventMention)); //add distributional semantic features
if (this.isTraining()) {
TemporalTextRelation relation = dischargeTimeRelationLookup.get(Arrays.asList(eventMention, admissionTime));
String category = null;
if (relation != null) {
category = relation.getCategory();
} else {
relation = dischargeTimeRelationLookup.get(Arrays.asList(admissionTime, eventMention));
if (relation != null) {
if(relation.getCategory().equals("OVERLAP")){
category = relation.getCategory();
}else if (relation.getCategory().equals("BEFORE")){
category = "AFTER";
}else if (relation.getCategory().equals("AFTER")){
category = "BEFORE";
}
}
}
if(category!=null){
this.dataWriter.write(new Instance<>(category, features));
}
} else {
String outcome = this.classifier.classify(features);
if(outcome!=null){
// add the relation to the CAS
RelationArgument relArg1 = new RelationArgument(jCas);
relArg1.setArgument(eventMention);
relArg1.setRole("Argument");
relArg1.addToIndexes();
RelationArgument relArg2 = new RelationArgument(jCas);
relArg2.setArgument(admissionTime);
relArg2.setRole("Related_to");
relArg2.addToIndexes();
TemporalTextRelation relation = new TemporalTextRelation(jCas);
relation.setArg1(relArg1);
relation.setArg2(relArg2);
relation.setCategory(outcome);
relation.addToIndexes();
}else{
System.out.println("cannot classify "+ eventMention.getCoveredText()+" and " + admissionTime.getCoveredText());
}
}
}