miércoles, 7 de junio de 2017

Ya disponible la biblioteca Java del etiquetador morfosintático petraTAG

Hace ya bastante tiempo que está disponible la aplicación petraTAG, que además de permitir realizar el etiquetado morfosintáctico de cualquier texto en español, también incluye numerosas herramientas para analizar los resultados del etiquetado, pero... ¿qué ocurre cuando queremos integrar un etiquetado eficaz en nuestra propia aplicación?

Para facilitar la integración del motor de etiquetado de petraTAG en cualquier proyecto, acabamos de lanzar en nuestra web la primera versión abierta del motor de etiquetado. Para descargarla, solo tenemos que dirigirnos a la página de la API de la ayuda en línea de petraTAG y descargar el archivo petraTAG-API1.0.zip, que contiene la biblioteca y todos los archivos necesarios para etiquetar un texto en español o inglés.

Vamos a ver cómo utilizar esta biblioteca con un ejemplo muy sencillo que desarrollaremos en Netbeans. Para crear el proyecto, solo tenemos que elegir FileNew Project. En el cuadro de diálogo que aparecerá, elegimos JavaJava Application. Un nuevo cuadro de diálogo nos pedirá que elijamos el nombre del proyecto y la carpeta donde se guardará. En nuestro caso, vamos a elegir como nombre del proyecto petraTAGdemo.

Ahora tenemos que vincular nuestra biblioteca así que, en el árbol del proyecto que aparece a la izquierda, nos situamos encima del proyecto que acabamos de crear y elegimos Properties. Nos vamos ahora a la categoría Libraries y agregamos los dos archivos jar que contiene el zip: Utiles.jar y petraTAG.jar.

¡Ya queda muy poco! Solo tenemos que copiar la carpeta languages que hemos descargado anteriormente en el directorio raíz del proyecto que hemos creado y podremos comenzar a crear a escribir el código de nuestra aplicación. Para comprobar que funciona, podemos escribir lo siguiente:

package petratagdemo;

import petratag.TaggedSentence;
import petratag.Language;

public class PetraTAGdemo {

    public static void main(String[] args) {
        Language language=new Language();       
        language.init("ES");
       
        String text="Este texto es un ejemplo.";
        TaggedSentence sentence=new TaggedSentence();
        sentence.tag(text, language);
       
        for (int n=1;n<=sentence.length;n++) {
            System.out.println(sentence.tokens[n]+" - "+sentence.lemmas[n]+" - "+sentence.posTags[n]);
        }
    }
}


Si lo ejecutamos, deberíamos obtener el siguiente resultado:

- Loaded 271681 dictionary entries and 60 locutions.
Este - este - dd0ms0
texto - texto - ncms000
es - ser - vsip3s0
un - uno - di0ms0
ejemplo - ejemplo - ncms000
. - . - Fp


Pero, ¿cómo funciona? Vamos a ver paso a paso este pequeño programa para ver cómo se etiqueta el texto.

Comencemos con:

        Language language=new Language();       
        language.init("ES");

Para etiquetar un texto, debemos definir un idioma que creamos aquí con la primera línea. La segunda línea carga los datos necesarios para un idioma concreto. Actualmente, solo están disponible el español y el inglés, pero sería fácil crear otros idiomas. Solo es necesario cargar un idioma una vez y, si no queremos etiquetar en varios idiomas, basta con definir un objeto Language, por lo que es habitual definirlo como objeto estático para toda nuestra clase.

        String text="Este texto es un ejemplo.";
        TaggedSentence sentence=new TaggedSentence();
        sentence.tag(text, language);

El objeto que contendrá los datos del etiquetado es TaggedSentence y para etiquetar el texto, solo tenemos que llamar al método tag, indicando el idioma y el texto que queremos etiquetar.

        for (int n=1;n<=sentence.length;n++) {
            System.out.println(sentence.tokens[n]+" - "+sentence.lemmas[n]+" - "+sentence.posTags[n]);
        }

