web-dev-qa-db-fra.com

Quelqu'un connaît-il une bonne bibliothèque pour faire correspondre le nom d'une personne à son sexe?

Je suis à la recherche d'une bibliothèque ou d'une base de données qui peut fournir des suppositions quant à savoir si une personne est un homme ou une femme en fonction de son nom ou de son surnom. Quelque chose comme

john => "M",
mary => "F",
alex => "A", #ambiguous

Je recherche quelque chose qui prend en charge des noms autres que les noms anglais (tels que japonais, indien, etc.).

Avant d'obtenir une autre réponse du type "vous allez offenser les gens en supposant leur sexe/genre", permettez-moi d'être clair, ma candidature n'interagit avec personne. Il n'envoie aucun e-mail ni ne contacte personne de toute façon. Il n'y a aucun utilisateur à demander. Dans de nombreux cas, la personne en question est décédée et les seules informations dont je dispose sont son nom, sa date de naissance et sa date de décès. La raison pour laquelle je veux connaître le sexe de l'individu est de rendre la grammaire de la sortie plus agréable et de faciliter les recherches éventuelles qui pourraient en découler.

90
Chas. Owens

Le sexe d'un nom est quelque chose qui ne peut pas être déduit par programme dans le cas général. Vous avez besoin d'une base de données de noms. Voici ne base de données de noms gratuite du US Census Burea .

