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.