Когда части ФИО находятся в одном поле:
select gender_by_name('Савина Анна Николаевна'); --female
select gender_by_name('Савина Анна'); --female
select gender_by_name('Анна'); --female
Когда части ФИО находятся в разных полях, то качество детектирования пола можно немного улучшить. Однако, некоторые пользователи путают Ф,И,О местами и надеяться только на позицию нельзя, это учтено в алгоритме.
Последовательность перечисления частей ФИО важна. Нужен именно такой порядок: фамилия, имя, отчество.
Для разделения частей ФИО используется перенос строки \n
:
select gender_by_name(pg_catalog.concat('Савина', e'\n', 'Анна', e'\n', 'Николаевна')); --female
select gender_by_name(pg_catalog.concat('Савина', e'\n', 'Анна', e'\n', null)); --female
select gender_by_name(pg_catalog.concat('Савина', e'\n', 'Анна', e'\n', '')); --female
select gender_by_name(pg_catalog.concat(null, e'\n', 'Анна', e'\n', '')); --female
select gender_by_name(pg_catalog.concat('', e'\n', 'Анна', e'\n', '')); --female
При детектировании пола используется словарь имён (51504 шт.), словарь окончаний фамилий и отчеств.
Ромка
, Ромчик
, Ромочка
, Анька
, Анечка
, Анютка
, Анюша
, Саша
, Слава
— это уменьшительно-ласкательные, жаргонные и неоднозначные имена. Их в словаре имён нет и в детектировании пола они не участвуют.
Для женских ФИО:
- Некорректно определяется пол как мужской в
0.24%
случаев. - Неопределяется пол в
0.28%
случаев.
Для мужских ФИО:
- Некорректно определяется пол как женский в
0.12%
случаев. - Неопределяется пол в
0.43%
случаев.
PHP функция morpher_get_gender()
Проблемы с этой функцией:
- Умеет работать с ФИО только на кириллице, для других алфавитов выдаёт ошибку. Например, не умеет работать с именами в транслите типа
Elena
. - Не умеет возвращать
unknown
. Некорректно возвращает пол для неоднозначных уменьшительных русских имён типаВаля - female
;Женя, Саша - male
(должно бытьunknown
) - Фамилии типа
Петренко
,Кац
,Перельман
,Мартиросян
,Нет
- этоmale
(должно бытьunknown
) - Неоднозначные ФИО определяет так (результат совпадает с
gender_by_name()
):Сергеева Олег - male
Сергеева Олег Николаевна - female
Сергеев Ольга - female
Сергеев Ольга Николаевич - male
№ | name | gender_by_name() |
morpher_get_gender() |
---|---|---|---|
1 | Юля | female | f |
2 | Сергеевна | female | f |
3 | Анна Герман | female | f |
4 | Вагнер Елена | female | m |
5 | саид алина акбари | female | f |
6 | Irada Zeinalova | female | error |
7 | Watson Emma | female | error |
№ | name | gender_by_name() |
morpher_get_gender() |
---|---|---|---|
1 | Олег | male | m |
2 | Сергеевич | male | m |
3 | Gref German | male | error |
4 | Плутник Никита | male | m |
5 | Арнольд Шварценеггер | male | m |
6 | Вольф Мессинг | male | m |
7 | Жюль Верн | male | m |
№ | name | gender_by_name() |
morpher_get_gender() |
---|---|---|---|
1 | Остапенко | unknown | m |
2 | Вассерман | unknown | m |
3 | кирилл или татьяна | unknown | m |
4 | елена сергей высоцкие | unknown | m |
5 | андрей, виктория, мария | unknown | f |
6 | новиков роман и светлана | unknown | m |
7 | Лошадь Пржевальского | unknown | f |
- http://ceur-ws.org/Vol-2754/paper3.pdf (TODO почитать)