En el alfabeto español tenemos caracteres en mayúscula / minúscula y con acentuaciones tal y como sucede en otros alfabetos. En la entrada anterior como filtrar palabras en Postgres con un patrón dado, vimos que los signos diacríticos y los caracteres en letra capital pueden suponer un problema cuando realizamos consultas con un patrón e intentamos obtener determinados datos, el resultado no era muy satisfactorio quedando algunos registros sin aparecer debido al acento o por que había algún carácter en mayúscula, etc. Tenemos un curso para filtrar palabras en PostgreSQL muy completo sobre esta temática, pero en esta entrada tienes una pequeña introducción para darte una guía sencilla y rápida.
Extensión unaccent para los acentos
Gracias a esta extensión unaccent, disponemos de un diccionario de búsqueda de texto que elimina los acentos de las palabras. Esto permite un procesamiento sin acento para el filtrado de texto completo.
El diccionario utiliza un archivo con un sistema de reglas, que debe de almacenarse en el directorio $SHAREDIR/tsearch_data/, utilizando la codificación UTF-8 y su nombre debe terminar en .rules. Dentro de este archivo, cada línea es una traducción, que consiste en un carácter con acento seguido de un carácter sin acento o de una cadena sin espacios.
Esta imagen es una parte del archivo unaccent.rules, que se trata del sistema de reglas predeterminado del diccionario unaccent que se crea por defecto. Muy útil para la mayoría de los idiomas europeos.
Funcionamiento de unaccent para quitar los acentos
Una vez que ya tenemos instalado esta extensión en una base de datos, puedes hacer uso de una función para quitar los acentos. La función unaccent() admite uno o dos argumentos. El primer parámetro es el diccionario que queremos utilizar, se puede omitir para utilizar el diccionario predefinido (unaccent). En el segundo argumento, debemos de introducir la cadena de caracteres que queremos obtener sin acentos. El resultado de la función unaccent() será la misma cadena de caracteres introducida en el segundo parámetro sin los signos diacríticos, según el archivo de reglas utilizado por el diccionario.
El servidor PostgreSQL dispone de varios diccionarios implementados, según el idioma que utilices. Puedes ver una lista completa de los diccionario con el meta-comando \dFd.
Es posible disponer de otro archivo de reglas para un diccionario en particular. Para ello si tenemos en cuenta que se ha creado el archivo my_rules.rules para el diccionario spanish_stem, hay que ejecutar la siguiente sentencia:
ALTER TEXT SEARCH DICTIONARY spanish_stem (RULES=’my_rules’);
Ejemplos utilizando la extensión
Como puedes ver en los ejemplos, estamos utilizando el diccionario predefinido. Con esto hacemos que sustituya las letras que tienen tildes por letras sin tilde. Y además de quitar los signos diacríticos, también sustituye otra serie de símbolos, como puede ser el doble comillas.
Conclusión
Recuerda que en el curso para filtrar palabras en PostgreSQL, puedes ver cómo se utiliza la extensión unaccent.
Podemos crear nuestros propios archivos de reglas para el diccionario que utilicemos, y así sustituir aquellos caracteres especiales que tengamos almacenarlos en nuestras bases de datos. Haciendo uso de esta extensión vamos a poder extraer información más ajustada a los filtros que realicemos, pero tenemos que ser conscientes de los diccionarios que tenemos configurados y tener más cuidado a la hora de guardar determinados caracteres.