Al etiquetar el texto, se han rellenado automáticamente tres matrices que incluyen todos los datos que necesitamos: los tokens (o palabras), los lemas y las etiquetas morfosintáticas, que siguen la convención establecida en el etiquetario del proyecto. Con este bucle, recorremos todos sus valores.

Aparte del etiquetado, la biblioteca incluye muchas funciones que aumentan su utilidad. No obstante, hemos optado por elegir un ejemplo sencillo que explique claramente los elementos básicos del etiquetado. Para más información, podéis consultar la página informativa sobre la clase. Próximamente, comentaremos algunas posibilidades más y, si tenéis cualquier duda, será para nosotros un placer responder a cualquier pregunta.

domingo, 26 de marzo de 2017

petraTAG: ¿Cómo extraer los diálogos de un texto?

Tras varios meses ocupados en otros proyectos, ¡ha llegado la hora de retomar petraTAG! Tenemos previstas muchas novedades muy interesantes pero, para amenizar la espera, hemos pensado que ya era hora de lanzar una nueva versión de petraTAG, así que ya podéis descargarla desde la página web de petraTAG.

Dado que actualmente estamos desarrollando diversas nuevas características, es un momento ideal para hacernos llegar vuestras ideas y sugerencias, así que no dudéis en publicar aquí un comentario o enviarnos un mensaje directamente a la dirección de la sección de contacto de nuestra página principal.

Una de las funciones que hemos mejorado es el análisis de los diálogos. La mejor manera de ilustra esta función es mediante un ejemplo, como el siguiente texto extraído de «Los cinco y el tesoro de la isla» de Enid Blyton:

Mamá movió la cabeza.
¡Qué estupendo ponerme otra vez los shorts!dijo Ana, bailando de contenta—. Ya estoy cansada del uniforme del colegio. Tengo enormes ganas de ir con shorts o en traje de baño y ponerme a jugar con los chicos.

En el texto anterior, hemos diferenciado mediante colores el texto clasificándolo en tres tipos:
1. Texto normal (en azul)
2. Diálogos (en verde)
3. Acotaciones de diálogos (en morado)

petraTAG puede hacer un recuento de las palabras de un texto que corresponden a cada categoría. Además, extrae los interlocutores y los ordena según el número de veces que se les cita.

Para utilizar esta función, hay que cargar y etiquetar un texto, para lo que basta con elegir Archivo → Cargar archivo. El texto se importará y se etiquetará automáticamente, para lo que es necesario esperar un poco. Cuando aparezcan las estadísticas de etiquetado, hay que elegir Herramientas → Extraer diálogos y en unos segundos obtendremos los resultados. Por ejemplo, para el libro «Los cinco y el tesoro de la isla» que antes comentábamos, obtenemos lo siguiente:

Así podemos confirmar por ejemplo, con las estadísticas en la mano, que Dick era el protagonista menos relevante. También vemos que gran parte del texto son diálogos, algo habitual en la literatura juvenil. También vemos que se indica el interlocutor en la mayoría de las ocasiones.

Para compararlas, podemos ver estas estadísticas para «Crepúsculo» de Stephanie Meyer y «También esto pasará» de Milena Busquets.

Crepúsculo (Stephanie Meyer)
También esto pasará (Milena Busquets)
Conforme vamos avanzando hacia la literatura «seria», es fácil observar que el porcentaje del total que corresponde a los diálogos es cada vez menor. Curiosamente, las acotaciones aumentan en «Crepúsculo», pero disminuyen muy pronunciadamente en «También esto pasará». Por último, también salta a la vista que en estos dos últimos libros el porcentaje de casos en los que se marca el interlocutor es muy inferior. Aún más, si tenemos en cuenta que estos dos libros se han escrito en primera persona y, por tanto, el interlocutor viene implícito con el tiempo verbal (dije, grité, susurré...). De no ser así, el porcentaje sería muy inferior.