[~ # ~] edit [~ # ~] : Le lien pour le nom 2010 est mort mais il y a des liens qui fonctionnent et une bibliothèque dans les commentaires.

66
Ayman Hourieh

gender.c est un programme open source C qui fait du bon travail. Il contient des données pour 44568 prénoms du monde entier. Il existe une bonne documentation et une description du format de fichier (essentiellement du texte brut), il ne devrait donc pas être trop difficile de le lire à partir de votre propre application.

Voici ce que dit l'auteur:

Quelques mots sur la qualité des données

Le dictionnaire des prénoms a été préparé avec le plus grand soin. Par exemple, les noms turcs, indiens et coréens dans ce dictionnaire ont tous été classés indépendamment par plusieurs locuteurs natifs. J'ai également pris un soin particulier à ne répertorier que les noms qui peuvent actuellement être trouvés.

La leçon de cela?

Toutes les modifications doivent être effectuées avec beaucoup de prudence (et elles doivent également respecter le tri requis par l'algorithme de recherche). Par exemple, sachant que "Sascha" est le nom d'un garçon en Allemagne, l'auteur n'a jamais supposé que le "Sasha" anglais était le nom d'une fille. Sachant que "Jan" est le nom d'un garçon en Allemagne, je n'ai jamais supposé qu'il s'agissait également d'une forme courte anglaise de "Janet". Un autre exemple typique est le nom "Esra". C'est le nom d'un garçon en Allemagne, mais celui d'une fille en Turquie.

Le programme calcule une probabilité que le nom soit masculin ou féminin. Il peut le faire avec le nom en entrée seule ou avec le nom et le pays d'origine, ce qui donne des résultats nettement meilleurs.

Vous pouvez le télécharger sur le site du magazine informatique allemand c't 40 000 Namur . L'article est en allemand mais ne vous inquiétez pas, toute la documentation est en anglais. Voici le lien ftp direct 717-182.Zip si l'article ne vous intéresse pas. Le fichier Zip contient le code source, un exécutable Windows, la base de données et la documentation.

70

"Je te le dis, la vie n'est pas facile pour un garçon nommé 'Sue'."

... Alors, pourquoi le rendre plus difficile? Si vous avez besoin de connaître le sexe, demandez simplement ... Sinon, ne vous en faites pas.

31
Shog9

J'ai construit une API gratuite qui donne une estimation probabiliste du sexe en fonction d'un prénom. Au lieu d'utiliser l'une des approches mentionnées ci-dessus, j'utilise plutôt un énorme ensemble de données de profils de réseaux sociaux pour fournir une estimation probabiliste ainsi qu'un facteur de certitude. Il prend également en charge le filtrage facultatif via les identifiants de pays ou de langue. La situation s'améliore de jour en jour à mesure que de nouveaux profils sont ajoutés à l'ensemble de données.

Son utilisation est gratuite sur http://genderize.io

[~ # ~] une [~ # ~] chose que vous devriez considérer est d'utiliser un outil qui prend en compte les données démographiques, car les conventions de dénomination reposeront fortement sur cette.

Exemple

http://api.genderize.io?name=kim
{"name":"kim","gender":"female","probability":"0.89","count":1440}

http://api.genderize.io?name=kim&country_id=dk
{"name":"kim","gender":"male","probability":"0.95","count":44,"country_id":"dk"}
28
Stromgren

Voici deux approches bizarres qui peuvent même ne pas fonctionner, et ne fonctionneraient probablement pas en masse sans violer les termes d'une licence:

  1. Utilisez l'API Facebook (dont je ne sais pratiquement rien, ce n'est peut-être même pas possible) pour effectuer deux recherches: une pour les utilisateurs masculins FB portant ce prénom et une pour les femmes. Utilisez les deux nombres pour décider de la probabilité du sexe.

  2. Beaucoup plus lâche mais plus évolutif, utilisez l'API Google et recherchez le nom ainsi que les pronoms spécifiques au sexe et comparez les chiffres. Par exemple, il y a 592 000 000 résultats pour la recherche de "Richard son" (pas comme une phrase), mais seulement 179 000 000 pour "Richard son".

22
richardtallent

Compte tenu de vos contraintes déclarées, votre meilleure option est de reformuler tout ce que vous écrivez pour être non sexiste à moins que vous sachiez quel genre ils veulent être appelés dans chaque cas.

Si vous écrivez en anglais , rappelez-vous que singulier "ils" est grammaticalement bien comme un pronom singulier neutre à la troisième personne.

Un bon exemple est le titre de cette question. Tel qu'il est actuellement:

… Faire correspondre le nom d'une personne à son sexe? 

Ce serait moins gênant si écrit:

… Faire correspondre le nom d'une personne à son sexe? 
6
bignose

Ce n'est pas un service, mais une petite application avec une base de données:
http://www.codeproject.com/KB/cpp/genderizer.aspx

Et cet outil est en allemand:
http://www.faq-o-matic.net/2011/06/01/zu-einem-vornamen-das-geschlecht-finden/

Et un autre en VB:
http://www.vbarchiv.net/tipps/tipp_1925-geschlecht-anhand-des-vornamens-ermitteln.html

Je pense qu'en combinaison avec certaines listes "Prénom le plus utilisé en 2011", vous devriez pouvoir construire quelque chose de décent.

4
Remy

C'est également une mauvaise pratique de supposer que les utilisateurs doivent être des hommes ou des femmes. Il existe un nombre restreint mais significatif de personnes "intersexuées", dont la plupart sont profondément malades de ne pas avoir de case à cocher.
bignose: intéressant sur le "singulier ils". Je ne savais pas que ça avait une si longue histoire.

4
Karl

La seule chose que vous obtiendrez en essayant de l'automatiser, c'est un groupe d'utilisateurs mécontents. À partir de ces données de recensement:

JAMES, JOHN, ROBERT, MICHAEL, WILLIAM, DAVID, RICHARD, CHARLES, JOSEPH, THOMAS, CHRISTOPHER, DANIEL, PAUL, MARK, DONALD, GEORGE, KENNETH, STEVEN, EDWARD, BRIAN, RONALD, ANTHONY, KEVIN, JASON, MATTHEW, GARY, TIMOTHY, JOSE, LARRY, JEFFREY, FRANK, SCOTT, ERIC, STEPHEN, ANDREW, RAYMOND, GREGORY, JOSHUA, JERRY, DENNIS, WALTER, PATRICK, PETER, HAROLD, HENRY, CARL, ARTHUR, RYAN, JOE, JUAN, JACK, ALBERT, JUSTIN, TERRY, GERALD, KEITH, SAMUEL, WILLIE, LAWRENCE, ROY, BRANDON, ADAM, FRED, BILLY, LOUIS, JEREMY, AARON, RANDY, EUGENE, CARLOS, RUSSELL, BOBBY, VICTOR, MARTIN, JESSE, SHAWN, CLARENCE, SEAN, CHRIS, JOHNNY, JIMMY, ANTONIO, TONY, LUIS, MIKE, DALE, CURTIS, NORMAN, ALLEN, GLENN, TRAVIS, LEE, MELVIN, KYLE, FRANCIS, JESUS, RAY, JOEL, EDDIE, TROY, ALEXANDER, MARIO, FRANCISCO, MICHEAL, OSCAR, JAY, ALEX, JON, RONNIE, TOMMY, LEON, LEO, WESLEY, DEAN, DAN, LEWIS, COREY, MAURICE, VERNON, ROBERTO, CLYDE, SHANE, SAM, LESTER, CHARLIE, TYLER, GENE, BRETT, ANGEL, LESLIE, CECIL, ANDRE, ELMER, GABRIEL, MITCH ELL, ADRIAN, KARL, CORY, CLAUDE, JAMIE, JESSIE, CHRISTIAN, LONNIE, CODY, JULIO, KELLY, JIMMIE, JORDAN, JAIME, CASEY, JOHNNIE, SIDNEY, JULIAN, DARYL, VIRGIL, MARSHALL, PERRY, TRION, MARION RENE, FREDDIE, AUSTIN, JACKIE, JOEY, EVAN, DANA, DONNIE, SHANNON, ANGELO, SHAUN, LYNN, CAMERON, BLAKE, KERRY, JEAN, IRA, RUDY, BENNIE, ROBIN, LOREN, NOEL, DEVIN, KIM, GUADALUPE, CARROLL, SAMMY, MARTY, TAYLOR, ELLIS, DALLAS, LAURENCE, DREW, JODY, FRANKIE, PAT, MERLE, TERRELL, DARNELL, TOMMIE, TOBY, VAN, COURTNEY, JAN, CARY, SANTOS, AUBREY, MORGAN, LOUIE, STACY, MICAH, BILLIE, LOGAN, DEMETRIUS, ROBBIE, KENDALL, ROYCE, MICKEY, DEVON, ASHLEY, CAREY, SON, MARLIN, ALi, SAMMIE, MICHEL, RORY, KRIS, AVERY, ALEXIS, GERRY, STACEY, CARMEN, SHELBY, RICKIE, BOBBIE, OLLIE, DENNY, DION, ODELL, MARY, COLBY, HOLLIS, KIRBY, CRUZ, MERRILL, LANE, CLEO, BLAIR, NUMBERS, CLAIR, BERNIE, JOAN, DOMINIQUE, TRISTAN, JAME, GALE, LAVERNE, ALVA, STEVIE, ERIN, AUGUSTINE, JEUNE, JOHNIE, ARIEL, DUSTY, LINDSEY, TRACEY, SCOTTIE, SANDY, SYDNEY, GAIL, DORIAN, LAVERN, REFUGIO, IVORY, ANDREA, SANG, DEON, CAROL, YONG, BERRY, TRINIDAD, SHIRLEY, MARIA, CHANG, ROSARIO, DANNIE, FRANCES, THANH, CONNIE, TORY, LUPE, DEE, SUNG, CHI, QUINN, MINH, THEO, LOU, CHUNG, VALENTINE, JAMEY, WHITNEY, SOL, CHONG, PARIS, OTHA, LACY, DONG, ANTONIA, KELLEY, CARROL, SHAYNE, VAL, JUDE, BRITT, HONG, LEIGH, GAYLE, JAE, NICKY, LESLEY, MAN, KASEY, JEWELL, PATRICIA, LAUREN, ELISHA, MICHAL, LINDSAY et JEWEL

sont tous des noms qui fonctionnent pour les hommes et les femmes. Si le nom d'une fille est Robert et que tout le monde, y compris votre logiciel, continue de l'appeler un homme, elle serait plutôt énervée.

3
nitromaster101

L'idée ne fonctionnera clairement pas dans la plupart des langues.

Cependant, si vous pouviez connaître la nationalité à l'avance, vous pourriez avoir plus de chance. Dans la plupart des langues slaves (par exemple le russe, le polonais, le bulgare), vous pouvez supposer que tous les noms de famille se terminant par -va -cha -ska (-a en général sont féminins) tandis que -v -ch -shi sont masculins.

En fait, tout nom de famille a une forme féminine et masculine selon la fin. Cependant, les mêmes noms utilisés dans d'autres pays (par exemple aux États-Unis) peuvent utiliser uniquement la forme masculine.

La même chose pourrait être dite pour les prénoms (-a -ya sont féminins) mais elle n'est pas exacte à 100%.

Mais en général, vous auriez à peine une bibliothèque suffisamment précise.

3
Dimitar Slavchev

Le python package SexMachine le fera pour vous. Étant donné tout prénom, il retourne s'il est masculin, féminin ou unisexe. Il s'appuie sur les données du gender.c programme de Jorg Michael.

3
jm_tagarro

Bien que les bases de données soient probablement la solution la plus pratique, si vous voulez vous amuser, vous pouvez peut-être essayer d'écrire un réseau de neurones (ou d'utiliser une bibliothèque de réseaux de neurones) qui prend le nom et génère l'une de ces 3 options (F, M, A ).

Vous pouvez le former en utilisant les ensembles de données qui existent dans les bases de données suggérées par d'autres réponses, ainsi qu'avec toutes les autres données dont vous disposez.

Cette solution vous permettrait de gérer des noms non spécifiquement classés précédemment, et également de gérer différentes langues. Vous voudrez peut-être également transmettre la langue (si vous la connaissez) comme entrée au réseau neuronal.

Je ne sais pas si je peux dire que les réseaux de neurones (ou tout autre apprentissage automatique) feraient un bon travail de catégorisation.

3
chees

Cela dépend de la culture/de la région: prenez Andrea, car les Italiens ne sont que masculins, car la Suède est un prénom féminin tandis qu'Andreas est pour les hommes; Shawn est ambigu en anglais. Si une langue a une déclinaison, comme le latin ou le russe, les dernières lettres changeront selon les règles grammaticales,

Une autre source d'ambiguïtés est le nom de famille identique au nom de personne.

À mon avis, il est impossible de résoudre en général.

3
Giulio Vian

Je ne l'ai pas utilisé, mais IBM a une bibliothèque Global Name Analytics (pour un prix!) Qui semble assez complète.

2
altan

Le répertoire Z (sur vettrasoft.com) a une fonction en langage C, fonctionne quelque chose comme ceci:

void func()
{
    char c = z_guess_sex_byfirstname ("Lon");
    switch(c)
    {
    case 'M': std::cout << "It's a boy!\n"; break;
    case 'F': std::cout << "It's a girl!\n"; break;
    case 'B': std::cout << "this name is for both sexes\n"; break;
    case '?': std::cout << "sex unknown sorry\n"; break;
    }
}

il est basé sur une base de données, la table a quelque chose comme plus de 10000 noms, je pense, mais vous devez télécharger et installer le répertoire z (comprend de nombreux autres éléments topo comme les pays, les repères géographiques, les aéroports, les États, les codes régionaux, les codes postaux, etc. ainsi que des fonctions et des objets c ++ pour accéder aux données). Cependant, les noms sont très orientés vers l'anglais. Le tableau est un travail en cours et mis à jour progressivement.

2
gorth

Ce n'est pas gratuit, mais c'est une belle bibliothèque que j'ai utilisée auparavant:

NetGender pour .NET vous permet d'intégrer rapidement et facilement la vérification du nom, l'analyse et la détermination du sexe dans vos applications personnalisées. Vérifiez avec précision si un champ particulier contient un individu ou une entreprise valide. NetGender utilise un dictionnaire de noms de plus de 100 000 ethnies et divers en combinaison avec un dictionnaire de noms de société de plus de 8 000 pour garantir une détermination précise du sexe.

http://www.softwarecompany.com/dotnet/netgender.htm

1
Richard West

Eh bien, plus maintenant. IBM breveté cette idée il y a quelque temps.

Donc, si vous recherchez n'importe quel niveau de flexibilité (autre chose qu'une liste de noms), vous devrez soit (haleter!) Demander à l'utilisateur, ou simplement payer IBM pour les droits :)

