Averiguar el genero de un nombre con PHP – PHP Tips

El otro día tuve un pequeño problema, tenia que diseñar un formulario, en el cual se recogen los datos desde una base de datos de nombres para luego procesarlos en otro sitio, bien pues cuando obtenía los datos quería que me apareciera el tratamiento (Don o Doña) de la persona que estaba seleccionando y esto quería hacerlo automáticamente.  Una de las primeras cosas que hago cuando me suceden estos dilemas es ponerme a programarlo por mi cuenta, gran fallo, ya que una de las cosas que tenemos que pensar es que esto es una situación habitual y seguramente hay alguna función que nos permita hacerlo de una manera sencilla.

Antes de ponerme a pensar que existiera esa función intente crear una función para solucionar este problema de una manera sencilla. En principio todos los nombres que tengo en la base de datos están en castellano,  entonces pense, a ver la inmensa mayoría de los nombres de chica finalizan con ‘a’, pues bien voy a crear una función para obtener el ultimo carácter del nombre y si es ‘a’ es una chica, si no es un chico. Esta no es una buena solución, aunque tengo que decir que en la mayoría de los casos acierta, pero tenemos excepciones, por ejemplo, en el caso de las chicas (Rocio, Isabel,..) y en el caso de los chicos (Borja). Podríamos optar por agregar una array de excepciones, y cada vez que nos ocurriera una ‘mala coincidencia’ agregar esa excepción. Esta función quedaria de esta manera.

function detectaGenero($nombre) {
    $genero = "Chico";
    $excepcionesChico = array('Borja',);
    $excepcionesChica = array('Rocio','Isabel');
    $letra = substr($nombre, -1);
    if (($letra == 'a' || in_array($nombre, $excepcionesChica)) && !in_array($nombre, $excepcionesChico)) {
        $genero = "Chica";
    }
    return $genero;
}

Si esta función la ponemos a comparar nombres en otro idioma no nos serviria de nada, y luego seria tambien un inconveniente tener que estar cada vez que encontráramos una excepción agregarla al array.

La buena noticia es que existe una extensión PECL Gender, que una vez instalada en nuestro servidor nos permite llamar a la clase Gender y poder conocer el genero de ese nombre. El inconveniente, que es una extensión PECL y si nuestra aplicación web, esta en un hosting en el cual no podemos agregar este tipo de extensiones no nos sirve de nada, a no ser que el proveedor quiera instalarla.

Esta extensión es un port del programa gender.c escrito originalmente por Joerg Michael. Su base de datos de nombres contiene mas de 40000 nombres de 54 países.
La función anterior usando Gender quedaria así:

function detectaGenero($nombre) {
    $genero = "Chico";
    $gender = new Gender;
    $result = $gender->get($nombre);
    if ($result === Gender::IS_FEMALE OR $result === Gender::IS_MOSTLY_FEMALE) {
        $genero = "Chica";
    }
    return $genero;
}

Como podemos ver es mas sencilla que la anterior, mas fiable, y no tenemos que estar agregando excepciones, y pensar en los nombres en otros idiomas.
PHP: Gender – Manual

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s