Si tenéis alguna idea sobre cómo aplicar esta función a vuestro proyecto, no dudéis en ponernos en contacto con nosotros.

lunes, 23 de enero de 2017

Tutorial: ¿Cómo descargar y alinear los Diarios Oficiales de la Unión Europea?

Hace no mucho, descubrí en la web un recurso que considero que puede ser tremendamente interesante para muchos traductores: los Diarios Oficiales de la Unión Europea. Al tratarse de documentos oficiales, están disponibles en varios idiomas y, por si fuera poco, la propia página ofrece la posibilidad de alinear automáticamente los textos en hasta tres idiomas, por lo que buscar un término en inglés y encontrar su equivalente en español es pan comido. Además, dada la amplia diversidad de temas tratados en el derecho europeo, es fácil encontrar términos de prácticamente todas las disciplinas. Aunque tal vez la opción que encontremos no sea óptima, al menos puede darnos una posibilidad sobre la continuar nuestras búsquedas. Para realizar la búsqueda, solo tenemos que utilizar la página o, directamente, podemos escribir en Google:

"término que queremos buscar" site:eur-lex.europa.eu


Si bien estas búsquedas en línea son muy útiles, también habrá casos en los que sea preferible realizar las búsquedas con herramientas de escritorio como, por ejemplo, la simpar herramienta gratuita de búsqueda petraSearch de OpenTranslation. Tal vez sea porque queremos comparar las frecuencias con las que ocurren varias posibilidades o quizás porque queremos realizar las búsquedas sin conexión a internet.

Sea como sea, el sitio nos permite descargar estos documentos y, una vez en nuestro disco duro, podremos alinearlos cómodamente con la última versión de petraRev. Los pasos que debemos seguir son muy sencillos:

1. Navega hasta la dirección donde se encuentran los diarios.

http://data.europa.eu/euodp/en/data/dataset?q=official+journals+of+the+european+union&organization=publ&ext_boolean=exact&sort=modified_date+desc

2. Descarga la versión correspondiente al español y al inglés.

3. Elimina, si los hay, los archivos .doc y .tif. Si hay archivos .zip, descomprímelos y elimínalos luego.

4. Copia todos los archivos a una sola carpeta con:

find "carpetaOrigen" -type f -exec mv {} "carpetaDestino" \;

5. Una vez que todos los archivos se encuentren en una carpeta, abre petraRev y elige Herramientas → Revisar. En la pantalla de revisión, borra todas las operaciones con Marcar todo → Quitar. Ahora, escribe Alinear lotes de archivos y haz doble clic en esta operación para añadirla a la lista de operaciones.

6. Haz doble clic ahora en esta operación para configurar esta operación. Solo tienes que indicar dónde se encuentran la carpeta con los archivos de origen y la carpeta con los archivos de destino. Si lo deseas, también puedes indicar dónde quieres que se guarden los archivos alineados.

7. Haz clic en Revisar y, después de una breve espera, se alinearán los archivos y se cargarán en la herramienta. Puedes hacer clic en Archivo → Exportar para exportar la traducción al archivo que desees.

Así, conseguirás tener una base de datos fenomenal donde buscar términos particularmente complicados o para los que quieras conocer una traducción oficial.

¡Un último consejo! Si alineas todos los archivos correspondientes a un año, el archivo de salida será bastante grande (entre 100 y 200 MB), por lo que puedes reducirlo, sin perder información, seleccionando Herramientas → Edición. En la pestaña Reemplazar, elige la opción Eliminar por... Repetidos y haz clic en Eliminar. Eso sí, tendrás que tener paciencia porque es fácil que el número de segmentos que deberá comprobar supere los dos millones, por lo que es fácil que tengas que esperar algo más de media hora, para conseguir los resultados. Afortunadamente, se trata de un proceso que solo hay que hacer una vez y podrás disfrutar de sus frutos durante mucho tiempo.

