Пример #1
0
 /// <summary>
 /// Просумировать две вероятности
 /// </summary>
 /// <param name="number">Первая вероятность</param>
 /// <param name="add">Вторая вероятность</param>
 /// <returns>Сумма вероятностей</returns>
 static public GenderProbability operator+(GenderProbability number, GenderProbability add)
 {
     GenderProbability result = new GenderProbability(0, 0);
     result.Man = number.Man + add.Man;
     result.Woman = number.Woman + add.Woman;
     return result;
 }
Пример #2
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;
        }
Пример #3
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;
        }
Пример #4
0
        /// <summary>
        /// Определение пола по правилам имен
        /// @param NCLNameCaseWord word обьект класса слов, для которого нужно определить пол
        /// </summary>
        protected override void GenderByFirstName(Word word)
        {
            SetWorkingWord(word.Name);

            GenderProbability prob = new GenderProbability();
            
            //Попробуем выжать максимум из имени
            //Если имя заканчивается на й, то скорее всего мужчина
            if (Last(1) == "й")
            {
                prob.Man+=0.9f;
            }
            if (In(Last(2), new String [] {"он", "ов", "ав", "ам", "ол", "ан", "рд", "мп"}))
            {
                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 String [] {"вь", "фь", "ль"}))
            {
                prob.Woman+=0.1f;
            }

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

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

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

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

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

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

            word.GenderProbability = prob;
        }
Пример #5
0
        /// <summary>
        /// Принимает решение о текущем поле человека
        /// </summary>
        private void SolveGender()
        {
            //Ищем, может гдето пол уже установлен
            int length = words.Length;
            for (int i = 0; i < length; i++)
            {
                if (words.GetWord(i).isGenderSolved())
                {
                    SetGender(words.GetWord(i).Gender);
                    return;
                }
            }

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

            for (int i = 0; i < 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);
            }
        }