/// <summary>e /// Determines if two <see cref="IVerbal"/>s are similar. /// </summary> /// <param name="first">The first IVerbal</param> /// <param name="second">The second IVerbal</param> /// <returns> <c>true</c> if the given IVerbal instances are similar; otherwise, <c>false</c>.</returns> public static Similarity IsSimilarTo(this IVerbal first, IVerbal second) => first.Match() .When(first.Text.EqualsIgnoreCase(second.Text)) .Then(Similarity.Similar) .Case((Verb v1) => second.Match() .Case((Verb v2) => v1.IsSimilarTo(v2)) .Case((VerbPhrase vp2) => v1.IsSimilarTo(vp2)) .Result()) .Case((VerbPhrase vp1) => second.Match() .Case((VerbPhrase vp2) => vp1.IsSimilarTo(vp2)) .Case((Verb v2) => vp1.IsSimilarTo(v2)) .Result()) .Result();
private static string FormatVerbalText(IVerbal verbal) { var prepositionalText = verbal.Match((IPrepositionLinkable p) => p.LeftPrepositional?.Text); var adverbialText = string.Join(" ", verbal.AdverbialModifiers.Select(m => m.Text)); return($"{prepositionalText} {verbal.Modality?.Text} {verbal.Text} {adverbialText}"); }