lunes, 5 de diciembre de 2016

Modelos de lenguaje y R


A fin de seguir avanzando, en OpenTranslation estamos poniendo a punto nuestros sistemas para comenzar a utilizar modelos del lenguaje. Estos modelos del lenguaje han sido ampliamente utilizados en el procesamiento del lenguaje natural y creo que la mejor manera de entender sus aplicaciones es mediante un ejemplo:

Imaginemos que estamos creando un sistema de reconocimiento de voz y nuestro sistema es incapaz de distinguir entre las siguientes dos opciones:

wreck a nice beach
recognise speech

Aunque a primera vista tal vez no lo parezca, ambas opciones se pronuncian de manera muy similar en inglés. Es evidente que, en caso de que se le plantee la duda (y es posible, pensemos por ejemplo si escucha estas palabras en un ambiente muy ruidoso), un humano no tiene problemas en darse cuenta de que la opción correcta es la segunda «recognise speech» (reconocer la voz), ya que la primera «wreck a nice beach» (destrozar una bonita playa), no tiene mucho sentido.

El problema está en que los ordenadores no vienen de serie con el sentido común incluido, así que tenemos que encontrar una manera de que elijan entre una y otra opción.

Un método muy interesante es crear un modelo del lenguaje, analizando una gran cantidad de texto y expresándolo en forma de un conjunto de bigramas (pares de palabras) y sus respectivas frecuencias. Por ejemplo:

de la    891
lo que    610
en el    540
de que    528
a la    455
en la    449
[...]

Lo interesante de este modelo es que, con estos datos, podemos calcular la probabilidad de que una determinada cadena de texto se dé en el idioma o no. En el caso anterior, es obvio que «recognise speech» que es un término muy frecuente, tendrá una probabilidad muy superior a «wreck a nice beach», que es una combinación un tanto extraña. Por tanto, el sistema podrá distinguir cuál es la opción correcta.

Este método no solo puede aplicarse al reconocimiento de voz, sino también a cualquier situación en la que la probabilidad de una determinada secuencia de palabras nos ayude a elegir una opción sobre otra como, por ejemplo, ocurre también en la corrección ortográfica de palabras.

Dado que este método nos obliga a calcular la colección de palabras y sus frecuencias, estamos añadiendo a petraREV una función que, dado un texto, nos permite crear un modelo del lenguaje utilizado en él.

Para ilustrar su utilidad, hemos pensado que sería interesante comparar los modelos obtenidos a partir de diversos libros famosos y, para crear rápidamente los gráficos, hemos decidido utilizar R. Para que podáis repetir este proceso con cualquier otros datos, vamos a ver brevemente los comandos que hay que utilizar.

Para empezar, hay que instalar R, lo que puede hacerse fácilmente utilizando el Centro de Software de Ubuntu.

Una vez instalado, basta con que abramos la consola y escribamos:

R

¡Ojo! Es imprescindible escribir esta R en mayúsculas, si la escribimos en minúsculas nos aparecerá un mensaje de error.

A continuación, le indicamos a R la carpeta donde están nuestros datos:

> setwd('/media/.../Corpus')

Y ya podemos leer los datos:
> data=read.table('corpus.txt')

Para ver que los datos se han cargado correctamente, basta con escribir:

> data

En nuestro caso, son los siguientes:

García_Marquez,_Gabriel_-_Del_amor_y_otros_demonios    21608    48527
Asensi,_Matilde_-_El_origen_perdido    65321    188696
Montero,_Rosa_-_Bella_y_oscura    26877    64046
Sloan,_Robin_-_El_Sr_Penumbra_y_su_libreria_24_horas_abierta    33938    93863
Meyer,_Stephanie_-_Eclipse    57804    192167

