аватар question@mail.ru · 01.01.1970 03:00

Определение пола по ФИО

Подскажите, пожалуйста, алгоритм определения пола по ФИО. Может есть на питоне какие-то решения? Я пробовал: 1-по окончаниям; 2-с помощью pymorphy разбивал ФИО на слова и определял род каждого слова. Есть еще какие-нить библиотеки или может алгоритм? ФИО могут быть не только русские.

аватар answer@mail.ru · 01.01.1970 03:00

Мой вариант - это пробегаться по базе данных и спрашивать есть ли совпадения:

Сначала достанем базу данных на этом

В левом окне в шаге 3 выберем Russian (Cyrillic) - в правом я выбираю United States, для генерации укажем только интересующие нас поля: Gender, Given Name и Suame, саму базу сделаем самой большой: 50000

Также давайте закажем для генерации базу и для английских имён по аналогии.

Процесс не быстрый, так что можно пойти заварить чаёк и выкурить сигаретку. Как придём, нам придёт 2 письма со ссылками на скачивание наших БД.

Напишем код:

import pandas as pddfru = pd.read_csv('FNru.csv')dfen = pd.read_csv('FNen.csv')# создадим сеты, чтобы не бегать по одному и тому же item'уrumalenames = set(dfru[dfru['Gender'] == 'male']['GivenName'])rumalesuames = set(dfru[dfru['Gender'] == 'male']['Suame'])rufemalenames = set(dfru[dfru['Gender'] == 'female']['GivenName'])rufemalesuames = set(dfru[dfru['Gender'] == 'female']['Suame'])enmalenames = set(dfen[dfen['Gender'] == 'male']['GivenName'])enmalesuames = set(dfen[dfen['Gender'] == 'male']['Suame'])enfemalenames = set(dfen[dfen['Gender'] == 'female']['GivenName'])enfemalesuames = set(dfen[dfen['Gender'] == 'female']['Suame'])name = input('Name: ')suame = input('Suame: ')if name in rumalenames and suame in rumalesuames:    print(name, suame, 'is male')elif name in rufemalenames and suame in rufemalesuames:    print(name, suame, 'is female')elif name in enmalenames and suame in enmalesuames:    print(name, suame, 'is male')elif name in enfemalenames and suame in enfemalesuames:    print(name, suame, 'is female')else:    print('Unkown data')

Давайте протестируем что у нас получилось на нескольких входных данных:

# Name: Никита# Suame: Токарев# Никита Токарев is male# Name: Ольга# Suame: Соколова# Ольга Соколова is female# Name: Жанна# Suame: Токарева# Жанна Токарева is female# Name: Carolina# Suame: Thompson# Carolina Thompson is female# Name: Mark# Suame: Watson# Mark Watson is male# Но решение не идеально, конечно# Требуется либо очень много данных, либо очень хорошая БД# И то не факт, что все имена будут включены# Name: Олег# Suame: Волоков# Unkown data# Name: Ashley# Suame: Roth# Unknown data

Последние

Похожие