Подскажите, пожалуйста, алгоритм определения пола по ФИО. Может есть на питоне какие-то решения? Я пробовал: 1-по окончаниям; 2-с помощью pymorphy разбивал ФИО на слова и определял род каждого слова. Есть еще какие-нить библиотеки или может алгоритм? ФИО могут быть не только русские.
question@mail.ru
·
01.01.1970 03:00
Определение пола по ФИО
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