in opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceValidator.java [30:69]
public boolean validSequence(int i, String[] inputSequence,
String[] outcomesSequence, String outcome) {
if (outcome.endsWith(BilouCodec.CONTINUE) || outcome.endsWith(BilouCodec.LAST)) {
int li = outcomesSequence.length - 1;
if (li == -1) {
return false;
} else if (outcomesSequence[li].endsWith(BilouCodec.OTHER) ||
outcomesSequence[li].endsWith(BilouCodec.UNIT)) {
return false;
} else if (outcomesSequence[li].endsWith(BilouCodec.LAST) &&
(outcome.endsWith(BilouCodec.CONTINUE) || outcome.endsWith(BilouCodec.LAST))) {
return false;
} else if (outcomesSequence[li].endsWith(BilouCodec.CONTINUE) ||
outcomesSequence[li].endsWith(BilouCodec.START)) {
// if it is continue, we have to check if previous match was of the same type
String previousNameType = NameFinderME.extractNameType(outcomesSequence[li]);
String nameType = NameFinderME.extractNameType(outcome);
if (previousNameType != null || nameType != null) {
if (nameType != null) {
return nameType.equals(previousNameType);
}
return false; // outcomes types are not equal
}
}
}
if (outcomesSequence.length > 0) {
if (outcome.endsWith(BilouCodec.START)
|| outcome.endsWith(BilouCodec.OTHER)
|| outcome.endsWith(BilouCodec.UNIT)) {
return !outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.START)
&& !outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.CONTINUE);
}
}
return true;
}