use of edu.stanford.nlp.dcoref.Dictionaries.Number in project CoreNLP by stanfordnlp.
the class Rules method entityAttributesAgree.
public static boolean entityAttributesAgree(CorefCluster mentionCluster, CorefCluster potentialAntecedent, boolean ignoreGender) {
boolean hasExtraAnt = false;
boolean hasExtraThis = false;
// number
if (!mentionCluster.numbers.contains(Number.UNKNOWN)) {
for (Number n : potentialAntecedent.numbers) {
if (n != Number.UNKNOWN && !mentionCluster.numbers.contains(n)) {
hasExtraAnt = true;
break;
}
}
}
if (!potentialAntecedent.numbers.contains(Number.UNKNOWN)) {
for (Number n : mentionCluster.numbers) {
if (n != Number.UNKNOWN && !potentialAntecedent.numbers.contains(n)) {
hasExtraThis = true;
break;
}
}
}
if (hasExtraAnt && hasExtraThis)
return false;
// gender
hasExtraAnt = false;
hasExtraThis = false;
if (!ignoreGender) {
if (!mentionCluster.genders.contains(Gender.UNKNOWN)) {
for (Gender g : potentialAntecedent.genders) {
if (g != Gender.UNKNOWN && !mentionCluster.genders.contains(g)) {
hasExtraAnt = true;
break;
}
}
}
if (!potentialAntecedent.genders.contains(Gender.UNKNOWN)) {
for (Gender g : mentionCluster.genders) {
if (g != Gender.UNKNOWN && !potentialAntecedent.genders.contains(g)) {
hasExtraThis = true;
break;
}
}
}
}
if (hasExtraAnt && hasExtraThis)
return false;
// animacy
hasExtraAnt = false;
hasExtraThis = false;
if (!mentionCluster.animacies.contains(Animacy.UNKNOWN)) {
for (Animacy a : potentialAntecedent.animacies) {
if (a != Animacy.UNKNOWN && !mentionCluster.animacies.contains(a)) {
hasExtraAnt = true;
break;
}
}
}
if (!potentialAntecedent.animacies.contains(Animacy.UNKNOWN)) {
for (Animacy a : mentionCluster.animacies) {
if (a != Animacy.UNKNOWN && !potentialAntecedent.animacies.contains(a)) {
hasExtraThis = true;
break;
}
}
}
if (hasExtraAnt && hasExtraThis)
return false;
// NE type
hasExtraAnt = false;
hasExtraThis = false;
if (!mentionCluster.nerStrings.contains("O") && !mentionCluster.nerStrings.contains("MISC")) {
for (String ne : potentialAntecedent.nerStrings) {
if (!ne.equals("O") && !ne.equals("MISC") && !mentionCluster.nerStrings.contains(ne)) {
hasExtraAnt = true;
break;
}
}
}
if (!potentialAntecedent.nerStrings.contains("O") && !potentialAntecedent.nerStrings.contains("MISC")) {
for (String ne : mentionCluster.nerStrings) {
if (!ne.equals("O") && !ne.equals("MISC") && !potentialAntecedent.nerStrings.contains(ne)) {
hasExtraThis = true;
break;
}
}
}
return !(hasExtraAnt && hasExtraThis);
}