Esempio n. 1
0
 /// <summary>
 /// Returns a NameGender value indicating the likely gender of the Pronoun based on its
 /// referent if known, or else its PronounKind.
 /// </summary>
 /// <param name="referencer">The Pronoun whose gender to lookup.</param>
 /// <returns>A NameGender value indicating the likely gender of the Pronoun.</returns>
 private static Gender GetGender(IReferencer referencer) => referencer.Match()
 .Case((PronounPhrase p) => DeterminePronounPhraseGender(p))
 .When(referencer.RefersTo != null)
 .Then((from referrenced in referencer.RefersTo
        let gender = referrenced.Match()
                     .Case((NounPhrase n) => DetermineNounPhraseGender(n))
                     .Case((Pronoun r) => r.Gender)
                     .Case((ProperSingularNoun r) => r.Gender)
                     .Case((CommonNoun n) => Gender.Neutral)
                     .Result()
                     group gender by gender into byGender
                         where byGender.Count() == referencer.RefersTo.Count()
                     select byGender.Key).FirstOrDefault())
 .Case((ISimpleGendered p) => p.Gender)
 .Result();