Expresiones regulares y traducción (parte I)

Hace ya un tiempo escribí un post sobre expresiones regulares y QA. La cuestión es que entre ese artículo, la experiencia del día a día, los comentarios del blog y otras publicaciones me ha parecido oportuno volver a retomar el tema para proporcionar una panorámica más amplia sobre el asunto. Mi intención es ofrecer a los lectores una serie de dos o tres posts en los que poco a poco se aclare el funcionamiento y la utilidad de esta poderosa herramienta de corte informático. Por experiencia, he constatado que en materia de conocimiento y dominio de expresiones regulares, en el mundo de la traducción y la localización se aprecia un salto cualitativo en los profesionales que las aplican en su día a día para agilizar su trabajo así como garantizar una mayor calidad de su trabajo. Este es principalmente el motivo por el que me he decidido a comenzar esta serie de artículos de tono didáctico que inauguro con el presente post.

Hecha la exposición preliminar, en primer lugar es necesario aclarar que las expresiones regulares no son un lenguaje de programación en sí, sino una sintaxis especial que se incorpora (se implementa) en muchas aplicaciones creadas con diferentes lenguajes de programación. Por ejemplo, se implementan en la mayoría de las herramientas CAT. Se trata de una sintaxis enfocada a buscar (y reemplazar) cadenas o patrones de texto. Dada su naturaleza, la clave de las expresiones regulares radica pues en definir muy claramente qué patrón de texto necesitamos encontrar. Reitero la idea: las expresiones regulares por sí mismas (las reglas sintácticas) no son excesivamente complicadas, lo difícil es identificar con precisión el tipo de cadena textual que necesitamos encontrar y qué queremos hacer con ella. En otras palabras, lo complicado es usarlas para que realmente puedan ayudarnos a solucionar problemas concretos ahorrando más tiempo del que exigen para su planteamiento.

Expresiones regulares

A continuación presento una recopilación de los elementos u operadores básicos de la sintaxis de las expresiones regulares a modo de tabla de referencia rápida para el futuro y más abajo comento un ejemplo más detallado para contextualizarlas. En todos los ejemplos, se da por hecho que estamos realizando búsquedas con aplicaciones compatibles con expresiones regulares en las que la opción correspondiente está activada. Por último, hay que indicar a este respecto que estos operadores son los clásicos; puede que en algunos programas las expresiones regulares se hayan implementado variando la grafía de los operadores (por ejemplo, para negar en Word, se usa [!]).

Búsqueda de caracteres alfanuméricos
Caracteres literales: todos los caracteres alfanuméricos pueden usarse en las búsquedas, es decir, se emplean como en las búsquedas habituales. Por ejemplo: al buscar con expresiones la combinación abracad, encontraremos las palabras que contengan estos caracteres literales, como en el caso de la palabra abracadabra.. (el caracter de punto): se busca cualquier caracter, salvo el de nueva línea. Es importante resaltar que al usar el punto (.) sólo se busca un único caracter. Por ejemplo, al buscar por car.a, encontramos tanto carga como carca.

[]: los corchetes se usan para definir grupos de caracteres para la búsqueda (de forma predeterminada, no se distingue entre mayúscula y minúscula). Por ejemplo, con [012345] se encontraría cualquier ocurrencia de 0, 1, 2, 3, 4 o 5 (pero sólo una).

– []: el guión se usa para indicar un intervalo. Existen una serie de intervalos predefinidos:

– [A-Z]: se encuentra cualquier caracter entre la A y la Z en mayúscula.

– [a-z]: se encuentra cualquier caracter entre la a y la z en minúscula.

– [A-z]: se encuentra cualquier caracter ASCII entre la A y la z. Al tratarse de caracteres ASCII, se incluyen también los caracteres [ y ^.

^ (dentro de corchetes): el acento circunflejo sirve para NO encontrar todos los caracteres o grupos de caracteres indicados dentro de los corchetes, es decir, permite excluir caracteres de una búsqueda. Por ejemplo, una regexp con [^abc] no encontrará nunca ni a, ni b ni c.

Explicados los operadores textuales básicos, veamos un pequeño ejemplo práctico que combina varios operadores. Digamos que tenemos el siguiente texto totalmente ficticio:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut luctus lacus in metus convallis sit amet consectetur leo imperdiet. PORTA01 Suspendisse suscipit hendrerit enim sed interdum. Praesent dui felis, iaculis ullamcorper iaculis eget, vestibulum eget ipsum. Phasellus fringilla rutrum turpis ut lacinia. Ut dapibus enim ut mauris feugiat auctor. In hac habitasse platea dictumst. Mauris gravida eros varius metus tristique condimentum. Sed quis mi nisi. Donec interdum malesuada Porta35 neque non laoreet. Curabitur pulvinar porta est, quis malesuada urna rutrum eget. Curabitur porta tempor sapien, ultrices condimentum tortor rhoncus et. Aliquam sit amet arcu eget leo tincidunt dignissim vitae PoRTa80 sed leo. Integer orci tellus, facilisis eget elementum tristique, ultrices quis magna. Nunc nunc magna, pulvinar tempor fermentum quis, sollicitudin sed ante.

En él se incluyen nombres de producto cuya forma sigue el patrón PORTAXX, donde XX es un número cualquiera. Por la instrucción de nuestro cliente, en el texto meta, PORTA siempre tendrá que ir en mayúscula. Por tanto, lo que nos interesa es localizar sólo los nombres de producto en el texto y comprobarlos. Para ello, en lugar de ir visualmente uno por uno o probando con las diferentes combinaciones de mayúscula y minúscula (como vemos en el texto anterior, resaltado en rojo, hay diversos formatos en el texto de partida para los nombres de producto), lo que hacemos es utilizar los operadores textuales para crear la siguiente expresión: [Pp][Oo][Rr][Tt][Aa][0-9][0-9].

Con esta expresión (que en realidad puede mejorarse, como se verá más adelante) buscamos cada una de las letras de la palabra porta en todas sus combinaciones de mayúscula y minúscula, así como, a continuación, cualquier combinación de dos números entre 0 y 9. Es interesante destacar que, con esta expresión básica, nos ahorramos las dos ocurrencias de porta (no seguidas de número) que aparecen dentro del párrafo del ejemplo.

Ahora viene la pregunta del millón: ¿para qué sirve esto en el mundo de la traducción? Bueno, como ya expliqué en mi post anterior mencionado al principio, las expresiones regulares nos permiten mejorar considerablemente las prestaciones de las funciones de control de calidad de las herramientas CAT. Por ejemplo, pueden utilizarse para, entre otras cosas (ya veremos usos más avanzados en el siguiente post de la serie), hacer búsquedas y reemplazos de terminología (buscando de una vez todas las ocurrencias en mayúscula y minúscula), para buscar patrones de texto prohibidos (por ejemplo, : [A-Z] para evitar la mayúsculas tras los dos puntos en español), para, en herramientas CAT, filtrar por tipos de segmentos que contienen determinados patrones de texto (por ejemplo, mostrar sólo los segmentos que contengan algún número [0-9]), etc.

Como se comentó al inicio, lo más difícil consiste en analizar bien nuestros problemas para, acto seguido, considerar la posibilidad de aplicar las expresiones regulares para solventar el problema.

En este primer post de la serie sobre expresiones regulares se ha tratado el concepto y la introducción a las búsquedas exclusivamente con operadores textuales básicos. En los siguientes artículos se tratará la combinación de los anteriores con otros operadores más avanzados que permiten realizar consultas más complejas. No obstante, este tipo de habilidades requiere un poco de práctica, así que os invito a probar primero con los caracteres textuales para que nadie se quede rezagado de cara al próximo post de la serie sobre expresiones regulares.

Un saludo,

Álvaro

Recomendación musical: Rob Thomas y los suyos (Matchbox Twenty) han sacado nuevo disco tras años de inactividad. Os propongo el primer corte de su nuevo álbum North, titulado Parade.

Anuncio publicitario