public static bool TryParse(this string input, out Animacy kind) { if (string.IsNullOrEmpty(input)) { throw new ArgumentException("Value cannot be null or empty.", nameof(input)); } var match = TagEx.Match(input); switch (match.Captures[1].Value) { case "anim": { kind = Animacy.Anim; return(true); } case "inan": { kind = Animacy.Inan; return(true); } default: throw new ArgumentOutOfRangeException(nameof(input)); } }
private static Predicate <NounRaw> PrepareFilter(Gender gender, Animacy animacy) { if (gender != Gender.Undefined) { return((item) => item.Gender == gender); } if (animacy != Animacy.Undefined) { return((item) => item.Gender.Animacy() == animacy); } return((item) => true); }
public static string Title(this Animacy kind) { switch (kind) { case Animacy.Anim: return("одушевлённое"); case Animacy.Inan: return("неодушевлённое"); default: throw new ArgumentOutOfRangeException(nameof(kind), kind, "invalid kind value"); } }
/// <summary> /// Поиск одного точного совпадения. Null - если не найдено. /// </summary> public static Noun FindOne(string sourceForm, Gender gender = Gender.Undefined, Animacy animacy = Animacy.Undefined) { var searchWord = PrepareWord(sourceForm); var res = items.FindOne(new NounRaw() { Word = searchWord }, new StringReverseComparer <NounRaw>(), PrepareFilter(gender, animacy)); if (res.Word == null) { return(null); } return(new Noun(res, sourceForm)); }
private static void OnBeforeFindSimilar(ref string sourceForm, ref Gender gender, ref Animacy animacy, ref string searchWord, ref object tag) { if (BeforeFindSimilar != null) { var args = new BeforeFindSimilarNounEventArgs { Animacy = animacy, Gender = gender, PreparedForm = searchWord, SourceForm = sourceForm, Tag = tag }; BeforeFindSimilar(null, args); animacy = args.Animacy; gender = args.Gender; sourceForm = args.SourceForm; searchWord = args.PreparedForm; tag = args.Tag; } }
/// <summary> /// Поиск по точному или приблизительному совпадению /// </summary> public static Noun FindSimilar(string sourceForm, Gender gender = Gender.Undefined, Animacy animacy = Animacy.Undefined) { var searchWord = PrepareWord(sourceForm); object tag = null; OnBeforeFindSimilar(ref sourceForm, ref gender, ref animacy, ref searchWord, ref tag); var res = items.FindSimilar(new NounRaw() { Word = searchWord }, new StringReverseComparer <NounRaw>(), PrepareFilter(gender, animacy)); Noun result = null; if (res.Word != null) { result = new Noun { Word = sourceForm, Gender = res.Gender, SchemaIndex = res.SchemaIndex, Inexact = res.Word != searchWord } } ; OnAfterFindSimilar(result, sourceForm, searchWord, tag); return(result); }