La primera columna indica el título de libros, la segunda el número de bigramas y la última el número de tokens, así que definiremos estas variables:

> name=data[,1]
> bigrams=data[,2]
> tokens=data[,2]

¡Y ya podemos crear un gráfico con estos datos! Basta con escribir:

> plot(tokens,bigrams)

¡Realmente fácil! ¿Verdad?

El único problema es que no sabemos a qué libro corresponde cada punto. Afortunadamente es muy fácil solucionar este problema. Para ello, necesitaremos el paquete calibrate, así que si no lo tenemos, podemos instalarlo con:

> install.packages("calibrate")

Ahora calibramos los datos:

> library(calibrate)

Y por último indicamos que queremos que en cada punto nos aparezca el nombre del libro al que corresponde.

> textxy(tokens,bigrams,name)

Como necesito este formato en formato .png escribo los siguientes comandos:

> png('grafico.png')
> plot(tokens,bigrams)
> textxy(tokens,bigrams,name)
> dev.off()

Y ahora sí que sí, tenemos este bonito gráfico:

Sin duda es interesante pero, dado que estamos comparando libros con un número de palabras muy diferente, no es fácil obtener conclusiones. Próximamente, veremos cómo resolver este problema.


martes, 12 de abril de 2016

Xenial Xerus: una traducción muy especial al español

¡Ya puedes participar en la traducción de Ubuntu al español! Solo tienes que visitar la siguiente página:


Tras un sencillo proceso podrás comenzar a proponer tus traducciones o, si te unes al equipo de revisores, revisar las que hayan aportado otros usuarios.


Como ya sabrás, la próxima versión de Ubuntu es muy espcial, ya que se trata de una versión a largo plazo, por lo que será la que domine en los escritorios con Linux en los siguientes años. A menos de 9 días para que se lance... ¿quieres ayudar a que sea la mejor que se ha lanzado hasta el momento?



lunes, 4 de abril de 2016

petraREV: Las incidencias

Si ha habido una constante en mi puesto de trabajo desde que comencé a traducir ha sido el pequeño trozo de papel que siempre hay al teclado de mi ordenador con su correspondiente bolígrafo. Si miras el escritorio de cualquier traductor, sobre todo si se dedica a la localización, con frecuencia encontrarás una herramienta similar, tal vez sea un folio rigurosamente blanco, tal vez un papel para reciclar o tal vez, si eres especialmente ordenado, un cuaderno. Al parecer, mientras traducimos siempre hay cosas para las que somos incapaces de encontrar una solución que nos convenza, por lo que lo escribimos con la esperanza de que cuando estemos más despejados podamos despejar la duda.

Muchas veces se diría que no hace falta nada más que escribir nuestra duda para que se resuelva. Parece que, al formularla en palabras, aunque solo sean dos, nuestra cabeza empieza a dar vueltas buscando una solución hasta que la encuentra, por la que con frecuencia al terminar la traducción, sin que haya hecho falta estudiar punto por punto todas nuestras dudas, las hemos resuelto.

Lamentablemente no siempre es así. A veces terminamos la traducción y el problema que nos planteaba sigue ahí, lo que nos obliga a tomar una decisión final. Con frecuencia, descubriremos que no somos capaces de resolver por nosotros mismos las dudas, lo que nos obligará a redactar una consultas al cliente.

Las consultas al cliente son una cuestión espinosa: a los traductores casi nunca les gusta enviarlas y a los clientes casi nunca les gusta recibirlas, pero hay ocasiones donde son inevitables. Por ejemplo, no encontrar una referencia (como el título de una publicación o una opción de software) obliga de manera inexcusable a consultar al cliente acerca del criterio que quiere seguir.

El proceso de consulta al cliente suele estar definido con precisión, ya que prácticamente todas las agencias de traducción dispone de una plantilla para registrarlas. No obstante, no siempre se registran adecuadamente y con frecuencia acaban en el trocito de papel del traductor que espera que, antes de que termine su traductor, averigüe algo que haga innecesaria la consulta.

