Задача определения пола по имени человека на PHP решается скучно, не интересно и не спортивно. Конечно, можно было бы подключить машинное обучение, несколько недель собирать обучающую выборку и тренировать нейросеть. Но такое решение окажется слишком дорогим и ни один адекватный заказчик такое оплачивать не согласится. Как это не удивительно, но в PHP уже имеется расширение для определения пола. Естественно, решения дающего 100% точность существовать не может. Давайте посмотрим как оно работает.
Для начала было бы неплохо установить это расширение. Для CentOS это будет так:
yum install -y php-gender
Теперь можно юзать:
$Gender = new \Gender\Gender();
$code = $Gender->get($name);
Как видите, ничего сложного в определении пола по имени нет. Однако, это ещё не всё. Метод get возвращает числовое представление определённой одной из констант, которое нужно перевести в человеческий язык.
const integer IS_FEMALE = 70;
const integer IS_MOSTLY_FEMALE = 102;
const integer IS_MALE = 77;
const integer IS_MOSTLY_MALE = 109;
const integer IS_UNISEX_NAME = 63;
const integer IS_A_COUPLE = 67;
const integer NAME_NOT_FOUND = 32;
const integer ERROR_IN_NAME = 69;
Обратите внимание, что ответов больше чем два. Это связано с тем, что в некоторых случаях нельзя точно сказать мужское это имя или женское. Для этих случаев предусмотрены ответы: скорее всего женское, скорее всего мужское, юнисекс-имя и парные (?) имена.
Для увеличения точности определения пола можно передать вторым параметром в метод get код страны, в рамках которой нужно провести детектирование.
Ещё один небольшой лайфхак. Модуль не умеет определять имена переданные кириллицей ни в UTF-8 ни в CP-1251. Чтобы распознать такие имена, их нужно предварительно транслитерировать.
Расширение PHP Gender — это порт программы gender.c. Главное назначение которой — определение пола человека по его имени. Текущая база данных содержит более 40 000 имён из 54 стран.