Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
        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");
            }
        }
Ejemplo n.º 4
0
        /// <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));
        }
Ejemplo n.º 5
0
 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;
     }
 }
Ejemplo n.º 6
0
        /// <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);
        }