Dans tous les cas, une telle détection automatique est ennuyeuse pour de nombreuses personnes qui ont des noms ambigus ou même des parents méchants. Ne rendons pas cela plus difficile pour eux.

1
lfaraone

Les cartes nom-genre peuvent fonctionner, mais dans les pays multiculturels, c'est plus comme deviner. Je peux vous donner un exemple: Marian en polonais est un prénom masculin typique, alors que le même nom en Grande-Bretagne est un prénom féminin. À l'ère des personnes qui immigrent partout dans le monde, je ne suis pas sûr qu'une telle base de données soit très précise. Bonne chance!

1

Vous pouvez jeter un oeil à mon python https://github.com/muatik/genderizer

Il essaie de détecter le sexe des auteurs en cherchant leur nom et/ou un exemple de texte (par exemple des tweets).

Et il prend également en charge mongodb, memcached pour les performances.

1
Muatik

Il est intéressant que vous disiez que vous avez une date de naissance. Ça pourrait aider. J'ai vu des bases de données d'histoires de popularité de noms.

Dans le film Splash (1984), c'était drôle que le personnage de Darryl Hannah choisisse le nom "Madison" sur une plaque de rue de Madison Avenue, car évidemment "Madison" n'est pas le nom d'une fille.

24 ans plus tard, Madison est le 4ème nom le plus populaire pour les bébés filles!


