in opennlp-coref/src/main/java/opennlp/tools/coref/resolver/MaxentResolver.java [262:329]
public DiscourseEntity retain(MentionContext mention, DiscourseModel dm) {
if (ResolverMode.TRAIN == mode) {
DiscourseEntity de = null;
boolean referentFound = false;
boolean hasReferentialCandidate = false;
boolean nonReferentFound = false;
for (int ei = 0; ei < getNumEntities(dm); ei++) {
DiscourseEntity cde = dm.getEntity(ei);
MentionContext entityMention = cde.getLastExtent();
if (outOfRange(mention, cde)) {
if (mention.getId() != -1 && !referentFound) {
// what is or was 'ec' here?
// logger.debug("Referent out of range: {} {}", ec.toText(), ec.parse.getSpan());
}
break;
}
if (excluded(mention, cde)) {
if (showExclusions) {
if (mention.getId() != -1 && entityMention.getId() == mention.getId()) {
logger.debug("Referent excluded: ({}) {} {} -> ({}) {} {}", mention.getId(), mention.toText(),
mention.getIndexSpan(), entityMention.getId(), entityMention.toText(), entityMention.getSpan());
}
}
}
else {
hasReferentialCandidate = true;
boolean useAsDifferentExample = defaultReferent(cde);
//if (!sampleSelection || (mention.getId() != -1 && entityMention.getId() == mention.getId())
// || (!nonReferentFound && useAsDifferentExample)) {
List<String> features = getFeatures(mention, cde);
// add Event to Model
if (DEBUG) {
logger.debug("Retain: {} {} -> {} {}", mention.getId(), mention.toText(), entityMention.getId(), cde);
}
if (mention.getId() != -1 && entityMention.getId() == mention.getId()) {
referentFound = true;
events.add(new Event(SAME, features.toArray(new String[0])));
de = cde;
logger.debug("Retain: resolved at {}", ei);
// incrementing count for key 'ei'
distances.merge(ei, 1, Integer::sum);
}
else if (!pairedSampleSelection || (!nonReferentFound && useAsDifferentExample)) {
nonReferentFound = true;
events.add(new Event(DIFF, features.toArray(new String[0])));
}
//}
}
if (pairedSampleSelection && referentFound && nonReferentFound) {
break;
}
if (preferFirstReferent && referentFound) {
break;
}
}
// doesn't refer to anything
if (hasReferentialCandidate) {
nonReferentialResolver.addEvent(mention);
}
return de;
}
else {
return super.retain(mention, dm);
}
}