Skip to content

Commit

Permalink
Merge pull request #5 from JaimeObregon/arielcguerr-master
Browse files Browse the repository at this point in the history
Resuelve #1: embellecer los nombres de los municipios
  • Loading branch information
JaimeObregon authored Jul 31, 2020
2 parents f7833e6 + 5f82fd1 commit 882a215
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 17 deletions.
66 changes: 66 additions & 0 deletions src/includes/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,69 @@ function parseFile($format, $filename) {

return $results;
}

/**
* Hace un embellecimiento del nombre completo de un candidato.
*
* @param [string] $name Nombre completo del candidato
* @return [string] Nombre completo embellecido
*/
function prettifyName($name) {
$map = [
'/ De La /' => ' de la ',
'/ Del /' => ' del ',
'/ De /' => ' de ',
'/ Y /' => ' y ',
'/ I /' => ' i ',
'/ E /' => ' e ',
];

// Hagamos un mínimo embellecimiento de la capitalización...
$name = mb_convert_case($name, MB_CASE_TITLE);
$name = preg_replace(array_keys($map), array_values($map), $name);

// ...y erradiquemos también los sufijos que entre paréntesis constan a veces. Ejemplos:
// - `Ramon Marrero Garcia (Independiente)`
// - `Celestino Gonzalez Bolaños (PCE L-M)`
$name = trim(preg_replace('/\(.+\)\s*$/', '', $name));

return $name;
}

/**
* Embellece el nombre de un municipios.
*
* Véase https://github.com/JaimeObregon/infoelectoral/issues/1
*
* @param [string] $name Nombre del municipio
* @return [string] Nombre del municipio embellecido
*/
function prettifyMunicipality($name) {
// Reemplazamos dobles espacios. Ejemplos:
// - `Saus, Camallera i Llampaies` → `Saus, Camallera i Llampaies`
// - `Cruïlles, Monells i Sant Sadurní de l'Heura` → `Cruïlles, Monells i Sant Sadurní de l'Heura`
$name = trim(preg_replace('/ {2,}/', ' ', $name));

// En el caso de municipios con dos nombres, cada uno ha de embellecerse por separado.
// Por ejemplo:
// - `Pinós, el/Pinoso` ha de ser `El Pinós/Pinoso`
// - `Lorcha/Orxa, l'` ha de ser `Lorcha/l'Orxa`, y no `l'Lorcha/Orxa`
$names = explode('/', $name);
foreach ($names as &$name) {
// He revisado automáticamente todas las tablas de decodificación de municipios del INE,
// así como también `MUNICIPIOS_INEXISTENTES`, y he obtenido así todos los posibles sufijos
// que pueden aparecer, tras una coma, en el nombre de un municipio. Son estos:
$sufijos = "#^(.+), (A|As|El|Els|Es|L'|La|Las|Les|Los|O|Os|Sa|Ses|el|els|l'|la|les)$#";
$name = preg_replace($sufijos, '${2} ${1}', $name);

// Pero lo correcto es `L'Albi` y no `L' Albi`
$name = preg_replace("/^[Ll]' /", "L'", $name);

// Y `l'Alfàs del Pi` ha de ser `L'Alfàs del Pi`
$name = ucfirst($name);
}

$name = implode('/', $names);

return $name;
}
21 changes: 4 additions & 17 deletions src/list.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
* Para la decodificación de los municipios la especificación oficial remite al INE.
* Pero los códigos cambian a comienzos de cada año, por lo que se hace preciso cargar
* la del año correspondiente.
*
*
* Y además es precesio añadir a la correspondencia los códigos que el Ministerio ha utilizado
* históricamente pero que el INE actualmente no reconoce.
*/
Expand Down Expand Up @@ -100,22 +100,9 @@
}
}

// Hagamos un mínimo embellecimiento de la capitalización...
$nombre = mb_convert_case($nombre, MB_CASE_TITLE);
$map = [
'/ De La /' => ' de la ',
'/ Del /' => ' del ',
'/ De /' => ' de ',
'/ Y /' => ' y ',
'/ I /' => ' i ',
'/ E /' => ' e ',
];
$nombre = preg_replace(array_keys($map), array_values($map), $nombre);
$nombre = prettifyName($nombre);

// ...y erradiquemos también los sufijos que entre paréntesis constan a veces. Ejemplos:
// - `Ramon Marrero Garcia (Independiente)`
// - `Celestino Gonzalez Bolaños (PCE L-M)`
$nombre = trim(preg_replace('/\(.+\)\s*$/', '', $nombre));
$municipio = prettifyMunicipality($result['Municipio']);

$candidatura = $result['Candidatura'];

Expand All @@ -125,7 +112,7 @@
'Sexo' => $result['Sexo'] ?? null,
'Candidato' => $nombre,
'Provincia' => $result['Provincia'],
'Municipio' => $result['Municipio'],
'Municipio' => $municipio,
'Siglas' => $candidaturas[$candidatura]['Siglas'] ?? null,
'Candidatura' => $candidaturas[$candidatura]['Candidatura'] ?? null,
];
Expand Down

0 comments on commit 882a215

Please sign in to comment.