Nommez l'histoire du gouvernement. (Découvrez le triste déclin de Mary au cours des 100 dernières années.)


Quand j'écrivais à la Maison Blanche quand j'étais enfant, Richard Nixon (ou peut-être un secrétaire) m'a répondu avec des photos du lieu historique, adressées à "Miss Rhett Anderson". "Miss Rhett?" Ça n'a même pas de sens! Ne pouvons-nous VRAIMENT pas faire la différence entre Rhett de Clark Gable (avec une moustache, dans Autant en emporte le vent!) Et Scarlett de Vivian Lee? Je ne lui pardonnerai jamais, malgré l'assurance de Neil Young que "même Richard Nixon a de l'âme".

1
Nosredna

Je suis à peu près sûr qu'aucun tel service ne pourrait exister avec un niveau de précision acceptable. Voici les problèmes qui, je pense, sont insurmontables:

  • Il existe de nombreux noms pour hommes et femmes.
  • Il y a beaucoup de noms différents dans ce monde, même si vous ne considérez qu'un seul pays.
  • Il y a le problème "A Boy Named Sue", soulevé avec tant d'éloquence par Johnny Cash :-)
1
Steve McLeod

Certaines cultures ont des noms unisexes - comme le mien. Que faites-vous alors? Je pense que la réponse est claire et simple - ne présumez pas - vous pourriez vous offenser. Demandez simplement si c'est nécessaire, sinon neutralité de genre.

