Как отделить написанные латиницей мужские имена от женских?

Как разделить мужские имена от женских написанные на латинском алфавите? Пример:

names = 
["Sasha","Alice","Valeriy","Jenny","Fedya","Viola","Mark","Chris","Margo"]

Ответы (2 шт):

Автор решения: CrazyElf

Ну вот я нагуглил за 10 секунд такой пакет для питона, возможно, вам этого будет достаточно:

# pip install gender-guesser
import gender_guesser.detector as gender

d = gender.Detector()

names = ["Sasha","Alice","Valeriy","Jenny","Fedya","Viola","Mark","Chris","Margo"]
for name in names:
    print(f'{name}: {d.get_gender(name)}')

Вывод:

Sasha: mostly_male
Alice: female
Valeriy: male
Jenny: female
Fedya: unknown
Viola: female
Mark: male
Chris: mostly_male
Margo: female
→ Ссылка
Автор решения: Arty

Воспользуемся бесплатным сервисом genderize.io распознавания пола по имени, также установим requests через python -m pip install requests.

Попробовать код онлайн!

import requests

def detect_gender(name):
    return requests.get('https://api.genderize.io', params = {'name': name}).json()

names = ["Sasha","Alice","Valeriy","Jenny","Fedya","Viola","Mark","Chris","Margo"]

for name in names:
    res = detect_gender(name)
    print(name, ',', res['gender'], res)

Вывод:

Sasha , male {'name': 'Sasha', 'gender': 'male', 'probability': 0.51, 'count': 13219}
Alice , female {'name': 'Alice', 'gender': 'female', 'probability': 0.98, 'count': 68971}
Valeriy , male {'name': 'Valeriy', 'gender': 'male', 'probability': 0.98, 'count': 1155}
Jenny , female {'name': 'Jenny', 'gender': 'female', 'probability': 0.98, 'count': 74278}
Fedya , male {'name': 'Fedya', 'gender': 'male', 'probability': 0.91, 'count': 155}
Viola , female {'name': 'Viola', 'gender': 'female', 'probability': 0.99, 'count': 29324}
Mark , male {'name': 'Mark', 'gender': 'male', 'probability': 0.99, 'count': 119313}
Chris , male {'name': 'Chris', 'gender': 'male', 'probability': 0.9, 'count': 156083}
Margo , female {'name': 'Margo', 'gender': 'female', 'probability': 0.95, 'count': 3485}

Также можно за один раз запросить до 10 имён, как сделано в коде ниже, чтобы снизить задержки от сервера и нагрузку.

Попробовать код онлайн!

import requests

def detect_gender(names):
    return requests.get('https://api.genderize.io',
        params = tuple(('name[]', n) for n in names)).json()

names = ["Sasha","Alice","Valeriy","Jenny","Fedya","Viola","Mark","Chris","Margo"]

for i in range(0, len(names), 10):
    ns = names[i : i + 10]
    for name, res in zip(ns, detect_gender(ns)):
        print(name, ',', res['gender'], res)

Вывод тот же, что и в предыдущем коде.


PS. genderize.io бесплатно предоставляет квоту до 1000 запрошенных имён в день, думаю больше лимит доступен после регистрации, и если очень много надо, то только платно.

→ Ссылка