Reemplazar caracteres

Una de la funciones más habituales de analizar texto como lenguaje natural es el reemplazar caracteres: quitar tildes, cambiar mayúsculas por minúsculas, reemplazar signos de puntuación, etc. Su utilidad es simplificar el texto para facilitar el análisis, la búsqueda en diccionarios o la separación en tokens.

Hay muchas funciones para reemplazar caracteres, desde el remplace más simple hasta cosas más complejas como expresiones regulares. ¿Para qué inventar uno nuevo?. Por sencillez y velocidad. El método que utilizamos aquí es muy simple, no permite reemplazos complicados como las expresiones regulares, solo remplazar un carácter por otro, pero a cambio es capaz de realizar todos los reemplazos en una sola iteración al texto.

Su funcionamiento es sencillo, se crea un hashmap donde el carácter a remplazar es la clave y el carácter que lo reemplaza el valor. Luego se recorre el texto caracter a caracter y se consulta en el hashmap si existe un valor para el carácter actual, si es así se remplaza, si no se deja el carácter tal cual.

Para usarlo basta con añadir los caracteres, se pueden añadir de uno en uno o varios a la vez.

replace.add(“A”,”a”);

replace.add(“Aåáäâ”, “a”);

También se puede reemplazar un carácter por varios.

replace.add(“/”,” dividido por “);

No así al revés, no se pueden reemplazar varios caracteres.

Si se reemplaza por una cadena vacía será como borrar el carácter del texto

replace.add(“:”, “”);

Una vez configurado el diccionario basta con llamar al método replace con el texto a tratar, como resultado devolverá el texto con los reemplazos realizados.

text = replace.replace(text);

En el repositorio de la libreria se puede ver un ejemplo de funcionamiento. En él se crea un conversor a “ninini” (léase con ritmo de “chincha pincha”). Para ello se transforman todas las vocales a letras “i”.

En el ejemplo se puede ver que no bastaria solo con reemplazar los caracteres hay casos como “qii” y “gii” que necesitan un tratamiento posterior. Por eso es importante elegir bien que métodos de reemplazo a usar y el coste en tiempo de los mismos.

Finalmente hay una funcionalidad más que aporta esta librería. Si se fija un valor para la propiedad default cuando no se encuentre un carácter en el hashmap, en lugar de dejarlo igual, lo reemplazará por el valor de default. Por ejemplo en este caso eliminará todos los caracteres no

replace.setDefault(“”);