1
Preet Sangha
1
Chief Kaka

Ce que je ferais, c'est faire un hack qui prend le nom et le recherche par rapport à l'API Facebook. Examine ensuite les utilisateurs résultants et comptez combien d'entre eux sont des femmes ou des hommes. Vous pouvez ensuite renvoyer un pourcentage. Plus insurmontable. :)

0
ajayjapan

Je ne connais pas un tel service, cependant ..

Dans certains pays (par exemple en Allemagne), le nom qu'une personne peut être donné est limité par la loi - il y a peut-être des publications à ce sujet qui pourraient être récoltées (mais je n'en connais pas pour le moment).

0
miku

Je ne connais aucun de ces services. Cependant, vous pouvez peut-être trouver les données que vous recherchez. Le gouvernement américain publie des données sur la prévalence des noms et le sexe de la personne à laquelle ils sont attachés. La Social Security Administration a un tel page , et le recensement peut aussi bien, mais je n'ai pas pris le temps de regarder. Peut-être que d'autres gouvernements mondiaux font des choses similaires.

0
rmeador

Got this from hacker news discussion about this

0
Surya

Ce n'est pas vraiment un problème de programmation - cela revient à obtenir une table de probabilité.

AFAIK il n'y a pas de bases de données publiques sous formes distillées. Vous pouvez soit le construire à partir des données du recensement, soit acheter les données à quelqu'un.

Par exemple, c'est quelqu'un qui vend la table de probabilité pour le Canada .

0
Uri

À mon humble avis, c'est généralement une mauvaise idée de déterminer le sexe à partir du nom d'un individu. Beaucoup de noms sont intersexuels (bon sang, est-ce même un mot ?? :-), et aussi ils peuvent être un sexe dans une culture et un autre dans une autre.

Quelques exemples stupides, juste quelques-uns qui me sont venus à l'esprit (de ma partie du monde, CE)

Vanja - femelle, dans les pays de l'est d'ici, principalement mâle
Alex - intersexe (abréviation de Sandra, femme, et Sandro, homme)
Robin - dans les cultures occidentales, peut être à la fois

Dans certaines parties du monde, le sexe d'une personne peut être déterminé en regardant comment se termine le nom. Par exemple, Marija, Sandra, Ivana, Petra, Sara, Lucija, Ana - vous pouvez voir que la plupart de ces noms féminins se terminent par "ja" ou "ra". Il existe également d'autres exemples.

Pourtant, je pense qu'il vaut mieux juste demander à l'utilisateur le sexe.

0
Rook