Когда части ФИО находятся в одном поле:
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 - Damegender: Writing and Comparing Gender Detection Tools
- https://github.com/davidam/damegender
- https://github.com/lead-ratings/gender-guesser
- https://habr.com/ru/articles/431866/ - Заблуждения программистов об именах — с примерами