El siguiente script identifica el genero de un nombre dado, utilizando una lista de nombres+genero. Los valores que devuelve son: {m, f, a}, correspondientes a masculino, femenino o ambiguo.
La lista contiene más de 46mil nombres + genero, unificados de las siguientes fuentes:
• Lista de nombres de la librería nltk
• Lista nombres de la librería gender_guesser
• Lista de nombres argentinos publicados aqui
También se hicieron otras modificaciones para nombres hispanos, como borrar apellidos, agregar diminutivos, nombres cortos, alias, entre otros.
R script:
libs<-c('tm','stringi') lapply(libs,require, character.only= TRUE) # FUNCIONES ------------------------------ clean_txt <- function(txt){ txt <- stri_trim(gsub('[[:punct:][:digit:] ]+',' ',tolower(txt))) return(strsplit(txt, " ")[[1]]) } get_gender2 <- function(nombre, lista_nombres="") { nombre <- clean_txt(nombre) nombre <- subset(nombre, nombre %in% lista_nombres) mylist <- list() mylist[c("f", "m","a")] <- 0 for (i in 1:length(nombre)){ g <- as.character(df[which(df$nombre == nombre[i]),"genero"]) g <- ifelse(identical(g, character(0)), 'a', g) if(i==1){ mylist[[g]] <- mylist[[g]] + 2 } else{ mylist[[g]] <- mylist[[g]] + 1 } g2 = sapply(mylist, function(x) x[which.max(abs(x))]) return(names(g2[g2==max(g2)])[1]) } } # DATOS --------------------------------- path <- 'https://www.dropbox.com/s/edm5383iffurv4x/nombres.csv?dl=1' df <- read.csv(path, sep=",", colClasses = "character") get_gender2("jose maria altagracia", df$nombre)
Me sirvió la base que generaste un montón, muchas gracias!
ResponderEliminarY si quiero meter un vector lleno de nombres?
ResponderEliminarbuenas tardes? lo has podido resolver? gracias!
EliminarHola, está roto el enlace de dropbox. ¿Podrías compartir el csv?
ResponderEliminarDesgraciadamente el enlace estaba roto, por lo que armé mi propio listado recuperando la información de ese sitio mediante un programa de web scraping . dejo aqui el link. https://github.com/LW6EGE/Nombre_sexo si puedes subirlo sería genial. saludos!!!!
ResponderEliminarGracias por el aporte Emiliano.
EliminarYa está actualizado en enlace, dejo link del archivo desde mi dropbox:
https://www.dropbox.com/s/edm5383iffurv4x/nombres.csv?dl=1
Buenas tardes te hago una consulta, estoy intentando utilizar tu código, que me es muy útil, pero quiero lograr que me identifique el género de una lista preexistente mia. Como debería hacer (imaginaba con un mutate). gracias!
ResponderEliminar