Skip to content

Files

Latest commit

author
Rinat Mukhtarov
Dec 18, 2023
d8684c1 · Dec 18, 2023

History

History

gender_by_name

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Dec 18, 2023
Nov 7, 2023
Dec 18, 2023
Sep 19, 2023
May 25, 2023
Jan 15, 2022
May 25, 2023
Dec 20, 2022
Dec 20, 2022
Dec 20, 2022

Функция на PostgreSQL 12+ для определение пола по русскоязычным ФИО (фамилии, имени, отчеству)

Пример использования

Когда части ФИО находятся в одном поле:

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()

Проблемы с этой функцией:

  1. Умеет работать с ФИО только на кириллице, для других алфавитов выдаёт ошибку. Например, не умеет работать с именами в транслите типа Elena.
  2. Не умеет возвращать unknown. Некорректно возвращает пол для неоднозначных уменьшительных русских имён типа Валя - female; Женя, Саша - male (должно быть unknown)
  3. Фамилии типа Петренко, Кац, Перельман, Мартиросян, Нет - это male (должно быть unknown)
  4. Неоднозначные ФИО определяет так (результат совпадает с gender_by_name()):
    1. Сергеева Олег - male
    2. Сергеева Олег Николаевна - female
    3. Сергеев Ольга - female
    4. Сергеев Ольга Николаевич - male

Сравнение gender_by_name() с morpher_get_gender()

Женский пол

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

Ссылки по теме

  1. http://ceur-ws.org/Vol-2754/paper3.pdf (TODO почитать)