La virtualización o el milagro de la multiplicación del pan y los PC

Hola a todos:

En primer lugar, quiero pedir disculpas por la falta de actividad reciente. Se avecinan cambios en el plano profesional y he estado muy ocupado en el último mes. Espero poder volver a retomar mi actividad habitual en la respuesta a preguntas, dudas, etc. a través del blog.

Manos a la obra. En este artículo (que espero sea breve) voy a tratar un tema de carácter informático: la virtualización. Según la Wikipedia, la virtualización es “la creación -a través de software- de una versión virtual de algún recurso tecnológico, como puede ser una plataforma de hardware, un sistema operativo […]”, no obstante, a efectos prácticos, para mí la mayoría de las veces la virtualización consiste en crear un segundo ordenador virtual dentro de mi propio equipo. Habrá gente que se pregunte, ¿y para qué le sirve esto a un traductor? Bueno, es sorprendente la de veces que he recurrido durante mi vida profesional a la virtualización; más abajo pongo ejemplos. Sin embargo, ahora mismo os dejo, a modo de receta, los ingredientes necesarios para virtualizar un PC:

1 – El software de reproducción de equipos virtuales gratuito de Vmware.

2- Una imagen de sistema operativo (un archivo de SO con la extensión .iso), o bien, un PC virtualizado (archivos con extensión .vmx). En este caso, por ejemplo, yo tengo una imagen de SO Windows XP creada a partir de mi propio ordenador. No obstante, en la red hay muchas, tanto de Windows como de Linux. La cuestión es tener licencia válida para activarla luego.

Estos dos elementos son lo único que necesitamos. Para crear una máquina virtual, lo único que hacemos es, en primer lugar, instalar el software VMware Player que he indicado arriba. A continuación, iniciamos el programa y, mediante el asistente, configuramos las características de nuestro nuevo ordenador virtual (capacidad, memoria ram, etc.) y, finalmente, utilizamos la imagen en formato .iso mencionada en el punto 2 para instalar el SO en el PC virtual. Realmente, como podréis observar, el proceso de instalación es idéntico al de un SO en un PC físico.

Tras finalizar la instalación del SO, al abrir VMware Player veremos que tenemos un archivo con el nombre del SO instalado, sobre el que podemos hacer clic para reproducirlo, tal y como se ve en la imagen (en mi caso, hay instalada una versión de Linux que se llama CS50 Appliance 17).

VmPlayer

Realmente, al hacer clic en el botón de reproducción, lo que hacemos es arrancar el ordenador virtual, es decir, es como si pulsáramos el botón físico de encendido de nuestro ordenador. Si creáis un PC virtual y lo arrancáis, el resultado en pantalla que tendréis será parecido a este. Como podéis observar, se trata pues del concepto de “un ordenador dentro de un ordenador” que mencioné al principio. Como es lógico, dentro de este nuevo ordenador virtual que hemos creado podemos trabajar con normalidad, es decir, podemos crear archivos, hacer instalaciones, almacenar trabajo, etc. Todo lo que hagamos, queda registrado dentro del archivo que Vmware Player crea al instalar el SO.

PC virtualizado y PC físico

Bueno, y de nuevo, todo este lío, ¿para qué me sirve a mí como traductor? Pues os doy unos ejemplos para los que yo he utilizado (y utilizo) la virtualización para que os hagáis una idea:

1 – Realización de testing: hay veces que para realizar testings es necesario disponer de varios equipos para, por ejemplo, comprobar cadenas de software localizado en idioma de origen y partida. En estos casos, en lugar de utilizar otro PC físico, si el cliente no presenta problemas, prefiero utilizar un PC virtual para un idioma (el de origen) y el PC físico para el otro (el de destino). Este procedimiento permite también poder instalar varias versiones de un SO dentro de un mismo PC, por ejemplo, instalar en un PC con Windows 7 máquinas virtuales con SO Win XP y Vista que un cliente nos pide también para un testing. Al usar la virtualización de esta forma, nos ahorramos el invertir en PC físicos adicionales y, además, se gana mucha flexibilidad, puesto que todo está accesible desde el mismo lugar.

2- Herramientas con requisitos muy específicos: para determinados trabajos, hay veces que es necesario prácticamente adaptar toda la configuración del ordenador (por ejemplo, para una herramienta que requiere una versión concreta antigua del servidor de SQL). En estos casos, a mí me resulta mucho más práctico crear una máquina virtual dentro de mi PC y adaptarla, en lugar de cambiar todo mi entorno de trabajo habitual.

3 – Ampliación de periodos de prueba: no estaba muy seguro de si poner esta, pero lo hago por la insistencia de un antiguo compañero de trabajo que me dijo que a mucha gente le encantaría saber esto. Como ya he dicho arriba, en los PC virtuales se pueden hacer instalaciones con total normalidad. Por ello, en ocasiones, cuando tengo que aprender a utilizar una nueva aplicación de software (una herramienta CAT, por ejemplo) y no tengo suficiente con el periodo de prueba de treinta días, opto por crear un PC virtual e instalarla dentro, de manera que gano otros treinta días de prueba. Obviamente, este procedimiento se puede repetir (crear el PC virtual e instalar el software que se necesite), de manera que, en cierto modo, estamos ampliando los periodos de prueba hasta que realmente se conoce la aplicación de software en cuestión y decidimos comprar la versión completa.

