Ejemplo n.º 1
0
        /// <summary>
        /// Принимает решение о текущем поле человека
        /// </summary>
        private void SolveGender()
        {
            // Ищем, может где-то пол уже установлен
            for (int i = 0; i < _words.Length; i++)
            {
                if (_words.GetWord(i).isGenderSolved())
                {
                    SetGender(_words.GetWord(i).Gender);
                    return;
                }
            }

            // Если нет, тогда определяем у каждого слова и потом суммируем
            GenderProbability probability = new GenderProbability(0, 0);

            for (int i = 0; i < _words.Length; i++)
            {
                Word word = _words.GetWord(i);
                PrepareGender(word);
                probability = probability + word.GenderProbability;
            }
            if (probability.Man > probability.Woman)
            {
                SetGender(Gender.Man);
            }
            else
            {
                SetGender(Gender.Woman);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Визначення статі, за правилами імені
        /// <param name="word">Слово</param>
        /// </summary>
        protected override void GenderByFirstName(Word word)
        {
            SetWorkingWord(word.Name);

            GenderProbability prob = new GenderProbability();

            //Попробуем выжать максимум из имени
            //Если имя заканчивается на й, то скорее всего мужчина
            if (Last(1) == "й")
            {
                prob.Man += 0.9f;
            }

            if (InNames(workingWord, new String[] { "петро", "микола" }))
            {
                prob.Man += 30;
            }

            if (In(Last(2), new String[] { "он", "ов", "ав", "ам", "ол", "ан", "рд", "мп", "ко", "ло" }))
            {
                prob.Man += 0.5f;
            }

            if (In(Last(3), new String[] { "бов", "нка", "яра", "ила", "опа" }))
            {
                prob.Woman += 0.5f;
            }

            if (In(Last(1), consonant))
            {
                prob.Man += 0.01f;
            }

            if (Last(1) == "ь")
            {
                prob.Man += 0.02f;
            }

            if (In(Last(2), new String[] { "дь" }))
            {
                prob.Woman += 0.1f;
            }

            if (In(Last(3), new String[] { "ель", "бов" }))
            {
                prob.Woman += 0.4f;
            }

            word.GenderProbability = prob;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Визначення статі, за правилами прізвища
        /// <param name="word">Слово</param>
        /// </summary>
        protected override void GenderBySurName(Word word)
        {
            SetWorkingWord(word.Value);
            GenderProbability prob = new GenderProbability();

            if (In(Last(2), new string[] { "ов", "ин", "ев", "єв", "ін", "їн", "ий", "їв", "ів", "ой", "ей" }))
            {
                prob.Man += 0.4f;
            }

            if (In(Last(3), new string[] { "ова", "ина", "ева", "єва", "іна", "мін" }))
            {
                prob.Woman += 0.4f;
            }

            if (In(Last(2), new string[] { "ая" }))
            {
                prob.Woman += 0.4f;
            }

            word.GenderProbability = prob;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Определение пола по правилам фамилий
        /// @param NCLNameCaseWord word обьект класса слов, для которого нужно определить пол
        /// </summary>
        protected override void GenderBySecondName(Word word)
        {
            SetWorkingWord(word.Name);

            GenderProbability prob = new GenderProbability();

            if (In(Last(2), new String [] { "ов", "ин", "ев", "ий", "ёв", "ый", "ын", "ой" }))
            {
                prob.Man += 0.4f;
            }

            if (In(Last(3), new String [] { "ова", "ина", "ева", "ёва", "ына", "мин" }))
            {
                prob.Woman += 0.4f;
            }

            if (In(Last(2), new String [] { "ая" }))
            {
                prob.Woman += 0.4f;
            }

            word.GenderProbability = prob;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Определение пола по правилам имен
        /// </summary>
        /// <param name="word">обьект класса слов, для которого нужно определить пол</param>
        protected override void GenderByName(Word word)
        {
            SetWorkingWord(word.Value);

            GenderProbability prob = new GenderProbability();

            // Попробуем выжать максимум из имени
            // Если имя заканчивается на "й", то скорее всего мужчина
            if (Last(1) == "й")
            {
                prob.Man += 0.9f;
            }

            if (In(Last(2), new[] { "он", "ов", "ав", "ам", "ол", "ан", "рд", "мп" }))
            {
                prob.Man += 0.3f;
            }

            if (In(Last(1), consonant))
            {
                prob.Man += 0.01f;
            }

            if (Last(1) == "ь")
            {
                prob.Man += 0.02f;
            }

            if (In(Last(2), new[] { "вь", "фь", "ль" }))
            {
                prob.Woman += 0.1f;
            }

            if (In(Last(2), new[] { "ла" }))
            {
                prob.Woman += 0.04f;
            }

            if (In(Last(2), new[] { "то", "ма" }))
            {
                prob.Man += 0.01f;
            }

            if (In(Last(3), new[] { "лья", "вва", "ока", "ука", "ита" }))
            {
                prob.Man += 0.2f;
            }

            if (In(Last(3), new[] { "има" }))
            {
                prob.Woman += 0.15f;
            }

            if (In(Last(3), new[] { "лия", "ния", "сия", "дра", "лла", "кла", "опа" }))
            {
                prob.Woman += 0.5f;
            }

            if (In(Last(4), new[] { "льда", "фира", "нина", "лита", "алья" }))
            {
                prob.Woman += 0.5f;
            }

            word.GenderProbability = prob;
        }