En OpenTranslation hemos pensado varias veces en crear una herramienta que facilitase el registro de incidencias, pero nuestros prototipos han tenido escaso éxito, probablemente por el mismo motivo que tampoco lo tienen las plantillas de dudas. A nadie le gusta rellenar un extenso formulario (muchas veces con cerca de diez campos) para una duda que al final ni siquiera se enviará. Aunque se trate de datos sencillos (como la fecha, el nombre del archivo o el texto de origen), supone una pérdida de valioso tiempo y, además, interrumpe el flujo de traducción.

Parte del encanto de anotar una duda en un papel es su inmediatez. Basta con escribir un par de palabras para que al día siguiente sepamos rápidamente lo que nos motivó a escribirla. A partir de esta idea, hemos diseñado una nueva herramienta para gestionar las incidencias, término que hemos elegido para llamar a los motivos por los que solemos anotar algo en el papel.

La novedad es que el proceso es extremadamente rápido. Abrimos un cuadro de diálogo, pulsamos un botón y con solo escribir las pocas palabras que necesitamos hemos terminado. El resto de los datos se toman de forma automática. Si lo deseamos, podemos indicar la naturaleza exacta de la incidencia, entre las siguientes:
  • Duda de traducción
  • Referencia no encontrada
  • Solicitud de aclaración
  • Error en el texto de origen
  • Nota para revisión
No obstante, ni siquiera es necesario, ya que la opción por defecto «Duda de traducción» es suficientemente genérica como para abarcar cualquier motivo que nos dude a apuntarla.

Por supuesto, si nuestra herramienta se limitase a registrar las palabras, no nos sería mucho más útil que un trozo de papel pero, gracias a la magia de la informática, petraREV es capaz de combinar la escasa información que le hemos indicado para crear un informe completo.

Por ejemplo, sin contexto, podemos generar el siguiente informe:


No es muy completo, pero no está mal. Sin embargo, si lo combinamos con una traducción, resulta mucho más útil.





Con esta base, crear un informe que pueda enviarse directamente al cliente es cuestión de segundos. ¡Y si tenemos algo que comentar al revisor, la lista de notas para el revisor nos ayudará a asegurarnos de que no se nos olvida nada!

Estas son las funciones que hay por el momento. Actualmente trabajamos en que resulte mucho más útil sin sacrificar comodidad. Dentro de poco podremos cambiar el estado, realizar búsquedas y filtrar nuestras dudas.

¿Tenéis vosotros también un trozo de papel al lado de tu teclado? ¿Creéis que las categorías que hemos creado son suficientes o faltan? ¿Qué funciones os gustaría que tuviera esta nueva herramienta? Estamos esperando conocer vuestras ideas para que la próxima versión de petraREV sea mejor que nunca.

lunes, 11 de enero de 2016

¡Llega la nueva aplicación de OpenTranslation, petraSearch!

A principios de diciembre ya comentamos que estábamos trabajando en una nueva aplicación para buscar texto en archivos que, a partir de hoy, es posible descargar de manera totalmente gratuita desde http://www.opentranslation.es/petrasearch/.


El funcionamiento de petraSearch es extremadamente sencillo: basta con escribir el texto que queremos buscar en el primer cuadro de texto, la ubicación donde queremos buscarla en el segundo y pulsar Search. Tras unos segundos, aparecerán los resultados.

También hay un cuadro de diálogo de configuración donde podemos cambiar el tamaño del texto de los resultados o elegir que se muestre un resumen después de los resultados.

Al igual que ocurre con  todos nuestros nuevos proyectos, estamos deseando mimarlo, por lo que cualquier sugerencia que hagáis, bien a través de este blog o escribiendo a la dirección normal de OpenTranslation será más que bienvenida. ¡Esperamos vuestros comentarios!