private string GetGenderCompatibilityFeature(Mention.MentionContext entityContext, DiscourseEntity discourseEntity) { Similarity.GenderEnum entityGender = discourseEntity.Gender; //System.err.println("getGenderCompatibility: mention="+ec.getGender()+" entity="+eg); if (entityGender == Similarity.GenderEnum.Unknown || entityContext.GetGender() == Similarity.GenderEnum.Unknown) { return mGenderUnknown; } else if (entityContext.GetGender() == entityGender) { return mGenderCompatible; } else { return mGenderIncompatible; } }
public override DiscourseEntity Resolve(Mention.MentionContext expression, DiscourseModel discourseModel) { DiscourseEntity discourseEntity; int entityIndex = 0; double nonReferentialProbability = mNonReferentialResolver.GetNonReferentialProbability(expression); if (mDebugOn) { System.Console.Error.WriteLine(this.ToString() + ".resolve: " + expression.ToText() + " -> " + "null " + nonReferentialProbability); } for (; entityIndex < GetNumberEntitiesBack(discourseModel); entityIndex++) { discourseEntity = discourseModel.GetEntity(entityIndex); if (IsOutOfRange(expression, discourseEntity)) { break; } if (IsExcluded(expression, discourseEntity)) { mCandidateProbabilities[entityIndex] = 0; if (mDebugOn) { System.Console.Error.WriteLine("excluded " + this.ToString() + ".resolve: " + expression.ToText() + " -> " + discourseEntity + " " + mCandidateProbabilities[entityIndex]); } } else { string[] features = GetFeatures(expression, discourseEntity).ToArray(); try { mCandidateProbabilities[entityIndex] = mModel.Evaluate(features)[mSameIndex]; } catch (System.IndexOutOfRangeException e) { mCandidateProbabilities[entityIndex] = 0; } if (mDebugOn) { System.Console.Error.WriteLine(this + ".resolve: " + expression.ToText() + " -> " + discourseEntity + " (" + expression.GetGender() + "," + discourseEntity.Gender + ") " + mCandidateProbabilities[entityIndex] + " " + string.Join(",", features)); //SupportClass.CollectionToString(lfeatures)); } } if (mPreferFirstReferent && mCandidateProbabilities[entityIndex] > nonReferentialProbability) { entityIndex++; //update for nonRef assignment break; } } mCandidateProbabilities[entityIndex] = nonReferentialProbability; // find max int maximumCandidateIndex = 0; for (int currentCandidate = 1; currentCandidate <= entityIndex; currentCandidate++) { if (mCandidateProbabilities[currentCandidate] > mCandidateProbabilities[maximumCandidateIndex]) { maximumCandidateIndex = currentCandidate; } } if (maximumCandidateIndex == entityIndex) { // no referent return null; } else { discourseEntity = discourseModel.GetEntity(maximumCandidateIndex); return discourseEntity; } }
private string GetGenderCompatibilityFeature(Mention.MentionContext entityContext, DiscourseEntity discourseEntity) { Similarity.GenderEnum entityGender = discourseEntity.Gender; if (entityGender == Similarity.GenderEnum.Unknown || entityContext.GetGender() == Similarity.GenderEnum.Unknown) { return GenderUnknown; } else if (entityContext.GetGender() == entityGender) { return GenderCompatible; } else { return GenderIncompatible; } }