Automagi: finne kjønn fra navn
Jeg er en stor fan av automagi. For meg er det et sikkert tegn på kvalitet når en dings, et program eller en webapplikasjon gjør noe for meg som er smart, flott, pent og kanskje viktigst: uventet. Det kan dreie seg om småtterier, ting som du selv hadde brukt bare få sekunder på å fikse, men som utvikleren likevel har tatt seg tid til å fri deg for. Eller at programvaren finner opplysninger som du trodde du måtte strebe lenger etter. Eller funksjoner som ikke er åpenbare, men som likevel aktiveres når du trenger dem, via automagi.
Google har en del slike eksempler. For meg ga valutakalkulatoren deres en slik opplevelse. Jeg prøvde å finne en valutakalkulator via Google, da det viste seg at Google hadde allerede laget funksjonen rett i søkemotoren! Steike, hvor praktisk.
Facebook har også mye automagi. Når et nytt par kommer i minifeeden, og “are now officially in a relationship”, finner Facebook automagisk fram et bilde av paret. Selvfølgelig er det ikke noe teknisk vanskelig når de allerede har taggsystemet, men det er likevel godt kommet på.
I all min fascinasjon av slike funksjoner må jeg selvsagt lage noen selv når jeg har sjansen.
Finne kjønn fra fornavn
Et prosjekt jeg holder på med på fritiden, noen ganger, innimellom alle TV-seriene og sovinga og GT5P-spillinga, inneholder en brukerregistrering.
Av og til kan det være kjekt å vite hvilket kjønn en bruker er.
Min oppdagelse var at i de aller fleste tilfeller, det vil si alle på min Facebook-venneliste, pluss alle jeg fant på diverse websider med navnelister, kunne man automatisk finne ut hvilket kjønn brukeren er. Det må tas høyde for bugs, slik at det må gå an å angi kjønn selv, men med en slik metode kan man foreslå kjønn — og i de aller fleste tilfeller ha rett.
- function autosex($name) {
- // Main rule: vowels are girls, consonants are boys.
- $boy = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z');
- // Exeptions (either whole names, or endings)
- array_push($girl, 'lin', 'unn', 'it', 'id', 'ig', 'borg', 'bjørg', 'ild', 'rin', 'vår', 'iken', 'ritt', 'th', 'bet', 'inger', 'sti', 'stin', 'liv', 'run', 'hildur', 'lillian', 'lilian', 'vigdis', 'ren', 'iv', 'inn', 'ann', 'agnes', 'helen', 'ett', 'len', 'ill', 'il', 'marion', 'rakel', 'gjerd', 'maj', 'carmen', 'ljot', 'dagmar', 'edel', 'ellinor', 'ester', 'evelyn', 'frøydis', 'gerd', 'rud', 'vor', 'nnah', 'dis', 'iris', 'ret', 'reth', 'miriam', 'mor', 'aug', 'sarah', 'sidsel', 'sissel', 'siw', 'vivian', 'summer');
- array_push($boy, 'andre', 'andré', 'helge', 'ingo', 'roberto', 'sondre', 'onny', 'arne', 'tle', 're', 'arild', 'tommy', 'ståle', 'rve', 'ole', 'rune', 'pelle', 'jarle', 'frode', 'inge', 'agne', 'dino', 'kenneth', 'henry', 'ove', 'finn', 'rje', 'aute', 'brede', 'mike', 'ola', 'emil', 'stig', 'olai', 'skild', 'skil', 'tony', 'vid', 'kai', 'ludvig', 'åge', 'age', 'asle', 'audunn', 'børge', 'cato', 'denny', 'egil', 'gisle', 'rry', 'hugo', 'jo', 'remi', 'roy', 'sigve', 'viggo', 'willy', 'kjetil', 'bertil', 'yngve');
- // Known bugs: Ari, Carola, Ali
- // Checks for each sex. If exeption is invoked, this gives higher priority of the determinition.
- foreach ($girl as $end) {
- }
- foreach ($boy as $end) {
- }
- if ($sg) { $s = 'g'; } // The order determines the priority
- if ($sb) { $s = 'b'; }
- if ($girl_exept) { $s = 'g'; }
- if ($boy_exept) { $s = 'b'; }
- return $s;
- }
Funksjonen er enkel, og muligens mest et proof-of-concept. Likevel fungerer den forbausende godt. Foreløpig vet jeg bare om tre navn som ikke fungerer: Ari, Ali og Carola.
Funksjonen kan for eksempel kalles opp via AJAX for å finne kjønnet, og så sette dette som “selected” i et select-element.
Det kan godt hende det finnes bedre metoder også. En metode som kan være enda mer pålitelig, er å sjekke Statistisk sentralbyrås navnestatistikk for hvert kjønn, og sammenlikne disse.
Finner du noen flere navn som ikke fungerer? Skriv en kommentar!
Veldig bra artikkel! Det er så banalt enkelt; småting som gjør en glad.
Å hente data fra statistisk sentralbyrå blir tungt og ressurskrevende, og det er ikke krise om testen slår feil ut. Det er jo et forslag.
Små ideer som er for banale til å bli husket på er fint:)
[...] blir mye automatisering av småtterier på web her i starten av blogggen. Den første posten var om å finne kjønn ut i fra fornavn. Denne gangen er det tidssone vi skal [...]
“Scriptet tipper at KALLE er ei jente”
Kim: Hehe! Noen bugger er det. Heldigvis er de aller fleste veldig enkle å fikse. I tilfellet Kalle, som omtrent 0,0015 prosent av befolkningen heter ([1] [2]), vil det være bare å legge inn “kalle” som et unntak i $boy.
Jeg ble jo pent til til å lage et program som henter ut kjønnet via SSB. Bruker i snitt 0,6 sek for å finne riktig.
There you go.
Ingenting å si på den hastigheten!
Idun og Tyri slå feil ut.