[C#] kolla om det är tjej eller kille på namn.

Permalänk
Avstängd

[C#] kolla om det är tjej eller kille på namn.

Hej,

Har ett projekt och försöker komma på något sätt så jag kan kolla om det är en tjej eller kille på ett namn och då prata vi inte om någon database utan bara hitta ett namn på internet skriva in den i textbox och sen kommer det upp en messagebox upp och säger om det är en tjej eller kille.

Har fler projekt på gång!

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem

Enklast vore väl att ta de vanligaste 100 namnen och sen köra ett binärt if-villkor.

Permalänk

Well... Enklaste vägen vore väl att ha två listor med namn, en för varje kön. Sedan kollar du vilken lista namnet finns i?
Rent implementationsmässigt kan jag inte hjälpa dig, tyvärr. Behöver du C/C++ eller Golang kan du komma till mig

Annars kan du lära dig twitters API och göra något sånt här:
https://github.com/ExPHAT/twitter-sort
Fast för identifiering av namn, såklart.

Visa signatur

Vill du ha svar från mig bör du citer
Segmentation fault (core dumped)

Permalänk
99:e percentilen

Well, det är ju en omöjlig uppgift redan från början: Hur ska du göra med namn som Kim och Love? Hur ska du göra med utländska/ovanliga namn som inte finns i ditt register? Och hur definierar man ens tjej- och killnamn nu för tiden?

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Hedersmedlem

Google-sökning efter ansiktsbilder och någon sorts bildanalys* på de X första träffarna kanske?

*till exempel http://www.faceplusplus.com/demo-detect/

Permalänk
Avstängd

Men tänk om det är en hen då?

Permalänk
Medlem
Skrivet av Alling:

Well, det är ju en omöjlig uppgift redan från början: Hur ska du göra med namn som Kim och Love? Hur ska du göra med utländska/ovanliga namn som inte finns i ditt register? Och hur definierar man ens tjej- och killnamn nu för tiden?

Inte då. Finns relativt få dubbelnamn. Att lägga in dem som undantag bör således inte vara några problem.

Permalänk
Medlem
Skrivet av rektor:

Men tänk om det är en hen då?

Då polisanmäler man personen för hets mot folkgrupp.

Permalänk
Medlem

Förstod inte riktigt om du menade att du inte ville använda utomstående databaser. Men det finns i alla fall ett API som heter genderize.io där man enkelt kan hämta information om vilket kön ett namn vanligtvis tillhör.

Här är ett exempel där jag använder mig av JSON.net för att konvertera JSON-datan till ett C#-objekt:

using System; using System.Net; using Newtonsoft.Json; namespace GenderFinder { class NameInfo { public string Name { get; set; } public string Gender { get; set; } public float Probability { get; set; } public int Count { get; set; } } class Program { static void Main(string[] args) { Console.Write("Enter a name: "); var name = Console.ReadLine(); NameInfo nameInfo = null; using (var w = new WebClient()) { var jsonData = string.Empty; try { jsonData = w.DownloadString("http://api.genderize.io?name=" + name); } catch (Exception e) { Console.WriteLine(e.Message); } nameInfo = !string.IsNullOrEmpty(jsonData) ? JsonConvert.DeserializeObject<NameInfo>(jsonData) : null; } if (nameInfo != null) { Console.WriteLine(nameInfo.Gender); } Console.ReadKey(); } } }

Permalänk
Medlem

Finns jobbigt många namn som används av båda könen... vet en kvinna i Norge som heter Göran, lite osäker på stavningen.

Common unisex names in English speaking countries include: Addison, Adrian, Ainsley, Alex, Alexis, Angel, Arden, Ashley, Aubrey, Avery, Bailey, Beverly, Blair, Brett, Cameron, Casey, Cassidy, Chance, Chase, Cherokee, Cody (Codi), Cory (Corey, Cori), Courtney, Dakota, Dale, Dana, Darby, Darcy, Devon (Devin), Dominique, Drew, Dylan, Elliott (Eliot), Ellis, Emerson (Emmerson), Emery, Evelyn, Finley, Fran, Gale (Gail), Grayson (Greyson), Hadley, Harlow, Harper, Hayden, Hayley, Hillary, Hollis, Hunter, Iman, Jamie, Jayden (Jaden, Jaiden), Jocelyn, Jordan, Joyce, Kai, Keegan, Kelly, Kelsey, Kendall, Kennedy, Kim, Kimberly (Kimberley), Lee (Leigh), Leslie (Lesley), Lindsay (Lindsey), Logan, London, Luca, Lynn (Lin), Mackenzie, Madison, Marlowe, Meredith, Micah, Morgan, Murphy, Noel (Noelle), Noor, Parker, Paris, Peyton (Payton), Phoenix, Quinn, Randy, Reese, Reilly (Riley), Remy, River, Robin, Rory, Rowan, Ryan, Sage, Sawyer, Shannon, Shelby, Shirley, Sheridan, Shiloh, Sidney (Sydney), Sky, Skyler (Skylar), Stacy (Stacey), Teagan (Taegan), Terry, Taylor, Tracy (Tracey), Vivian, and Whitney.

Permalänk
Medlem
Skrivet av Alling:

Well, det är ju en omöjlig uppgift redan från början: Hur ska du göra med namn som Kim och Love? Hur ska du göra med utländska/ovanliga namn som inte finns i ditt register? Och hur definierar man ens tjej- och killnamn nu för tiden?

Den enda jag träffat som hette Love var en häst. En valack mer precist.

Din tredje frågeställning är mer intressant, finns väldigt många som identifierar sig utanför de normala könsrollerna eller som har ett namn som inte stämmer överens med personens könsidentitet. Det finns kvinnor som heter Magnus, män som heter Sofie och personer som ser sig som varken man eller kvinna.

Med det sagt så ser jag hela frågeställningen som olösbar, vore både enklare och effektivare att ge en frågebox för kön. [Man / Kvinna / Annat]

Skrivet av rektor:

Men tänk om det är en hen då?

'Hen' är ett personligt pronomen i tredjepersons singularform, inte ett kön eller en könsidentitet.

Visa signatur

Desktop: | Win10 | InWin 303 | ASUS TUF X570 | AMD Ryzen 5 3600 | Noctua NH-U12S (PP) | Intel 600p 256GB | Gigabyte GTX 670 | 32GB DDR4 2400Mhz | Corsair RM650x | 3x 1080 Screens |
Datacenter: | 1x Physical | 1x Virtual |
Laptop: | 2x |

Dell Certified Technician

Permalänk
Inaktiv

Är det bara jag som tolkar det som att TS inte vill ha någon databas med namn? Eller är det som så att ni andra antar att det inte är vad som menas just för att det skulle vara omöjligt?

Permalänk
Medlem

Om det gäller svenska namn så är det väldigt vanligt att tjej namn slutar på en vokal, så du skulle kunna matcha sista bokstaven för att se om det är en vokal. Det kommer att finnas namn som inte gör det som t.ex Elisabeth eller kanske Sigrid så kommer inte vara korrekt om du inte lägger till undantag.

Permalänk
Medlem

Jag tror inte du kan göra den uppgiften utan att använda dig av två st listor, tex två dictionaries där namnet också är nyckeln så det går fort att hitta träff, som du använder för att jämföra namnen med. De listorna behöver du bara skapa upp en gång och sen återanvända.

Edit: Eller så kör du ett dictionary, namn som key, value int där 0 = both/unkown, 1 female, 2 male, eller så skapar du en egen typ för det.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av VexedRelic:

Om det gäller svenska namn så är det väldigt vanligt att tjej namn slutar på en vokal, så du skulle kunna matcha sista bokstaven för att se om det är en vokal. Det kommer att finnas namn som inte gör det som t.ex Elisabeth eller kanske Sigrid så kommer inte vara korrekt om du inte lägger till undantag.

Så vad händer med Gösta, Helge, Lasse, Hugo, Leo, Theo, Viggo, Olle, Otto, Svante...

Det är sant att de flesta flicknamn slutar på vokal och de flesta pojknamn på konsonant, men listorna på undantag blir rejält stora oavsett.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem

Lär dig onomatologi och inse vidden på projektet. Men detta är ju inte direkt första gången TS kommer med dåligt underbyggda frågor

Permalänk
Avstängd
Skrivet av Villor:

Förstod inte riktigt om du menade att du inte ville använda utomstående databaser. Men det finns i alla fall ett API som heter genderize.io där man enkelt kan hämta information om vilket kön ett namn vanligtvis tillhör.

Här är ett exempel där jag använder mig av JSON.net för att konvertera JSON-datan till ett C#-objekt:

using System; using System.Net; using Newtonsoft.Json; namespace GenderFinder { class NameInfo { public string Name { get; set; } public string Gender { get; set; } public float Probability { get; set; } public int Count { get; set; } } class Program { static void Main(string[] args) { Console.Write("Enter a name: "); var name = Console.ReadLine(); NameInfo nameInfo = null; using (var w = new WebClient()) { var jsonData = string.Empty; try { jsonData = w.DownloadString("http://api.genderize.io?name=" + name); } catch (Exception e) { Console.WriteLine(e.Message); } nameInfo = !string.IsNullOrEmpty(jsonData) ? JsonConvert.DeserializeObject<NameInfo>(jsonData) : null; } if (nameInfo != null) { Console.WriteLine(nameInfo.Gender); } Console.ReadKey(); } } }

Dold text

Jag prova med namn Robin den tog det som ett tjej namn.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Avstängd

Jag tror det är lättare att kolla personnummer för att veta om det är en tjej eller kille då man kan kolla dom sista nummer på personnummer om det är ett jämnt tal då är det en tjej och det är ett ojämnt tal då är det en kille.

Och sen så hämta man namn på personnummer och sen vet om vilken kön dom har.

Då jag kom på sen efter jag gjorde den här tråden att jag kommer att behöva deras personnummer med och då vart allt mycket lättare.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Skrivet av zxhosting:

Jag tror det är lättare att kolla personnummer för att veta om det är en tjej eller kille då man kan kolla dom sista nummer på personnummer om det är ett jämnt tal då är det en tjej och det är ett ojämnt tal då är det en kille.

Och sen så hämta man namn på personnummer och sen vet om vilken kön dom har.

Då jag kom på sen efter jag gjorde den här tråden att jag kommer att behöva deras personnummer med och då vart allt mycket lättare.

tyvärr gäller inte logiken med de 4 sista i personnnumret alla årskullar så du vet

Permalänk
Skrivet av zxhosting:

Jag prova med namn Robin den tog det som ett tjej namn.

http://sv.wikipedia.org/wiki/Robin

Skrivet av Wikipedia:

Namnet används både som mansnamn och som kvinnonamn. I Sverige är det vanligast som mansnamn, men i till exempel USA är namnet tre gånger så vanligt som flicknamn än som pojknamn. Förklaringen till populariteten som mansnamn i Sverige kan delvis förklaras med den extrema modevågen namnet hade i slutet av 1980-talet kopplat till Björn Borgs son Robin. 1989 och 1990 var det över 2000 pojkar per år som fick namnet och det låg som högst 2:a på namntoppen.

Permalänk
Medlem
Skrivet av zxhosting:

Jag prova med namn Robin den tog det som ett tjej namn.

Det beror just på att det finns fler kvinnliga Robin i databasen än manliga. Om du kollar NameInfo så innehåller den även ett fält som heter Probability (sannolikhet). Just för Robin ligger sannolikheten på 53%, vilket betyder att det i 53% av fallen är ett tjejnamn, och i 47% av fallen ett killnamn.

Vill du så kan du ju lägga till något som kollar om sannolikheten är t.ex. under 75% och då sätter Gender till "unisex" eller något:

if (nameInfo.Probability < 0.75) { nameInfo.Gender = "unisex"; }

Permalänk
Medlem
Skrivet av PatrikNordstrm:

tyvärr gäller inte logiken med de 4 sista i personnnumret alla årskullar så du vet

Födelsenummret mao dom 3 sista är alltid udda för man och jämt för kvinna. Sisat är bara en modula 10 kontroll siffra.
Före 1990 kunde man utifrån dom två första i födelsenummret utläsa vilket län man var föd i, numera delas serier ut slumpvis i landet.

- i personummer kan vara ett + om personen ifråga är =>100. Det är därför en del blir kallade till förskola då det finns system inte hanterar +:et Mao lite kuriosa.

Visa signatur

..:[EVGA Z97 Classified][Intel Core i7 4790K @ 4.8][4x8GB Dominator @ 2133 XMP][2x EVGA GTX 980 Ti SC+ ACX 2+][Cooling EKWB custom loop]:..
..:[EVGA X99 FTW K][Build in progress]:..

Permalänk
Medlem
Skrivet av LazySoft:

Födelsenummret mao dom 3 sista är alltid udda för man och jämt för kvinna. Sisat är bara en modula 10 kontroll siffra.
Före 1990 kunde man utifrån dom två första i födelsenummret utläsa vilket län man var föd i, numera delas serier ut slumpvis i landet.

- i personummer kan vara ett + om personen ifråga är =>100. Det är därför en del blir kallade till förskola då det finns system inte hanterar +:et Mao lite kuriosa.

Förtydligande då jag uppfattade ditt inlägg som otydligt genom att citera skatteverket
"Födelsenumret består av tre siffror, där sista siffran är udda för män och jämn för kvinnor. Mellan födelsetiden och födelsenumret finns ett bindestreck (-), som byts ut mot ett plustecken (+) det år en person fyller 100 år."

Permalänk
Medlem
Skrivet av zxhosting:

Jag prova med namn Robin den tog det som ett tjej namn.

Har du inte sett HIMYM pojk!?

Robin Scherbatsky...

Permalänk
Medlem
Skrivet av aluser:

Förtydligande då jag uppfattade ditt inlägg som otydligt genom att citera skatteverket
"Födelsenumret består av tre siffror, där sista siffran är udda för män och jämn för kvinnor. Mellan födelsetiden och födelsenumret finns ett bindestreck (-), som byts ut mot ett plustecken (+) det år en person fyller 100 år."

Ingen fara, jag tog det ur huvudet då jag har hållt på med sådan programmering gällande kontroll av personummer
Det finns andra undantag då man plusar födelsedagen med 60 tex.

Visa signatur

..:[EVGA Z97 Classified][Intel Core i7 4790K @ 4.8][4x8GB Dominator @ 2133 XMP][2x EVGA GTX 980 Ti SC+ ACX 2+][Cooling EKWB custom loop]:..
..:[EVGA X99 FTW K][Build in progress]:..

Permalänk
Avstängd
Skrivet av DOGE:

Har du inte sett HIMYM pojk!?

Robin Scherbatsky...

Visste inte om att tjejer kan heta Robin det var något nytt för mig. Har bara gått i udda skola där det bara mest killar och inte tjejer så kan typ inget om tjej namn.

Skrivet av LazySoft:

Ingen fara, jag tog det ur huvudet då jag har hållt på med sådan programmering gällande kontroll av personummer
Det finns andra undantag då man plusar födelsedagen med 60 tex.

Har du lust att göra en kod som kollar på personnummer om det är en tjej eller kille? Om jag fattar det rätt så kolla man på dom 4 sitta siffra eller var det 3?

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

Har du lust att göra en kod som kollar på personnummer om det är en tjej eller kille? Om jag fattar det rätt så kolla man på dom 4 sitta siffra eller var det 3?

Det beror på hur man läser in personnummer. I dag föredrar de flesta att man använder fullständigt 19701010-1010 istället för 701010-1010. Tex BankID vill ha fullständigt. I de fall man kan mata det korta måste då programmeraren lägga på århundradet.

Så i ditt fall ta in personnumret som en sträng lyft ur näst sista tecknet i strängen och gör en koll på om det är udda eller jämt.
Skicka in persNrIn som sträng och gör följande

System.String persNrOut;
persNrOut = persNrIn.Char[persNrIn.Length - 1]

Gör sedan en koll på om persNrOut är udda eller jämt. Här finns olika sätt att göra det så det lämnar jag till dig att klura ut.

Visa signatur

..:[EVGA Z97 Classified][Intel Core i7 4790K @ 4.8][4x8GB Dominator @ 2133 XMP][2x EVGA GTX 980 Ti SC+ ACX 2+][Cooling EKWB custom loop]:..
..:[EVGA X99 FTW K][Build in progress]:..

Permalänk
Medlem

Hint persNr % 2 == 0

Visa signatur

..:[EVGA Z97 Classified][Intel Core i7 4790K @ 4.8][4x8GB Dominator @ 2133 XMP][2x EVGA GTX 980 Ti SC+ ACX 2+][Cooling EKWB custom loop]:..
..:[EVGA X99 FTW K][Build in progress]:..

Permalänk
Avstängd
Skrivet av LazySoft:

Det beror på hur man läser in personnummer. I dag föredrar de flesta att man använder fullständigt 19701010-1010 istället för 701010-1010. Tex BankID vill ha fullständigt. I de fall man kan mata det korta måste då programmeraren lägga på århundradet.

Så i ditt fall ta in personnumret som en sträng lyft ur näst sista tecknet i strängen och gör en koll på om det är udda eller jämt.
Skicka in persNrIn som sträng och gör följande

System.String persNrOut;
persNrOut = persNrIn.Char[persNrIn.Length - 1]

Gör sedan en koll på om persNrOut är udda eller jämt. Här finns olika sätt att göra det så det lämnar jag till dig att klura ut.

int Num = Convert.ToInt32(textBox2.Text); if (Num % 2 == 0) { MessageBox.Show("Tjej"); } else { MessageBox.Show("Kille"); }

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

int Num = Convert.ToInt32(textBox2.Text); if (Num % 2 == 0) { MessageBox.Show("Tjej"); } else { MessageBox.Show("Kille"); }

Nästan
textBox2.Text är hela personnumret så fungerar det ju inte.
textBox2.Text.Char[textBox2.Text.Length - 1] i stället så får det näst sista numret i personnumret.

Men du bör ha en check på att det som kommer via textBox2 verkligen är ett personnummer.

Visa signatur

..:[EVGA Z97 Classified][Intel Core i7 4790K @ 4.8][4x8GB Dominator @ 2133 XMP][2x EVGA GTX 980 Ti SC+ ACX 2+][Cooling EKWB custom loop]:..
..:[EVGA X99 FTW K][Build in progress]:..