Ya vimos en este artículo que podemos usar los comodines de Word para convertir una memoria de traducción con formato TMX en una tabla sencilla para que tú o tu traductor podáis aprovechar las traducciones, y lo vea de un modo simplificado: solo textos original y traducido.
Lo vimos paso a paso. Si fuiste capaz de seguir los pasos, no tendrás problemas para seguir este artículo, porque en ahora haremos lo mismo (convertir una memoria TMX a una tabla), pero diseñando un patrón de búsqueda gigantesco que nos simplificará mucho el proceso.
¿Empezamos?
Planteamiento del problema
Esta primera parte es igual que en el artículo anterior, así que si ya te la conoces, puedes saltártela o leerla más rápidamente.
Tienes una memoria de traducción en formato TMX y se la quieres enviar a otro traductor para que la tenga en cuenta para una traducción o revisión.
Ahora bien, y aquí empiezan los problemas: tu traductor no tiene ninguna herramienta de traducción asistida, así que una memoria de traducción en formato TMX le viene muy, muy grande…
Tu traductor solo quiere abrir la memoria en Word o Excel, hacer búsquedas ahí, para ver si se ha traducido algo de una determinada manera, y así poder seguir el estilo, por ejemplo.
Con esto en mente, imagínate que le envías un pequeño archivo TMX, que es un simple archivo de texto con esta pinta:
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
<header creationtool="SDL Language Platform" creationtoolversion="8.0" o-tmf="SDL TM8 Format" datatype="xml" segtype="sentence" adminlang="en-US" srclang="en-US" creationdate="20150308T192831Z" creationid="jesus">
<prop type="x-Recognizers">RecognizeAll</prop>
<prop type="x-TMName">Gonduana</prop>
</header>
<body>
<tu creationdate="20150308T192908Z" creationid="jesus" changedate="20150308T192910Z" changeid="jesus" lastusagedate="20150308T192910Z">
<prop type="x-Context">3248827995436491686, 104800894253067632</prop>
<prop type="x-Origin">TM</prop>
<prop type="x-ConfirmationLevel">Translated</prop>
<tuv xml:lang="en-US">
<seg>Yes</seg>
</tuv>
<tuv xml:lang="es-ES">
<seg>Sí</seg>
</tuv>
</tu>
<tu creationdate="20150308T192915Z" creationid="jesus" changedate="20150308T192916Z" changeid="jesus" lastusagedate="20150308T192916Z">
<prop type="x-Context">118222065, 3807978</prop>
<prop type="x-Origin">TM</prop>
<prop type="x-ConfirmationLevel">Translated</prop>
<tuv xml:lang="en-US">
<seg>No</seg>
</tuv>
<tuv xml:lang="es-ES">
<seg>No</seg>
</tuv>
</tu>
<tu creationdate="20150308T192918Z" creationid="jesus" changedate="20150308T193256Z" changeid="jesus" lastusagedate="20150314T182430Z" usagecount="1">
<prop type="x-Context">3803359, 3803359</prop>
<prop type="x-Origin">TM</prop>
<prop type="x-ConfirmationLevel">Translated</prop>
<tuv xml:lang="en-US">
<seg>I only know that <bpt i="1" type="1" x="1" />I know nothing<ept i="1" /></seg>
</tuv>
<tuv xml:lang="es-ES">
<seg>Solo sé que <bpt i="1" type="1" x="1" />no sé nada<ept i="1" /></seg>
</tuv>
</tu>
</body>
</tmx>
Aquí no se ve nada, ¿verdad? ¡Y eso que solo tiene 3 unidades de traducción!
Imagínate si le envías una memoria de 50.000 unidades.
Tu traductor tampoco vería nada, no creo que deba insistir más, ¿verdad?
Tu traductor solo necesita una tabla sencilla:

con las 3 únicas unidades de traducción que hay en esta simple memoria.
Por tanto, hay muchas líneas que sobran, mucha información que solo marearía a tu traductor y que es preciso borrar antes de enviar la memoria simplificada. Así que hay que borrar mucho, y no lo puedes hacer manualmente.
El objetivo es convertir una memoria TMX en una tabla sencilla que sea útil al traductor.
Abrir la memoria TMX en Word
Primero tenemos que abrimos este TMX en Word de una manera que nos convenga. Te comento la forma que uso, aunque puede que tengas otra forma mejor:
- Abres el archivo TMX con el Bloc de notas.
- Seleccionas todo el contenido (CTRL+E) y lo copias (CTRL+C).
- Cambias a Word, y ahí pegas el contenido del portapapeles (CTRL+V).
Si lo has hecho así, verás tu documento de Word con el contenido mostrado arriba.
Si ves que falta información, es que lo has abierto de otra manera, y Word reconoce automáticamente el formato de archivo como un XML y te lo presenta algo más limpio. Si es así, da marcha atrás y sigue mi procedimiento, por favor.
1.er borrado con comodines de Word
Una vez que tenemos el contenido del TMX en Word, vamos a borrar todo lo que esté fuera del elemento body, es decir, nos quedamos solo con lo que hay entre las líneas <body> y </body>.
1.ª aproximación del patrón de búsqueda
Este patrón de búsqueda \<body\>*\</body\> encontraría efectivamente todo ese texto.
Recuerda que:
- \< encontrará <.
- que el asterisco * encontrará los caracteres que sean necesarios para que se cumpla el criterio de búsqueda.
- \> encontrará >.
2.ª aproximación del patrón de búsqueda
Podríamos partir de aquí, pero vamos a afinar un poco más para poder borrar los espacios innecesarios.
El patrón \<body\>* {1;}\</body\> tiene en cuenta los molestos espacios iniciales que hay en cada línea.
Recuerda que:
- {1;} encontrará uno o varios espacios (mostrados en Word con este carácter ·).
3.ª aproximación del patrón de búsqueda
Vamos a finar aún más, y tener en cuenta que el final del archivo TMX termina en </tmx>, para poder borrarlo automáticamente también.
El patrón de búsqueda que hace esto es:
*\<body\>* {1;}\</body\>^13\</tmx\>
Recuerda que:
- ^13 encontrará un salto de párrafo (mostrado en Word con un calderón ¶).
4.ª aproximación del patrón de búsqueda
Teniendo en cuenta que podemos borrar algún salto de párrafo más, con sus correspondientes espacios iniciales, tendremos un patrón de búsqueda casi, casi final:
*\<body\>^13)(*)(^13 {1;}\</body\>^13\</tmx\>
5.ª y última aproximación del patrón de búsqueda
Vamos a agrupar este patrón de búsqueda con paréntesis de una forma que nos convenga para poder quedarnos solo con el texto entre las líneas <body> y </body>. Así tendremos nuestro patrón definitivo de búsqueda:
(*\<body\>^13)(*)( {1;}\</body\>^13\</tmx\>)
Hay tres parejas de paréntesis:
- (*\<body\>) encuentra desde la posición del cursor hasta <body>.
- (*) encuentra todo el texto hasta el siguiente criterio.
- ( {1;}\</body\>^13\</tmx\>) encuentra espacios iniciales, </body>, un salto de párrafo y </tmx>.
Un poco jaleo visto todo junto, pero desglosado se entiende mejor, ¿verdad?
Párate ahora un momento, a ver si llegas a la conclusión de que lo único que nos interesa es el contenido encontrado por el segundo paréntesis (*).
Pues bien, el patrón de sustitución que hace esto es:
\2
¡Manos a la obra!
Primero, coloca el cursor al principio del documento de Word, arriba del todo y a la izquierda (si no lo haces así, Word borrará a partir de la posición del cursor ¡o puede que no borre nada!).
Segundo, rellena los cuadros de texto Buscar: y Reemplazar con: con los patrones anteriores, y no olvides marcar la casilla Usar caracteres comodín en el cuadro de diálogo Buscar y reemplazar de Word:

Tercero y último, pulsa los botones Buscar Siguiente y después Reemplazar y te quedará solo este texto:

Esta captura muestra los caracteres normalmente invisibles en Word (espacios ·, saltos de párrafo ¶ y tabuladores
). Para verlos en Word, en la cinta Inicio, sección Párrafo, pulsa el botón
.
Antes de seguir, es importante que entiendas los comodines vistos hasta aquí, porque se van a repetir durante el resto del artículo.
Si necesitas repasar, hazlo ahora mejor…
En este primer borrado nos hemos quedado únicamente con las unidades de traducción.
2.º borrado con comodines de Word
Segunda misión para los comodines de Word: borrar todas las líneas con la cadena <tu creationdate.
A tu traductor le da igual cuándo se creó cada unidad de traducción, quién la creó, quién y cuándo se cambió, cuándo se empleó por última vez en la herramienta de traducción asistida.
¡Hay que borrar esto también!
Para ello, el patrón de búsqueda será:
{1;}\<tu creationdate*\>^13
¡Ojo!, que hay un espacio al principio del patrón. Si lo pasas por alto, y no lo escribes en el cuadro de texto Buscar, Word te dará un bonito error:

El siguiente patrón de búsqueda es equivalente al anterior, excepto que se ve más claro que hay un espacio inicial:
( {1;}\<tu creationdate*\>^13)
Podrás copiar este patrón, con menos posibilidades de que se te pase el espacio.
El patrón de sustitución estará vacío completamente, lo que supone borrar la cadena encontrada.
Desgranaremos algo este primer patrón de búsqueda, porque hay conceptos que se repetirán en los siguientes «borrados»:
- {1;} buscará uno o varios espacios seguidos .
- \<tu creationdate buscará la cadena <tu creationdate.
- * buscará los caracteres necesarios hasta el siguiente criterio de búsqueda.
- Finalmente, \>^13 buscará la cadena > seguida de un salto de párrafo.
Por tanto, este patrón encontrará esta cadena:
<tu creationdate="20150308T192908Z" creationid="jesus" changedate="20150308T192910Z" changeid="jesus" lastusagedate="20150308T192910Z">¶
Asegúrate de que el cursor está arriba del todo a la izquierda, y esta vez pulsa el botón Reemplazar todos, ¡sin miedo!
Word nos avisa con este mensaje:

Aceptamos, y simplemente borrará cada cadena encontrada (ya que el patrón de sustitución está vacío). Recuerda que también borramos el salto de párrafo (indicado aquí con el símbolo del calderón ¶, exactamente como en Word).
El documento quedará así, algo más limpio:

En este segundo borrado hemos borrado los atributos creationdate, creationid, changedate, changeid y lastusagedate.
3.er borrado con comodines de Word
Ahora vemos que lo siguiente que nos molesta son tres líneas con el elemento prop (Property), que empiezan por <prop y terminan por </prop>.
Para ello, el patrón de búsqueda será:
{1;}\<prop*/prop\>^13
El patrón de búsqueda equivalente antiolvidosdeespacios es:
( {1;}\<prop*/prop\>^13)
El patrón de sustitución estará otra vez vacío.
La primera cadena que encontrará Word será:
<prop type="x-Context">3248827995436491686, 104800894253067632</prop>¶
Después de pulsar Reemplazar todo en Word, el documento quedará así:

4.º borrado con comodines de Word
Ahora vamos a borrar selectivamente, así que el patrón de búsqueda se complica, quedas avisado, pero no es imposible de entender.
1.ª aproximación del patrón de búsqueda
Fíjate que este patrón de búsqueda:
{1;}\<tuv xml:lang=\"en-US\"\>^13 {1;}\<seg\>*\</seg\>^13 {1;}\</tuv\>^13
seleccionará este texto:
<tuv xml:lang="en-US">¶
<seg>Yes</seg>¶
</tuv>¶
Y que este patrón de búsqueda:
{1;}\<tuv xml:lang=\"es-ES\"\>^13 {1;}\<seg\>*\</seg\>^13 {1;}\</tuv\>^13 {1;}\</tu\>
encontrará este otro:
<tuv xml:lang="es-ES">¶
<seg>Sí</seg>¶
</tuv>¶
</tuv>
Así pues, si encadenamos ambos patrones:
{1;}\<tuv xml:lang=\"en-US\"\>^13 {1;}\<seg\>*\</seg\>^13 {1;}\</tuv\>^13 {1;}\<tuv xml:lang=\"es-ES\"\>^13 {1;}\<seg\>*\</seg\>^13 {1;}\</tuv\>^13 {1;}\</tu\>
encontraremos este texto:
<tuv xml:lang="en-US">¶
<seg>Yes</seg>¶
</tuv>¶
<tuv xml:lang="es-ES">¶
<seg>Sí</seg>¶
</tuv>¶
</tuv>
2.ª y última aproximación del patrón de búsqueda
Ahora vamos a agrupar este patrón de búsqueda para poder borrar lo innecesario y quedarnos solo con Yes y Sí:
( {1;}\<tuv xml:lang=\"en-US\"\>^13 {1;}\<seg\>)(*)(\</seg\>^13 {1;}\</tuv\>^13 {1;}\<tuv xml:lang=\"es-ES\"\>^13 {1;}\<seg\>)(*)(\</seg\>^13 {1;}\</tuv\>^13 {1;}\</tu\>)
Aquí hemos agrupado con 5 parejas de paréntesis.
Vamos a desglosar cada uno de los grupos:
- ( {1;}\<tuv xml:lang=\"en-US\"\>^13 {1;}\<seg\>) busca espacios iniciales , después <tuv xml:lang=\"en-US\">, un salto de párrafo, espacios iniciales y, por último, <seg>.
- (*) encuentra Yes.
- (\</seg\>^13 {1;}\</tuv\>^13 {1;}\<tuv xml:lang=\"es-ES\"\>^13 {1;}\<seg\>) encuentra </seg>, después un salto de párrafo, espacios iniciales , </tuv>, otro salto de párrafo, más espacios iniciales , después <tuv xml:lang=\"es-ES\"\>, otro salto de párrafo, más espacios iniciales y, por último, <seg>.
- (*) encuentra Sí.
- (\</seg\>^13 {1;}\</tuv\>^13 {1;}\</tu\>) encuentra </seg>, salto de párrafo, espacios iniciales, </tuv>, salto de párrafo, espacios iniciales y </tu>.
Un patrón monstruoso, sin duda, pero desglosado se entiende bastante bien.
1.ª aproximación del patrón de sustitución
Fíjate que lo único que necesitamos son los grupos 2 y 4, ¿verdad?
El patrón de sustitución que sustituye lo encontrado por los grupos 2 y 4 es:
\2 \4
Este patrón nos reemplazaría el texto anterior encontrado por Yes Sí, que está bien, ¡pero aún podemos afinar un poco más!
2.ª y última aproximación del patrón de sustitución
Vamos a insertar una tabulación entre el texto origen y destino para poder luego convertirlo fácilmente en una tabla.
Pero antes de insertar tabulaciones, hay que preparar el documento y reemplazar todas las tabulaciones que haya por un espacio, por ejemplo. Es una cosa que puedes hacer con o sin comodines: escribe ^t en el cuadro Buscar, deja vacío el cuadro Reemplazar con y pulsa el botón Reemplazar todo.
El patrón definitivo de sustitución es:
\2^t\4
Llevamos el patrón de búsqueda:
( {1;}\<tuv xml:lang=\"en-US\"\>^13 {1;}\<seg\>)(*)(\</seg\>^13 {1;}\</tuv\>^13 {1;}\<tuv xml:lang=\"es-ES\"\>^13 {1;}\<seg\>)(*)(\</seg\>^13 {1;}\</tuv\>^13 {1;}\</tu\>)
y el de sustitución:
\2^t\4
al cuadro de diálogo Buscar y Reemplazar, como siempre nos aseguramos de que el cursor está arriba del todo a la izquierda, y pulsamos el botón Reemplazar todo.
Nos quedará esto texto simplificado:

5.º borrado con comodines de Word
Casi hemos terminado…
Si te fijas, en la tercera línea hay unas etiquetas de formato en:
<bpt i="1" type="1" x="1" />I know nothing<ept i="1" />.
Como al traductor tampoco le interesa saber el formato del texto, vamos a borrar también esta información.
1.ª aproximación del patrón de búsqueda
Un posible patrón de búsqueda sería:
(\<bpt i*\>)(*)(\<ept*/\>)
con el posible patrón de sustitución:
\2
2.ª y última aproximación del patrón de búsqueda
Ahora bien, dado que estos elementos emparejados <bpt> y <ebp> pueden ir anidados, el anterior reemplazo no nos valdría, a menos que lo repitiéramos varias veces.
Por tanto, vamos a optar por la solución más sencilla:
El patrón de búsqueda será:
\<?pt i*\>
con el patrón de sustitución vacío:
Si lo has hecho bien, el documento quedará bien limpito, sin códigos de formato:

Formateado final
Aprovecharemos ahora las tabulaciones insertadas en el 4.º borrado para formatear un poco el texto:

Se trata de un texto que es muy fácil de convertir a tabla desde Word. Para ello, ve a la ficha Insertar de la cinta > botón Tabla de la sección Tablas > menú Convertir texto en tabla, y asegúrate de que está marcada la opción Tabulaciones:

Y tenemos una bonita y sencilla tabla que ahora sí que nos puede ser útil:

Una última consideración sobre los idiomas
En este artículo hemos supuesto que la memoria de traducción TMX tenía dos idiomas: el original en inglés de EE. UU. (con el código «en-US») y el destino en español de España (con el código «es-ES»).
¿Qué pasa si no es alguno o ninguno de estos idiomas?
La respuesta es fácil si empleamos el comodín ? (ya sabes que el asterisco sustituye un único carácter).
En todos los comodines empleados en este artículo, se trata de sustituir en-US o es-ES por ??-??.
Si quieres los comodines finales, para que sirvan para cualquier combinación de idiomas, puedes descargarte el listado completo aquí.
Conclusiones de convertir una memoria TMX en una tabla con comodines de Word
En este artículo hemos limpiado toda la información necesaria para poder enviar una memoria TMX a un traductor que solo necesita la información simplificada: texto original y texto traducido.
Para ello, hemos usado los siguientes comodines de Word:
- *, ?, (), {}, ^ y \ en el patrón de búsqueda;
- espacio , ^ y \ en el patrón de sustitución.
Hemos ido diseñando poco a poco los patrones de búsqueda y sustitución, para ir avanzando y dejando el documento de Word cada vez más limpio.
En comparación con los 8 patrones de Word necesarios en el anterior artículo (más un borrado manual), estos 5 patrones con comodines son un proceso más sencillo, a menos de menos pasos, aunque los patrones son de armas tomar, ¿verdad?
Además, los patrones de este artículo nos sirven para cualquier combinación de idiomas.
Ya sabes que te puedes descargar el documento DOCX con los 5 comodines de Word empleados.
En una memoria con decenas de miles de unidades, el trabajo se hace en cuestión de un minuto, gracias a los comodines de Word (y también gracias al procedimiento que tienes aquí). Síguelo al pie de la letra y lo tendrás hecho.
¡Ha sido un ejemplo completo que nos ha permitido repasar casi todos los comodines de Word!
Ahora, piensa un momento en las veces que dijiste que algo no se podía hacer. Piensa en lo que puedes aprovechar ahora de los comodines para hacer rápidamente eso que parecía imposible. Piensa ahora en que antes de volver a decir que algo es imposible no es factible en Word, te lo pensarás dos veces y sopesarás la posibilidad de hacerlo con los comodines.
Lo cierto es que si has sido capaz de llegar hasta aquí, creo que podrás hacer cualquier cosa con los comodines de Word.
* * * * *
En el próximo artículo, aprovecharemos estos patrones de búsqueda y reemplazo para programar una macro en VBA y ejecutarla de una manera aún más sencilla: ¡en un segundo!






Gracias por mostrar los comodines. Te comento que hay un error a partir de la segunda opción de búsqueda. Me marca el buscador que hay una expresión inválida y de ahí en adelante. Gracias
Hola, Yolanda:
Gracias por avisar, pero mi Word sí encuentra el segundo patrón.
No lo escribo porque salen mal los patrones en estos comentarios del blog.
¿Escribiste el espacio inicial? Si no lo has puesto, Word te da el mensaje de error que ves arriba…
Este patrón es algo diferente, se han añadido dos paréntesis, justamente para no pasar por alto el espacio inicial.
Creo que es un problema del espacio inicial, y no creo que sea un problema de la versión de Word (estos patrones están probados en las versiones 2007 y 2010 de Word).
Ya me dirás…
Un saludo.
... Jesús Prieto ...
Enunciado sencillo, respuesta imposible para mi después de horas y horas.
Buscar y reemplazar en woord 2003 lo siguiente:
[un texto pequeño entre 10 y 30 carateres y corchete de cierre]
En el texto aparecen continuamente cosas como esta:
[Bloque 41: #ci]
[Bloque 39: #aveinticinco]
etc siempre encerrados en corchetes. Hay que borrar o sustituir por un espacio en blanco todos esos textos encerrados en corchetes.
Con comodines activados yo he probado lo siguiente
Buscar [*] porque pensaba que el asterisco representaba uno o más caracteres encerrados entre los corchetes. No funciona..
En el artículo Los comodines de Word a fondo: teoría y práctica tienes la respuesta para el patrón de búsqueda que necesitas.
Una pista: Busca la palabra «corchete».