El lote completo: añadir Dropbox
Recuerdo que las primeras veces que instalé PC virtuales me resultaba muy engorroso pasar archivos del ordenador virtual al PC real. A veces incluso acababa usando el correo electrónico o el servidor FTP para copiar-pegar dentro de mi propio ordenador. No obstante, mi vida mejoró sustancialmente en este sentido en el momento que conocí Dropbox. ¿Por qué? Pues porque se me ocurrió que podía instalar Dropbox en mis PC virtuales y usar una carpeta de Dropbox como buzón general de almacenamiento de documentos y archivos de trabajo en el PC virtual. Hecho esto, sólo es cuestión de sincronizar Dropbox y, ¡voila!, tenemos acceso rápido y sencillo a los archivos desde cualquier parte.

Creo que con estas explicaciones breves (puede que falte información, pero como introducción valdrá para la mayoría), los ejemplos y el complemento del Dropbox, podéis empezar a hacer pruebas y ver qué os parece. Os garantizo que incluso para un traductor acaba siendo muy útil ser capaz de crear y gestionar PC virtuales. Además, se gana mucha destreza con el ordenador. Esto es todo., espero que os resulte útil la explicación.

Un saludo,

Álvaro

Recomendación musical: dado que Stereophonics ha sacado nuevo disco (Graffiti on the Train), ahí va uno de los temas, Roll the Dice.

Expresiones regulares y traducción (parte III)

¡Saludos a todos y feliz Navidad!

Ya se acerca el final del año 2012, que ha tenido sus más y sus menos, un año con bastantes cambios para mí, la verdad. Para cerrarlo y asimismo poner fin a la serie sobre expresiones regulares y traducción, en el siguiente post veremos los aspectos más avanzados del uso de las regexp que complementan a los operadores básicos vistos en los artículos anteriores de esta serie. Sin más dilación, vamos allá.

Ya sabemos cómo encontrar caracteres literales individuales, así como usar comodines para localizar tipos genéricos de caracteres, ahora es el momento de aprender a gestionar la repetición y el número de caracteres que queremos buscar. Como en los artículos anteriores, veamos una tabla de referencia con los patrones y metacaracteres de búsqueda correspondientes.

Patrones y metacaracteres para gestión de repeticiones

+ (signo más): al incluir el signo más tras una expresión regular, se encuentran uno o más caracteres de dicha regexp. Por ejemplo, mientras que [0-9] sirve para encontrar un número cualquiera entre 0 y 9, [0-9]+ sirve para encontrar uno o más números consecutivos.

* (asterisco): se usa exactamente igual que el anterior, solo que el asterisco sirve para encontrar cero o más repeticiones del carácter o rango de caracteres buscados con la regexp escrita.

? (signo de interrogación): se utiliza de forma parecida a los anteriores, con la salvedad de que ? sirve para encontrar cero o una repetición del carácter o rango de caracteres buscados.

{x} (corchetes): al crear un expresión regular seguida de corchetes con una cifra, especificamos el número exacto de ocurrencias de la regexp en cuestión que queremos encontrar. Por ejemplo, si ponemos “ {2}”, como resultado encontraremos todos los dobles espacios, pero únicamente los dobles (si hay tres espacios seguidos, no funcionará).

{x,y} (corchetes): cuando en un corchete usamos dos cifras separadas por una coma, estamos indicando un número mínimo (x) y máximo (y) de repeticiones que deseamos localizar.

{x,} (corchetes): al usar únicamente una cifra y una coma dentro del corchetes, especificamos el mínimo de repeticiones que se deben encontrar. Por ejemplo, si ponemos “ {2,}”, como resultado encontraremos todos los dobles espacios, espacios triples, cuádruples, etc.

Como podéis imaginar, al poder controlar con mucha más precisión la cantidad de caracteres que se recuperan para un intervalo o un único tipo de caracteres, tenemos mucha más potencia a nuestra disposición. Por ejemplo, si retomamos el ejemplo de la localización de números del artículo anterior, ahora podemos ver que dicha expresión podía mejorarse mucho. Así, en lugar de buscar \d\.\d (dígito, punto, dígito), ahora podríamos hacer algo como esto: \d+\.\d+ (uno o más dígitos, punto, uno más dígitos), o incluso precisarlo más con una regexp como \d+,\d{3}\.\d+ (uno o más dígitos – coma- tres dígitos – punto – uno o más dígitos) para buscar números con unidades de millar y decimales en formato de inglés británicos.

Una vez se conocen todos los operadores es cuestión de lo más complicado, es decir, exactamente lo que se comentó en el primer artículo de esta serie: definir bien qué queremos buscar (y eventualmente reemplazar) para así poder crear un patrón o expresión regular que lo represente exactamente.

Las subexpresiones

Tras ver todos los operadores, ahora me gustaría introducir otro concepto, el de las subexpresiones. Se trata sencillamente de usar paréntesis (como en matemáticas) para agrupar búsquedas y tratarlas como un único elemento. Por ejemplo, si en un texto se quieren buscar todos los años que empiecen por 18 o 19, podríamos usar la siguiente búsqueda: (18|19)\d{2}. De esta forma, buscaríamos en primer lugar 18 o 19 (¿se me olvidó mencionar que las regexp también permiten usar la barra vertical | como un operador booleano OR?) y, a continuación, exactamente dos dígitos cualquiera.Esta es en realidad una súper simplificación de todo lo que ofrecen las subexpresiones (siguiendo con el símil de la matemáticas, recordad los infinitos elementos anidados con paréntesis en las clases de álgebra), pero creo que suficiente para dejar claro cómo separar partes significativas de las regexp que creemos.

Bueno, creo que con esta introducción a los operadores para gestión de número de ocurrencias y las subexpresiones podemos dar por conceptualmente concluido este post (¡además se acaba el año 2012 y todavía tenemos muchas cosas que hacer!). Al combinar las nociones de los artículos anteriores y de este, prácticamente cualquier profesional que trabaje como traductor o localizador (en el sentido de la producción lingüística, que no de la preparación de archivos) podría ser capaz de crear expresiones complejas para crear controles de calidad personalizados, hacer búsquedas, filtrar el contenido de archivos, etc. Como ya he dicho anteriormente, el dominio de las expresiones regulares es cuestión de práctica, de cometer errores, de consultar regexp creadas por otros, comprenderlas y crecer desde ellas. Por ello, no puedo sino animaros a continuar practicando y usando las regexp en vuestro día a día para consolidar vuestros conocimientos.

No obstante, dado que en el sector de la traducción y la localización habitualmente las expresiones regulares se suelen utilizar también para la creación de definiciones de tipos de archivos y filtros personalizados para la extracción de cadenas de archivos y la preparación de archivos de traducción y localización, no puedo dar por zanjado este tema sin mencionar que obviamente quedarían por tocar temas como la anidación avanzada, uso de referencias a ocurrencias anteriores (backreferences), uso de operadores con alcance mínimo (lazy) o máximo (greedy), pseudo-variables, conversión entre mayúscula y minúscula, búsqueda contextual (hacia atrás/delante), uso de sentencias condicionales, etc. Se trata de conceptos bastante avanzados para los que en la mayoría de casos se requieren ciertas nociones de programación (para no perderse con las analogías, las referencias a lenguajes de programación, etc.). Por ello, y porque además me veo incapacitado para explicarlo todo con la seguridad y rigor necesarios (porque algunos conceptos no los tengo 100% manejados y cometo fallos), para los que queráis seguir avanzando con las expresiones regulares me gustaría recomendaros tres títulos: Mastering RegExp (O’Relly), Regular Expressions Cookbook (O’Relly) y Teach Yourself Regular Expressions In 10 Minutes (Ben Forta). Son parte del material bibliográfico con el que he ido aprendido y mejorando mi uso de las expresiones regulares. Por otra parte, también hay mucho material en la red.

brindisCon esta última nota bibliográfica llegamos al fin (al menos de momento) de la serie de artículos sobre expresiones regulares. Espero que os hayan resultado útiles y a que muchos os hayan animado a comenzar a utilizarlas. En serio, cuando uno se acostumbra a emplearlas a diario, acabo mejorando como profesional. Asimismo, con este post, llegamos también al fin del año 2012. Espero que a todos el 2013 os depare lo mejor.

Nos leemos en la blogosfera. ¡Feliz año nuevo!

Atentamente,

Álvaro

Recomendación musical: para terminar el año musical, un tema(zo) del disco del último mes que más me ha sorprendido (sobre todo por la juventud de su autor): Two Fingers de Jake Bugg.

Expresiones regulares y traducción (parte II)

Hola y saludos otoñales (casi invernales) a todos (los del hemisferio norte, en el sur, al revés):

En el anterior post de esta serie sobre expresiones regulares vimos la introducción general y el uso de los operadores básicos (caracteres literales, punto, corchetes, guión y acento circunflejo).

En esta segunda parte de la serie vamos a centrarnos en los caracteres con un significado especial más allá del propio literal: los metacaracateres. Los metacaracteres sirven para identificar o encontrar patrones de texto o formato que, de otra manera, resultaría bien imposible, bien muy complejo. En una implementación general de la sintaxis de las expresiones regulares nos encontramos con la siguiente selección de metacaracteres habituales, que presento en un cuadro para que pueda usarse como referencia rápida.

Metacaracteres de búsqueda

\ (barra invertida): la barra invertida sirve para anular (o “escapar” en términos informáticos) un metacaracter de forma que se utilice como un carácter literal. Por ejemplo, si hacemos una búsqueda por \\n (como veremos a continuación, \n es un metacaracter para un salto de línea manual) estaremos indicando que en lugar de buscar un salto de línea se busque el carácter de barra invertida seguido del carácter n (práctica habitual en programación para suprimir, por ejemplo, los saltos de línea y cambiarlos a otra cosa).

\f (barra invertida y f): sirve para identificar o buscar los caracteres de salto de página en formato electrónico (se trata de un carácter que manda la instrucción a la impresora).

\n (barra invertida y n): sirve para encontrar un carácter de salto de línea en un documento (de hecho, \n es la forma de insertar una línea nueva en muchos lenguajes de programación como C o C++).

\r (barra invertida y r): sirve para encontrar un carácter de retorno de carro (cuando se pulsa la tecla Intro para pasar la siguiente línea, como cuando se empujaba la palanca de cambio de línea en una máquina de escribir antigua).

\t (barra invertida y t): sirve para encontrar un carácter de tabulación horizontal (el que se inserta al pulsar la tecla Tab del teclado).

\v (barra invertida y v): sirve para encontrar un carácter de tabulación vertical (en ASCII tiene asignado el 11).

[\b] (corchete apertura, barra invertida, b y corchete de cierre): permite identificar un carácter de retroceso en un texto.

\d (barra invertida y d): se trata de uno de los metacaracteres más útiles y usados. Permite buscar cualquier dígito, es decir, es lo mismo que escribir [0-9] para usar un intervalo, tal y como vimos en el post anterior. Por ejemplo, al buscar \d euros en un editor compatible con regexp clásicas (por ejemplo, EditPad Lite), encontraríamos en un texto tanto 5 euros como 7 euros.

\D (barra invertida y D mayúscula): sirve para justamente lo contrario a lo anterior, es decir, para buscar todo lo que no sean dígitos. Se trata por tanto, del equivalente a [^0-9].

\w (barra invertida y w): otro de los metacaracteres más utilizados ya que permite localizar cualquier carácter alfanumérico (en mayúscula o minúscula) y el guión bajo. Por tanto, es igual al patrón [a-zA-Z0-9_]. Por ejemplo, con la búsqueda [Cc][Rr]\w encontraríamos tanto CR7 como crocs.

\W (barra invertida y W mayúscula): sirve para lo contrario a lo anterior, es decir, encontrar un carácter no alfanumérico ni un guión bajo; sería el equivalente a [^a-zA-Z0-9_]. Se puede utilizar para buscar caracteres de formato (párrafo, saltos, etc.) u otros como #.

\s (barra invertida y s): sirve para encontrar cualquier tipo de carácter de espacio en blanco. Es por tanto equivalente a [\f\n\r\t\v]. Por ejemplo, al buscar por \s en el texto Uno y dos, el texto que se identificaría serían los espacios en blanco (Unoydos).

\S (barra invertida y S mayúscula) lo contrario a lo anterior, es decir, lo mismo que [^\f\n\r\t\v]. Nos permite encontrar un carácter del tipo de todo lo que es «visible» al ojo humano en un texto.

\b (barra invertida y b): este metacaracter es muy útil porque sirve para marcar una posición de un carácter dentro de una palabra. Habitualmente se usa para buscar caracteres al principio. Por ejemplo: al buscar por \barm se encontrarían las palabras armadura y arma, pero no harmónica puesto que el patrón de búsqueda arm no está al principio de palabra en el último caso. Aunque se usa especialmente para marcar el inicio de una palabra, \b también sirve para marcar el final; por ejemplo, la búsqueda ato\b serviría para encontrar pazguato, pero no atornillar. Por último, si se combina el uso para inicio y final de palabra, lo que obtenemos es el equivalente a la búsqueda de palabra completa; por ejemplo, \bagua\b encontrará agua pero no aguantar. Por su uso, este es un metacaracter marcador de posición dentro de una palabra.

\B (barra invertida y B mayúscula): sirve para no encontrar un carácter en los límites de una palabra. Se usa, por ejemplo, para localizar guiones de separación en palabras en inglés (no hay espacios a los lados) con regexp como \B-\B, con las que se obtendrían resultados como taskrelated.

^ (acento circunflejo): fuera de un corchete, el acento circunflejo sirve para marcar el inicio de una cadena completa. Ojo, hemos dicho cadena, no palabra. En términos habituales, esto significaría comienzo de una frase en una nueva línea. Por ejemplo, ^\w nos serviría para localizar el primer carácter alfanumérico de una frase o cadena. En algunas implementaciones se suele ver \A en lugar de ^.

$ (símbolo del dólar): sirve para lo mismo que el metacaracter anterior, solo que en este caso se encuentra el final de una cadena. Por ejemplo, :$  nos permitiría encontrar todas las cadenas que terminen en dos puntos. En algunas implementaciones se suele ver \Z en lugar de $.

Como podemos intuir, la combinación de estos metacaracteres con los patrones de búsquedas tratados en el primer artículo de esta serie sobre expresiones regulares multiplica las prestaciones de las que disponemos. A modo de ejemplo práctico en el mundo de la traducción, podemos ver la combinación de caracteres literales y comodines (metacaracteres) en la creación de reglas de control de calidad o QA en la mayoría de las herramientas CAT del mercado. Habitualmente, las funciones de QA operan de la siguiente manera:

1) Se busca la aparición (o ausencia) de un patrón determinado en el texto de origen y

2) Se compara el resultado del primer paso para verificar la existencia (o no existencia) de dicho patrón en el texto de destino.

En concreto y para verlo con más claridad, vamos a definir una regla que busque los números con punto como separador de decimales en el texto de origen y que en el texto de origen NO tengan como separador de decimales una coma.

a) Expresión regular para el texto de origen: \d\.\d.

– Explicación: expresión formada por cualquier número (\d), punto (como punto es un metacaracter por sí mismo, lo escapamos con la barra invertida) y de nuevo cualquier número.

– Resultado: se encontraría, por ejemplo, 10.1, 512,684.58, 4.6.

b) Expresión regular para el texto de destino: [^\d,\d].

– Explicación: expresión formada por cualquier número (\d), coma y de nuevo cualquier número.

– Resultado: se encontraría, por ejemplo, 10,1, 512.684,58, 4,6.

Como se observa, en realidad lo que se hace es decirle al programa mediante una expresión regular lo siguiente “si en un segmento de origen encuentras un número, un punto y otro número y en el segmento de destino correspondiente hay un número separado de otro por algo que no sea una coma, genera un error de QA para que lo compruebe». En concreto, en este caso vemos como en el número 512.684,58 se habría producido un falso positivo (¡el tema de los falsos positivos daría para otro post!), puesto que aquí el punto separa las unidades de millar, no los decimales. En el resto de casos, no habría habido ningún problema.

QA reg exp en SDLX

Expresión regular para función de QA en SDLX

Esta última explicación y ejemplo es uno de los casos más habituales de uso de las expresiones regulares. No obstante, existen muchos más escenarios como, entre otros, el filtrado de cadenas en el editor de traducción, la extracción de cadenas en la ingeniería de traducción con patrones complejos, etc. La verdad es que una vez se dominan bien todos los operadores básicos, cada cual es capaz de idear aplicaciones de lo más variopintas en su trabajo y su día a día.

En este segundo artículo de la serie sobre regexp hemos tratado los metacaracteres como complementos indispensables para los operadores de regexp básicos a fin de buscar y encontrar patrones textuales más sofisticados. Pero, ¿no sirven todos estos metacaracteres vistos para localizar caracteres individuales? En el ejemplo [^\d,\d], ¿no se resaltaban con la búsqueda únicamente el número anterior (\d) y posterior al separador de decimales (,\d)? ¿Qué pasa si queremos buscar más números o caracteres y combinar en una búsqueda patrones más grandes en que se repitan caracteres, espacios en blanco, etc.?

Obviamente, todo eso se pensó al diseñar las expresiones regulares, así que nosotros lo veremos en el siguiente post de esta serie, donde trataremos la búsqueda y creación de repeticiones de caracteres y búsquedas, los cuantificadores, las subexpresiones y muchas más cosas con las que podremos aprovechar toda la potencia que nos brindan las regexp.

Mientras tanto, como en el caso anterior, a practicar con lo ya aprendido, ¿de acuerdo?

Nos leemos en más o menos un mes. Ah, y como siempre, perdonad que me enrolle tanto y termine por escribir post larguísimos. Un saludo a todos,

Álvaro

Recomendación musical: tras casi dos años de espera si no me equivoco, mis apreciados Stereophonics vuelven a la carga con nuevo material y sello discográfico propio. Aquí va el single titulado In A Moment.

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.

Verano, el mejor momento para descansar…y para aprender

Hola a todos. Espero que el verano esté transcurriendo bien para todos los lectores de (Nunca) Sobran las palabras.

VeranitoHabitualmente, para muchísima gente el período estival equivale a descanso absoluto. En el caso del mundo de la traducción, a pesar de que muchos profesionales optan por dedicar unos días a relajarse y olvidarse de todo por un rato, es cierto que también se da una situación diferente: por una parte, muchos traductores que tienen menor volumen de trabajo aprovechan las vacaciones del resto para aumentar su cartera de encargos (algo muy recomendable para los profesionales con menos experiencia, por cierto) y, por otra, otros ven la ralentización de julio y agosto como una oportunidad para dedicar más tiempo a otros menesteres, entre ellos, la formación y el reciclaje profesional.

Yo, por mi parte, me siento más identificado con este segundo grupo. Por ello, redacto estas líneas para informaros de un curso gratuito que he completado hace poco, por si os interesa. Dado que mi campo de especialización favorito es la localización, puesto que me permite combinar los conocimientos de programación y web con la traducción, me decanté hace un mes más o menos por actualizarme un poco en el asunto de la nueva programación web con el desarrollo de HTML 5. Tras leer diversos foros y páginas informativas, acabé por completar el curso gratuito de MDSN de Microsoft España sobre HTML 5. Se trata de una buena alternativa para refrescar conocimientos básicos sobre la Web y, al mismo tiempo, familiarizarse con la nueva familia de estándares de diseño de webs para navegadores, dispositivos móviles, tablets, etc.

Recomiendo este curso por diferentes motivos: el nivel avanza bastante bien desde las dos primeras lecciones introductorias hasta conceptos algo más complejos en las siguientes, la estructura de las lecciones está bastante clara y resulta sencilla de asimilar con los ejercicios, cuenta con el respaldo de Microsoft y, además, es gratuito.

Personalmente creo que, en el ámbito de la localización (e incluso de los videojuegos web), el conocimiento de HTML 5 se presenta como un activo imprescindible en el futuro cercano, sobre todo porque diversos elementos (entre ellos, el canvas) apuntan al declive final de flash como tecnología multimedia visual para la interactividad web. Por tanto, dominar y conocer los diversos aspectos que garantizan una perfecta adaptación y localización de los productos web desde su lenguaje de programación es, sin duda alguna, un valor añadido que cualquier profesional de la localización que se precie no debe dejar de lado. En mi caso, estoy aprovechando el verano para ponerme al día, puesto que entre unas cosas y otras, en los últimos meses había estado dando largas a la formación continua, algo indispensable para cualquier trabajador.

En resumen, el verano es tiempo de descanso y de formación. Dicho esto y expuesta mi recomendación para un estío basado en HTML 5, os dejo que dediquéis los próximos minutos al necesario descanso (o a lo que más os plazca).

Un saludo,

Álvaro

Recomendación musical: Polock – Fireworks. ¡Ojo!, que la clave está en la subida y en el final de la canción, no en la forma en que empieza.

La postedición o el enigma del efecto polaco

Algunos negaban su existencia, otros creían que se trataba de una profecía que jamás llegaría a cumplirse. Sin embargo, ya está aquí. La postedición ha llegado a nuestras vidas, y lo ha hecho para quedarse. Dejadme que os explique el motivo por el que me he animado a escribir este post. Tiene su aquel.

Hace unas semanas, como parte de mis tareas, me tocó participar en una traducción-postedición de un cliente que desarrolla aplicaciones de diseño gráfico. Se trata de un cliente grande, cuya terminología, estilo y memorias de traducción están absolutamente contrastados y que desde hace un tiempo ha decidido utilizar el motor de traducción automática de mi empresa (iMT). Para ser sinceros, la verdad es que en general el resultado de la traducción automática era muy bueno, dado que se trataba de una ayuda en línea, con frases sencillas, terminología de un glosario, etc. No obstante, casi al final del texto me encontré con una oración cuya traducción automática decía algo parecido a: “[…] para conseguir un efecto realmente polaco”. La verdad es que no pude contener la risa, porque la frase en inglés terminaba más o menos así: “[…] you will get a very polished effect”. La cuestión es que esta anécdota me resultó especialmente graciosa porque me recordó a mi novia cuando vivíamos en Londres. Ella trabajó durante un tiempo en hostelería y entre todos los compañeros hablaban una especie de Spanglish (algo no tan raro cuando trabajas en un ambiente con muchos hispanoparlantes, por cierto). Al final hasta en casa nos acabamos acostumbrando a escuchar que si había estado polichando, para referirse en realidad a que había estado secando los platos. El quid de la cuestión es que si las propias personas a veces terminamos aceptando como natural las expresiones más inverosímiles (¿pero quién no traga a menudo con las implementaciones?), ¿cómo va a resistirse la traducción automática al enigmático atractivo del “efecto polaco”? 😉

Además de esta anécdota que sobre todo me sacó una buena sonrisa, el otro motivo que me llevó a escribir esta reflexión es que hace no demasiado se puso en contacto conmigo una traductora que tenía muchas dudas acerca de las herramientas CAT. Lleva toda la vida (más de 25 años) traduciendo manualmente de forma artesanal, por así decirlo. La cuestión es que me pareció admirable que ahora tenga interés por progresar y enfrentarse a la nueva realidad. Parte innegable del nuevo escenario profesional de la traducción es la postedición, a la que, desde mi punto de vista, todos debemos acostumbrarnos porque:

a)      Desde la perspectiva de la satisfacción del cliente, hay muchos que por cuestión de relación calidad-coste lo exigen como método y, por tanto, como buen profesional se deben desarrollar las capacidades necesarias para ofrecer el servicio.

b)      En el plano económico, la postedición representa una oportunidad de negocio para los traductores. La tecnología y el perfil profesional evoluciona y es necesario adaptarse. Sorprende que, a pesar de que hay muchísimos buenos traductores, no hay tantos que sepan y quieran hacer postedición. Personalmente, creo que esto es un error, ya que, aunque al principio cuesta desarrollar la técnica (“tragar” con algunas estructuras, etc.), al final compensa porque te brinda más oportunidades de trabajo.

Los profesionales que fueron pioneros en afrontar el reto hace años, gozan ahora de prestigio y ponen de manifiesto su versatilidad. La cuestión es que creo que, ante situaciones en las que inicialmente podemos mostrarnos reticentes, debemos aprender a ver las cosas con perspectiva de futuro. Debemos adaptarnos a las innovaciones y las exigencias profesionales en constante cambio. Al fin y al cabo, si somos capaces de acabar acostumbrándonos a expresiones lingüísticas inverosímiles (que en realidad no son más que una representación de la propia realidad) y terminamos por polichar los platos después de fregarlos, ¿no vamos a ser capaces de resolver el “efecto polaco” que nos plantea la postedición? Por supuesto que sí, sólo se trata de voluntad, como me mostró a mí, y espero que a todos, la traductora de la que he mencionado anteriormente.

Bueno, no me extiendo más.

Un saludo,

Álvaro

Recomendación musical: últimamente estoy escuchando mucho piano. Como propuesta relajante, Yurima, The Sunbeams They Scatter.

Traducciones con restricción de caracteres II: porcentaje de ampliación

Hola a todos:
Como no tengo mucho tiempo para ponerme a escribir últimamente, os dejo aquí una actualización de un recurso sobre el que ya hablé hace unos meses. En concreto, en marzo publiqué una entrada en el blog acerca de la traducción con restricción de caracteres y di un Excel.
Hace unos días, estaba hablando con un PM sobre un proyecto de traducción de unas cadenas de firmware. La cuestión es que decía que el cliente no quería usar las herramientas de traducción habituales (hubo que usar un entorno de traducción propio del cliente que habían desarrollado), que el tiempo de trabajo era exiguo y que había que traducir y hacer un QA con restricción de caracteres, pero no sobre un límite fijado de caracteres (cosa que me extrañó, si una pantallita tiene 150 caracteres, los tiene siempre), sino con una restricción del 20% sobre el texto de partida (eso no es tan raro en SW, pero sí en FW).

Obviamente, la herramienta de trabajo era deficiente, así que como eran bastantes cadenas para hacer los cálculos a mano, se me ocurrió retomar la hoja de Excel que propuse en la entrada mencionada al principio y adaptarla. ¿Cómo? Muy sencillo añadí dos columnas: una, llamada Additional % allowed, en la que se especifica el porcentaje que la cadena puede superar la longitud del original en formato decimal (20% = 0,2), y la otra, Additional Characters allowed, es el resultado (redondeado hacia arriba) en caracteres que podemos usar de más en nuestra traducción. Finalmente, modifiqué la fórmula del resultado (String Status) para que tenga en cuenta el 20% adicional del que disponía.

He pensado que a los que trabajéis con desarrolladores directamente y os encontréis con situaciones como la que he descrito anteriormente, os puede resultar útil como complemento a la hoja de Excel original. Por supuesto, seguro que podréis mejorarla y adaptarla a vuestras necesidades para sacarle mayor partido. Os dejo pues la nueva hoja AQUÍ.

Bueno, eso es todo. Un saludo a todos y perdón por mi inconstancia como blogero.
Saludos,

Álvaro

Recomendación musical: no podía ser de otra forma… Noel Gallager, Dream On

Creación de TM en tmx con material disponible para CAT (memoQ, SDL Trados Studio)

En los últimos meses he recibido varias consultas de algunos lectores que se inician (o no tanto) en el mundo de la traducción y me preguntan cómo crear una TM a partir de documentos que ya tienen disponibles. En la mayoría de los casos, se trata de usuarios que no quieren todavía realizar el desembolso en una herramienta CAT de las potentes (SDL Trados Studio, Deja Vu, MemoQ, Accross, etc.), sino que quieren empezar a probar otros sistemas con material de trabajo real.

Mi respuesta siempre ha sido la misma: usa WinAlign u otro alineador para crearte una TM con los documentos equivalentes que ya tienes en inglés y español y así poder comenzar a trabajar. La cuestión es que creo que mi respuesta no ha sido lo suficientemente concreta, o no permite que muchos usuarios puedan empezar a trabajar, así que he decidido ser más explícito y ofrecer una solución más tangible a través de esta entrada y de  los vídeos adjuntos.

Mi propuesta pues para crear la TM es usar la combinación de herramientas más sencilla (y económica) que se me ha ocurrido para empezar: Wordfast y Plus Tools. Plus Tools (Ptools) es una suite de complementos GRATUITA para Wordfast (que también es gratuito hasta alcanzar una cierta cantidad de unidades de traducción) pero que en realidad nos va a servir para nuestro propósito por dos motivos: 1) al integrarse en Word, resulta sencilla y accesible para cualquier usuario y 2) crea una TM que a través de WF podemos exportar a tmx, de forma que podremos importarla luego a cualquier herramienta CAT* que queramos (en el ejemplo, usaré memoQ). Sin más dilación, manos a la obra, alineemos los documentos, creemos la TM e importémosla. Aviso: he usado dos textos de la Red de cuya calidad lingüística no me hago responsable.

Pasos:

1)      Descarga e instala Plus Tools y Wordfast en Word (lee los manuales para hacerlo, es básicamente cargar una plantilla en Word).

2)      Alinea los documentos. Alinear es en realidad un ejercicio de “unir con flechas” del texto en inglés y en español. Dado que a veces el sistema automático de Plus Tools no es perfecto, puede que haya que corregir algunas frases, tal y como se ve en el vídeo. Consulta el manual para ver el funcionamiento, pero vamos, que es muy sencillo e intuitivo.

3)      Crea la TM. Sigue las instrucciones que hay al principio del documento de la alineación para crear la TM. A continuación abre esta TM en Wordfast y expórtala a tmx.

4)      Abre la herramienta CAT que quieras utilizar para traducir, en mi caso MemoQ. Desde el módulo de TM, usa los comandos correspondientes para crear una TM con la misma combinación de idiomas del archivo TMX (en el ejemplo eso ya está hecho) y, a continuación, importa la TM en TMX a tu nueva TM del programa CAT.

Aquí os dejo los tres vídeos del proceso para memoQ:

1. Alineación y creación de TM.

2. Exportación a tmx vía WF.

3. Importación de TM en tmx a CAT.

Tras completar estos pasos, tenemos una TM operativa en cualquier programa de CAT que queramos utilizar y, como vemos en el vídeo, funciona perfectamente.

Bueno, eso es todo. He tratado de hacerlo lo más sencillo que he podido para que la próxima vez que queráis crear una TM desde cero mediante alineación de forma GRATUITA, no os resulte complicado.

* En realidad, la gran mayoría de las herramientas CAT tienen su propio alineador. Yo propongo el de Plus Tools porque es gratuito y, si usas herramientas gratis tipo Omega T, es el más sencillo para crear TM en tmx. No obstante, los de plataformas de pago, son más potentes (a mí me gusta WinAlign de SDL Trados).

– Recomendación musical: como no podía ser de otra forma, The Death of You and Me, la presentación en solitario de Noel Gallagher.

Proyecto del Parlamento UE

Hola a todos:

Este va a ser un post muy breve. Sólo quiere dejar un enlace sobre un proyecto de colaboración terminológica con el Parlamento europeo, ya que creo que puede resultar interesante para muchos de vosotros.

Todavía está en fase inicial, pero puede ser interesante, ya que también dan información sobre seminarios, etc.

