// Guess whether or not a phrase is plural public static ProbableStrength SeemsPlural(InformedPhrase phrase) { ProbableStrength result = new ProbableStrength(0, 0); double strengthFactor = result.ImproveStrengthStart(); // Noun count is well determined by ending in s ProbableStrength nounness = PartOSAttribute.SeemsA(phrase, SpeechPart.Noun); ProbableStrength nisplural; if (phrase.Name.ToLower().EndsWith("s")) nisplural = new ProbableStrength(1.0, 0.8); else nisplural = new ProbableStrength(0.0, 0.5); result.ImproveStrength(nounness.Relative(nisplural), ref strengthFactor); // Verbs that end in s are probably not plural ProbableStrength verbness = PartOSAttribute.SeemsA(phrase, SpeechPart.Verb); if (phrase.Name.ToLower().EndsWith("s")) { ProbableStrength visplural = new ProbableStrength(0.0, 0.8); result.ImproveStrength(verbness.Relative(visplural), ref strengthFactor); } result.ImproveStrengthFinish(strengthFactor); return result; }
public static ProbableStrength SeemsReferencePhrase(InformedPhrase phrase, bool not) { ProbableStrength total = new ProbableStrength(0, 0); double strengthFactor = total.ImproveStrengthStart(); foreach (KeyValuePair <PhraseSense, double> sense in phrase.Senses) { if (sense.Key.Phrases.Count == 1) { total.ImproveStrength(SeemsReferencialVerb(sense.Key.Phrases[0]), ref strengthFactor); } else { // Is this a "helper" verb followed by an anaphora? ProbableStrength foundHelper = ProbableStrength.None, foundBoth = ProbableStrength.None; foreach (InformedPhrase subphr in sense.Key.Phrases) { if (!not) { foundHelper = foundHelper.Better(SeemsReferencialVerb(subphr)); foundBoth = foundBoth.Better(foundHelper.Relative(SeemsAnaphora(subphr))); } else { foundHelper = foundHelper.Better(SeemsReferencialVerb(subphr).InverseProbability()); foundBoth = foundBoth.Better(foundHelper.Relative(SeemsAnaphora(subphr).InverseProbability())); } } foundBoth.weight = foundBoth.weight + .5 - foundBoth.weight * .5; // Use both our and the recursive result total.ImproveStrength(foundBoth, ref strengthFactor); } } total.ImproveStrengthFinish(strengthFactor); return(total); }