Created
April 28, 2013 07:08
-
-
Save drakmail/5476161 to your computer and use it in GitHub Desktop.
Определение пола на ruby. Использование - detect_gender_by_given_name("Имя", "Фамилия", "Отчество").
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: utf-8 -*- | |
| FEMININE = 0 | |
| MASCULINE = 1 | |
| UNDEF = -1 | |
| MASCULINE_NAMES = %w[Аба Азарья Акива Аккужа Аникита Алёша Андрюха Андрюша Аса Байгужа | |
| Вафа Ваня Вася Витя Вова Володя Габдулла Габидулла Гаврила Гадельша | |
| Гайнулла Гайса Гайфулла Галиулла Гарри Гата Гдалья Гийора Гиля Гошеа | |
| Данила Джиханша Дима Зайнулла Закария Зия Зосима Зхарья Зыя Идельгужа | |
| Иешуа Изя Ильмурза Илья Иона Исайя Иуда Йегошуа Йегуда Йедидья Карагужа Коля | |
| Костя Кузьма Лёха Лёша Лука Ларри Марданша Микола Мирза Миха Миша Мойша Моня | |
| Муртаза Муса Мусса Мустафа Никита Нэта Нэхэмья Овадья Петя Птахья | |
| Рахматулла Риза Рома Савва Сафа Серёга Серёжа Сила Симха Сэадья Товия | |
| Толя Федя Фима Фока Фома Хамза Хананья Цфанья Шалва Шахна Шрага Эзра | |
| Элиша Элькана Юмагужа Ярулла Яхья Яша] | |
| FEMININE_NAMES = %w[Айгуль Айгюль Айзиряк Айрис Альфинур Асылгюль Бадар Бадиян Банат Бедер | |
| Бибикамал Бибинур Гайниджамал Гайникамал Гаухар Гиффат Гулендем | |
| Гульбадиян Гульдар Гульджамал Гульджихан Гульехан Гульзар Гулькей | |
| Гульназ Гульнар Гульнур Гульсем Гульсесек Гульсибар Гульчачак Гульшат | |
| Гульшаян Гульюзум Гульямал Гюзель Джамал Джаухар Джихан Дильбар Диляфруз | |
| Зайнаб Зайнап Зейнаб Зубарджат Зуберьят Ильсёяр Камяр Карасес Кейт | |
| Кэролайн Кэт Кэтрин Кямар Любовь Ляйсан Магинур Магруй Марьям Минджихан | |
| Минлегюль Миньеган Наркас Нинель Нурджиган Райхан Раушан Рахель Рахиль | |
| Рут Руфь Рэйчел Сагадат Сагдат Сарбиназ Сарвар Сафин Сахибджамал Сулпан | |
| Сумбуль Сурур Сюмбель Сясак Тамар Тансулпан Умегульсум Уммегюльсем | |
| Фарваз Фархинур Фирдаус Хаджар Хажар Хаят Хуршид Чечек Чулпан Шамсинур | |
| Элис Энн Юдифь Юндуз Ямал] | |
| AMBIGUOUS_NAMES = %w[Валя Женя Мина Паша Саша Шура] | |
| def detect_gender_by_given_name(firstname, lastname='', patronym='') | |
| ambiguous = false | |
| # Detect by patronym | |
| return FEMININE if patronym =~ /на$/ | |
| return MASCULINE if patronym =~ /[иы]ч$/ | |
| # Process exceptions | |
| MASCULINE_NAMES.each do |name| | |
| return MASCULINE if firstname == name | |
| end | |
| FEMININE_NAMES.each do |name| | |
| return FEMININE if firstname == name | |
| end | |
| AMBIGUOUS_NAMES.each do |name| | |
| if firstname == name | |
| ambiguous = true | |
| break | |
| end | |
| end | |
| if not ambiguous | |
| # Feminine firstnames ends to vowels | |
| return FEMININE if firstname =~ /[ая]$/ | |
| # Masculine firstnames ends to consonants | |
| return MASCULINE if firstname !~ /[аеёиоуыэюя]$/ | |
| end | |
| # Detect by lastname | |
| # possessive names | |
| return FEMININE if lastname =~ /(ев|ин|ын|ёв|ов)а$/ | |
| return MASCULINE if lastname =~ /(ев|ин|ын|ёв|ов)$/ | |
| # adjectives | |
| return FEMININE if lastname =~ /(ая|яя)$/ | |
| return MASCULINE if lastname =~ /(ий|ый)$/ | |
| # Unknown or ambiguous name | |
| return UNDEF | |
| end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment