lunes, 7 de diciembre de 2015

Herramientas de búsqueda de textos en archivos: la navaja suiza de cualquier traductor

Si tuviera que elegir una única aplicación para redactar una traducción, excluyendo por supuesto las que incluye cualquier sistema operativo, curiosamente la aplicación que elegiría no sería una aplicación específicamente diseñada para la traducción, pues escogería una aplicación que me permitiese hacer búsquedas en un conjunto de archivos de texto.

En los años que llevo traduciendo, este tipo de herramientas ha demostrado ser las más versátiles y, aunque el trabajo me obliga a pasar de una herramienta de traducción a otra y a recurrir a todo tipo de diccionarios, esta pequeña pero útil herramienta ha demostrado ser de las más útiles y versátiles.

En principio, parecería que la función que ofrecen estas herramientas debería proporcionarla cualquier sistema de memorias de traducción, pero desgraciadamente no es así. El problema es que las memorias de traducción parecen estar diseñadas principalmente para encontrar el segmento más similar al que estás buscando. Por ejemplo, si buscas el segmento «The monitor displays a yellow screen.» te mostrarán con suerte segmentos como «The monitor displays a red screen.» y hay que reconocer que hacen un buen trabajo en este sentido.

El problema radica en que cuando no buscas un segmento, sino un término sino una expresión utilizan el mismo algoritmo y, en este caso, los resultados no son tan buenos por diversos motivos:

La búsqueda no resulta tan precisa. Al buscar términos cortos puede interesarnos emplear opciones como «Coincidir mayúsculas y minúsculas» o «Coincidir palabras completas» que las memorias de traducción no incluyen.
No es posible establecer un orden de prioridades. Con frecuencia, disponemos de varios materiales con diversos niveles de prioridad. Por ejemplo, una memoria de traducción puede estar aprobada por el cliente y la otra puede ser una memoria de menor fiabilidad, pero más completa. Los algoritmos de las memorias de traducción suelen priorizar los resultados únicamente por grado de concordancia, lo que puede hacer que se nos pasen por alto resultados que tienen una mayor prioridad.
Solo admiten un documentos bilingües. Es fácil convertir cualquier documento bilingüe en una memoria de traducción, pero con frecuencia disponemos de otros tipos de materiales como, por ejemplo, consultas al cliente o textos monolingües, lo que obliga a realizar búsquedas en varias herramientas, con la consiguiente pérdida de tiempo.

En general,  ordenar los materiales en carpetas por prioridad y realizar búsquedas con una herramienta de búsqueda de texto suele ser el método más eficaz y eficiente de consultar la referencia de una traducción. Durante muchos años he utilizado una herramienta para este fin, pero dado que se trata de una herramienta desarrollado para un sistema operativo concreto su aplicación es limitada. Además, en ciertas ocasiones es fácil pensar que una herramienta diseñada específicamente para la traducción podría ser más útil.

De esta manera, ha surgido la idea de potenciar esta herramienta, aunque para ello hay que comenzar construyendo un prototipo capaz de ofrecer la funcionalidad básica. Con este fin ha surgido OpenTextSearch, que en estos momentos es poco más que proyecto de fin de semana. Aún así, ya es capaz de buscar en carpetas y presentar los resultados de una manera suficientemente clara, como podéis ver en la siguiente captura:



No obstante, esto es solo el principio. Conforme el proyecto avance, podremos incorporarle cada vez características más interesantes que harán que el trabajo de cualquier traductor sea más cómodo y productivo. Si quieres participar con ideas o te interesa probar la versión alfa, ¡no dudes en ponerte en contacto con nosotros»

lunes, 2 de noviembre de 2015

petraREV: Tirando del hilo de la madeja de las repeticiones

Muchos novelistas han comentado alguna vez que uno de los aspectos más apasionantes de escribir una historia es descubrir como se desarrolla, lo que muchas veces resulta una sorpresa para ellos mismos, a pesar del evidente control que tienen sobre ella. Al programar a veces ocurre algo parecido. Comienzas a escribir un método y, conforme vas tecleando aparecen de forma mágica el programa comienza a adquirir como por arte de magia funciones en que no eran las que tenías pensadas cuando te sentaste a escribir el código.

Algo parecido me ha ocurrido con la última función que he incorporado a petraREV y que tuvo su origen en una idea muy sencilla: la comprobación de coherencia, una de las primeras funciones de esta herramienta. Esta función es una de las más prácticas y, desde hace mucho, funciona de manera muy estable. No obstante, cuando revisaba con petraREV archivos en los que sabía que había muchas repeticiones y petraREV me decía escuetamente que no había ningún problema, no me sentía satisfecho con esta respuesta. ¿Había muchas repeticiones y todas estaban bien o, por algún motivo, no había problemas porque sencillamente no había repeticiones? Ningún número de la línea de resultados me informaba de ello, así que me decidí a incluir un pequeño número que me informara sencillamente del número de repeticiones que sí que habían coincidido.

Mi idea era incluir este número directamente en la rutina de comprobación de coherencia. Bastaba probablemente con dar visibilidad a algún cálculo interno para lograr la información que necesitaba. No obstante, al releer la rutina me di cuenta de que el dato que buscaba no era tan obvio y, ahora que me detenía a pensar en ello, me daba cuenta de que ni siquiera sabía exactamente lo que quería. ¿Importaban solo las repeticiones globales o era preferible desglosarlas por archivos? ¿Tal vez era una oportunidad para estudiar la distribución de repeticiones por archivos?

Con todas estas consideraciones, era evidente que no bastaba con añadir un pequeño número al informe, así que comencé a escribir una nueva función, la número 84, para analizar las repeticiones. Decidí que la manera más completa de mostrar la información era indicar el número de segmentos que no se repiten en ningún otro sitio, las repeticiones dentro del propio archivo y las de los otros archivos. Tras unas cuantas líneas obtuve los datos deseados, pero la información mostrada en una tabla parecía poco intuitiva. Leer que un archivo tiene 17 segmentos nuevos, 5 repeticiones internas y 3 repeticiones externas no permite extraer ninguna conclusión rápida. Es posible convertir estas cifras al porcentajes, es decir, 68%, 20% y 12% respectivamente, pero sigue habiendo que detenerse unos momentos a analizar estos datos.

Por tanto, decidí construir un nuevo objeto gráfico que mostrase estos datos como porcentajes de una barra en varios colores. A la derecha, las palabras nuevas, luego las repeticiones internas y por último las externas. El resultado era mucho mejor, pero seguía sin aclararse una incógnita sobre esas repeticiones externas. ¿Estaban distribuidas en muchos archivos o en pocos? Y, aún más importantes, ¿había problemas de coherencia en estas repeticiones o no?

No parecía que el gráfico o la tabla pudiera incluir esta información sin convertirlo en un galimatías, así que le añadí a la función una opción de mostrar detalles de la repeticiones en los que, para cada archivo, se mostraría el número de segmentos repetidos que había y también los problemas de coherencia que planteaban. El objeto gráfico para crear barras de colores estaba ya creado así que decidí utilizarlo para mostrar una comparación entre los segmentos coincidentes y los no coincidentes. En este caso, los colores por defecto del gráfico no parecían adecuados (ni el azul oscuro ni el azul oscuro indican dónde está el problema), así que modifiqué la biblioteca gráfica para mostrar unos verde y rojo mucho más reveladores (¿a que en este caso ya no hace falta que diga qué color indica el error?).

Ahora podía ver claramente el efecto sobre los demás archivos que tenían las repeticiones de un archivo, pero ver una columna de barras del mismo ancho podía inducir a error, porque sugería que todos los archivos eran igualmente similares al que se estaba analizando. ¿No sería preferible que el ancho de la barra fuera proporcional al número de segmentos repetidos presentes? Y, puestos a pedir, ¿no deberían aparecer en primer lugar los archivos en los que el número de repeticiones era mayor? Dicho y hecho, aunque para ello tuve que modificar una vez más el objeto gráfico y presentar los datos de otra manera, aparte de crear una nueva opción de configuración para que las rutas se pudieran reducir a la mínima longitud necesaria.

El resultado podéis verlo debajo y creo que ilustra de manera bastante directa cómo se reparten los segmentos repetidos de un conjunto de segmentos, pero desde luego si os resulta críptico os agradecería enormemente que me pusieseis los pies en la tierra:


Desde luego no pienso que la rutina esté completamente terminada. A fin de cuentas, falta traducirla al inglés y documentarla, aparte de que algunas mejoras siguen rondando mi cabeza. Por ejemplo, tal vez los archivos deberían aparecer ordenados por número de segmentos repetidos en lugar de por el orden en que se cargaron. Igualmente, tal vez la longitud de la barra que distingue entre repeticiones coincidentes y no coincidentes debería ser proporcional para todos los archivos (ahora es proporcional para cada archivo). Y desde luego, los números deberían aparecer alineados a la derecha. Aún así, son ya mejoras que no tengo tan claras. Siempre que hay que plantearse si una idea constituye una oportunidad o una distracción y ya no lo tengo tan claro sobre estas nuevas ideas.

A fin de cuentas, lo que empezó siendo un pequeño número, se ha convertido en una nueva función, un nuevo objeto gráfico estadístico y hasta una nueva opción de configuración que tal vez pronto afecte a gran parte de los resultados que presenta petraREV y, desde luego, cuando comencé a programar no tenía ni idea que iba a descubrir esta historia.

domingo, 30 de agosto de 2015

petraTAG: Nueva versión con listas, por ejemplo, de rubios, morenos y calvos

Acabamos de lanzar la nueva versión de petraTAG, que puedes descargar de manera completamente gratuita desde http://www.opentranslation.es/petratag/instalacion.htm.

Esta versión incluye dos grandes novedades. La primera, ya comentada en este blog, es la posibilidad de guardar textos etiquetados, por lo que si sueles trabajar con los mismos textos, solo tendrás que etiquetarlos una vez, guardarlos y ¡ya está! Cada vez que los cargues, se cargarán también las etiquetas, por lo que no tendrás que desperdiciar el tiempo en etiquetarlos.

La segunda novedad consiste en la incorporación de una función de listas de lemas al asistente de secuencias. Por ejemplo, imagina que quieres estudiar el uso de determinados adjetivos en un texto. Antes hubieras tenido que buscar cada adjetivo y sumar manualmente los resultados, pero ahora puedes buscar de una vez todos los adjetivos que quieras y obtener automáticamente los resultados.

Pero probablemente sea verlo con un ejemplo práctico, así que vamos a ver cómo utilizan autores de diferentes países los adjetivos de color del pelo «moreno»,  «rubio» y «calvo». Nuestra tesis, un poco extravagante, es que los autores norteamericanos tienden a utilizar más el «rubio» y los latinos el «moreno».

Para ello, basta con abrir la pantalla de búsqueda, elegir la pestaña «Buscar secuencia» y hacer clic en el botón «Buscar». En el asistente que aparecerá veremos tres botones con puntos suspensivos, como vemos en la siguiente ilustración:

Estos botones permiten acceder a la pantalla de listas, donde podemos elegir la lista que nos interese. La principal utilidad de esta lista es ofrecernos un lugar cómodo donde almacenar listas, especialmente cuando sean listas que utilizamos con frecuencia o son particularmente listas. Las listas predeterminadas son las siguientes:

Para los fines de nuestro estudio, elegimos la lista «calvo,moreno,rubio» haciendo doble clic en ella. Volveremos al asistente para secuencias, donde deberemos elegir que la palabra buscada sea un nombre, de manera que quede de la siguiente manera:


¡OJO! No es necesario utilizar la pantalla de listas para indicar una lista. También podemos indicar todos los elementos que nos interesan sencillamente separándolos con una coma sin espacio. Por ejemplo, podemos escribir «calvo,moreno,rubio», «rojo,verde,azul», «alegre,contento,enfadado,triste» o lo que queramos. La pantalla de lista solo es una manera cómoda de reutilizar las listas.

¡Ya queda muy poco! Eligiendo «Aceptar» volveremos a la pantalla de búsqueda. Para que sea más fácil interpretar los resultados, elegimos que se nos muestre la distribución y que sea del lema 0 (es decir, la palabra que estamos buscando). El resultado, debe ser el siguiente:

¡Ya solo queda comenzar a cargar textos y poner a prueba nuestra tesis! Nosotros hemos encontrado lo siguiente:

Matilde Asensi - El origen perdido (5 morenos, 4 rubios, 4 calvos)
Rosa Montero - La hija del caníbal (8 morenos, 5 rubios, 4 calvos)

Stephanie Meyer - Crepúsculo (3 morenos, 11 rubios, 1 calvo)
E. L. James - Cincuenta sombras de Grey (2 morenos, 30 rubios, 0 calvos)

¡Y los resultados sorprendentemente parecen avalar nuestra tesis! ¿Pero y si hubiéramos considerado también las tonalidades pelirroja y castaña? Además, los libros que hemos elegido son bastante recientes, ¿habrá crecido o disminuido la presencia de rubios en la literatura con el tiempo? ¿Predominarán en la literatura romántica o en el terror? Ahora con petraTAG realizar cualquiera de estos estudios, o incluso uno que realmente merezca la pena, es más fácil que nunca.

Si tienes cualquier duda respecto al uso de esta función, no dudes en escribirnos y estaremos encantados de ayudarte.

domingo, 19 de julio de 2015

El demonio está en las mayúsculas

Al escribir cualquier aplicación de procesamiento del lenguaje natural, aspectos que suelen pasarse por alto en un principio acaban demostrando tener una importancia crucial. Como por ejemplo, los espacios, que con frecuencia se ignoran prácticamente, al figurar en los habituales tokens y, sin embargo, son con frecuencia la causa de cierto errores de errores muy difíciles de rastrear. O las mayúsculas, de las que bien podríamos decir que carecen de importancia hasta que se convierten en lo único importante.


Por ejemplo, en petraREV recientemente hemos tenido que replantear nuestro sistema de buscar y copiar términos para tratar de manera más inteligente el uso de las mayúsculas y minúsculas.

En principio, la estrategia que se seguía era buscar cualquier resultado, independientemente del uso de mayúsculas y minúsculas. Por ejemplo, imaginemos que buscamos el término «setup» y encontramos el siguiente resultado:

1. Setup → Configuración

La mayúscula con la que comienza el término encontrado carece en este caso de poca importancia, ya que es preferible probablemente ver este resultado, a pesar de que no sea una coincidencia perfecta, que no ver ninguno.

Esta estrategia, si bien es agradablemente general, resulta poco precisa. Por ejemplo, imaginemos que encontramos dos resultados:

1. Setup → Configuración
2. setup configuración

En este caso, parece evidente que el resultado más interesante es el segundo, ya que no solo coincide el texto, sino también el uso de mayúsculas y minúsculas. Por tanto, resulta más útil cambiar la estrategia a buscar cualquier resultado, independientemente del uso de mayúsculas y minúsculas, pero dando prioridad a los casos en los que también coinciden mayúsculas y minúsculas.

A pesar de ser una mejora, sigue habiendo casos en los que esta estrategia no funciona de manera óptima. Por ejemplo, imaginemos que obtenemos los siguientes resultados:
 
1. Setup → instalación
2. setup configuración

Si bien el segundo resultado sigue siendo más interesante, el primero también puede tener interés, ya que es el síntoma de una posible incoherencia terminológica que habría que estudiar. ¿Hay motivos para traducir «setup» como «instalación» o como «configuración»? ¿Cuál es la opción que se ha utilizado con mayor frecuencia en casos anteriores? ¿Es posible que haya conflictos con otros términos, como «configuration»? En cualquier caso, parece conveniente informar de esta incoherencia al usuario.

Por tanto, nuestra estrategia inicial deberá evolucionar a buscar cualquier resultado, independientemente del uso de mayúsculas y minúsculas, pero dando prioridad a los casos en los que también coinciden mayúsculas y minúsculas, pudiendo descartarse los casos en los que la única diferencia entre las opciones presentadas es el uso de mayúsculas, pero no aquellos en los que hay diferencias de caracteres.

Y si alguien piensa que estas matizaciones no son más que cuestiones teóricas sin utilidad práctica, se equivoca. La precisión de nuestro método hará que al usuario se le ofrezcan más o menos opciones, lo que incide directamente sobre el tiempo que dedica a consultar la terminología. Por tanto, menos y mejores opciones se traducen directamente en menos tiempo y más productividad. Tal como siempre se ha dicho, el demonio está en los detalles o, al menos en este caso, en las mayúsculas.


martes, 2 de junio de 2015

petraTAG: Llega la extensión .ttxt

El tiempo que transcurre desde que surge la idea de introducir una novedad en este proyecto hasta que el cambio termina de materializarse es tremendamente variable. Hay ideas que surgen y a los pocos días, si no a las pocas horas, ya están listas para probarlas, pero también hay ideas que van pasando una y otra vez de la lista de tareas de un año a la del año siguiente.

A diferencia de lo que se podría pensar, esta variabilidad no depende ni de la utilidad de una novedad ni de la dificultad que implica ponerla en práctica. Hay ideas que no son nada fáciles y, además, su utilidad es bastante limitada, pero sin embargo se ponen en marcha rápidamente, porque resultan muy atractivas y, en ocasiones, su propia dificultad constituye un estímulo para ponerse manos a la obra.

La novedad que abordaremos en esta entrada, sin duda, pertenece al grupo de cambios que se han aplazado una y otra vez. Prácticamente desde el principio, resultó evidente que etiquetar un texto cada vez que se cargaba era muy poco eficiente. El proceso de etiquetado es bastante lento, especialmente cuando se trata de textos muy extensos, por lo que esperar a que se realizase este proceso era tedioso y, además, tenía fácil solución: bastaba con ofrecer la posibilidad de guardar el texto con el etiquetado para que la próxima vez que se cargase el texto, tuviéramos ya el etiquetado listo desde el principio.

Precisamente esta función es la que cumple la nueva extensión que admite ahora petraTAG, la extensión .ttxt. Los archivos con esta extensión contienen ya el etiquetado del texto, por lo que se cargan en apenas un par de segundos. Para guardar un texto con este formato, basta con cargarlo, aguardar pacientemente a que finalice el etiquetado para, a continuación, seleccionar Archivo → Exportar y, tras seleccionar la ruta del archivo y el tipo de exportación Texto etiquetado, hacer clic en Exportar.  Para introducir este cambio, se han pulido también varios aspectos del funcionamiento interno de petraTAG, que ahora es más eficiente.

Aparte de la comodidad inmediata que aporta esta nueva función, también abre varias posibilidades interesantes. Por ejemplo, al ser posible guardar el etiquetado de un texto, podría ser interesante incluir un corrector de etiquetado que permitiera corregir los errores de etiquetado mediante un sistema similar a los cuadros de diálogo de corrección ortográfica que suelen incluir los procesadores de texto. Una nueva función que, tal vez, pronto incluirá petraTAG.

miércoles, 25 de febrero de 2015

petraREV: Más buscar y copiar

La nueva versión de petraREV está en pleno proceso de desarrollo. En esta ocasión, estamos intentando conseguir que el programa resulte más intuitivo. Concretamente, se han añadido varias mejoras a la pestaña Buscar y copiar para que su uso sea más cómodo. Por ejemplo, ahora cuando hay varias opciones se da prioridad a aquella cuyo uso de mayúsculas y minúsculas coincida con el del texto introducido. Además, si hay varias opciones, nos aparecerá un pequeño cuadro de diálogo para elegir la que preferimos. Además, cuando no hay ninguna concordancia exacta, pero se encuentran resultados relevantes, la información se muestra en la ventana habitual de petraREV, lo que facilita copiar y pegar el texto que queramos.

Nueva pantalla para elegir la traducción

Un montón de novedades que no acaban aquí, ya que el equipo de desarrollo está experimentando con una nueva función de traducción semiautomática que podría aportar una comodidad aún mayor cada vez que hagamos algo tan sencillo como copiar y pegar texto.