Bueno, aquí va el enlace al proyecto TermCoord: http://termcoord.wordpress.com/.

La próxima vez que escriba en el blog, espero que sea una parrafada más considerable.

Un saludo a todos y buen comienzo de Semana Santa. Atentamente,

Álvaro

Recomendación musical: los Foo Fighters han vuelto con material nuevo de calidad. En Back and forth, Krist Novoselic (como Dave Grohl, también ex de Nirvana) toca el bajo.

Traducciones con restricción de caracteres

Como casi siempre, debo empezar pidiendo disculpas por mi inactividad. La verdad es que incluso hay veces en que me planteo dejar de escribir temporalmente porque entre el trabajo como traductor, el de tutor y las tareas que tengo como diseñador y webmaster, el blog está más abandonado de lo que debería. Sea como fuera, me he decidido a publicar un post rápido pero que puede resultar práctico.

La cuestión es que hace más o menos unas tres semanas, recibí bastantes encargos de software en los que había que trabajar con restricción de caracteres y no se podía superar la longitud del texto de origen. A pesar de que esta era la instrucción específica del cliente y que los archivos iban en SDLX (que en realidad no es lo más indicado para hacer SW, pero eso ya es otra cuestión), no se me proporcionó ninguna forma de comprobar si mis traducciones superaban la restricción impuesta de forma automática (señalar toda la cadena y ver el recuento de caracteres en SDLX no es nada automático).

Total, que al final, tras comentarlo con dos de mis compañeros, David Valdivia y Ángel Martínez (profesionales excepcionales, cada uno a su manera y en su especialidad), llegamos a la conclusión de que lo mejor era crear un sistema de comparación de longitud de caracteres que pudiese usarse con cualquier traducción. ¿La solución? En lugar de buscar algo muy enrevesado, optamos por usar una herramienta de la que casi todos disponemos y que más o menos todos manejamos, Excel.

El proceso fue el siguiente: crear una hoja de Excel en la que se pueda cortar-pegar tanto el texto de origen como la traducción (la mayoría de las herramientas de traducción asistida te permite generar una vista de original-traducción enfrentada por columnas, o bien, puedes copiar todo el texto directamente –como en mi caso particular, en SDLX), a continuación, crear dos columnas en las que Excel inserte el recuento de cadena original y traducción, luego, crear otra columna en la que se inserte la diferencia del recuento de caracteres entre original y traducción y, finalmente, en función del resultado obtenido, indicar mediante un mensaje si las cadenas son válidas o no válidas.

Para los que queráis crear un recurso de este tipo, que también puede resultar adecuado para textos audiovisuales, ahí van los pasos detallados (al final del post facilito un modelo ya completo).

  1. Creamos la hoja de Excel con las columnas (campos) indicadas anteriormente. Una vez completado este paso, vamos a insertar la fórmula de recuento en la 3ª y 4ª columna para el recuento de cadena original y traducida respectivamente. Para ello, seleccionamos la tercera columna, en la segunda fila, y pulsamos el botón de fórmula o función (fx) y, entre las categorías disponibles, escogemos Texto y la función Largo. Para la cadena original, seleccionamos la fila A2, mientras que, al repetir la operación para la traducida, seleccionamos la B2, como se muestra en la ilustración.
  2. Automáticamente, se insertarán los recuentos. A continuación, vamos a trabajar en la diferencia. Para ello, en la columna de la diferencia, señalamos la fila 2 (E2) y, a continuación, en el cuadro de la función, escribimos =D2-C2 (es decir, que ponga el resultado de restar C2, caracteres originales, a D2, caracteres de la traducción). De esta forma, ya tenemos un resultado: si el recuento es positivo, nos hemos pasado la restricción, si no, correcto.
  3. Por último, para que tengamos esta información sobre el estado de la restricción más clara, vamos a poner una función condicional en la última columna. Señalamos la fila F2 e insertamos una función. Seleccionamos la categoría Lógica y, a continuación, SI. Finalmente ponemos como valores lo siguiente: D2 <= C2 (en Prueba_lógica), CORRECTO (en Valor si verdadero) y ERROR (en Valor si falso). De esta forma, si la traducción es más larga que la cadena original, es estado indicado será Correcto, mientras que si se supera la restricción de caracteres el resultado será Error.
  4. Como podéis ver, el resultado es bastante bueno.

Como todos sabéis, en el mundo de la traducción y la localización profesional, el escenario no es siempre el ideal y, a menudo, somos nosotros los que tenemos que ingeniárnoslas para salir del paso airosos y realizar una labor de calidad. Muchas veces resulta mucho más práctico optar por soluciones sencillas y rápidas como, por ejemplo, este Excel de recuento de caracteres que por otras más complejas (como habría sido pasar el texto entregado en SDLX a Passolo o Alchemy Catalyst, sobre todo porque esta tarea no estaba pagada y podría resultar incómoda al revertir el proceso para la entrega).

Espero que este post os resulte útil y que especialmente os sirva para que vosotros desarrolléis más ideas sencillas y directas. Por cierto si alguien quiera el comparador de Excel, que lo descargue de mi web a través de ESTE ENLACE.

Un saludo a todos. Atentamente,

Álvaro

Recomendación musical: Beady Eye, The Morning Son. Todavía no tenemos vídeo original, pero algo es algo