Skip to content

Sección XIV – Más allá de las oraciones

Julio Janeiro Gallardo edited this page Sep 22, 2017 · 4 revisions

Hemos visto muchas formas de crear frases individuales. Pero, ¿qué haríamos para juntar esas frases y así crear un párrafo más grande? SimpleNLG-ES puede hacerlo utilizando la clase DocumentElement. Esta clase se utiliza para definir elementos que forman parte de una estructura textual mayor (documentos, secciones, párrafos, oraciones, listas).

Para crear un párrafo, se combinan las instancias de "DocumentElement" usando createParagraph. Para crear una sección, se combinan las instancias DocumentElement con createSection. Del mismo modo, para crear una lista, se pueden combinar estos elementos utilizando createList, y para crear un documento, se debería usar createDocument. A continuación, se analiza el uso de createParagraph y createSection.

Creando un párrafo

El método createParagraph toma una lista de oraciones o frases simples añadidas a través del método addComponent. Estas oraciones se unen en forma de párrafo.

Como primer paso, añadimos la siguiente sentencia de importación al principio del archivo:

    import java.util.Arrays;

Esto nos permitirá pasar una lista al método createParagraph más adelante. Ahora estamos listos para dar formato a un párrafo. En primer lugar, definimos algunas oraciones:

    SPhraseSpec p1 = nlgFactory.createClause("María", "perseguir", "un mono");
    SPhraseSpec p2 = nlgFactory.createClause("el mono", "pelear"); 
    SPhraseSpec p3 = nlgFactory.createClause("María", "estar", "nerviosa");

A continuación, definimos estas oraciones como instancias de DocumentElement:

    DocumentElement s1 = nlgFactory.createSentence(p1);
    DocumentElement s2 = nlgFactory.createSentence(p2);
    DocumentElement s3 = nlgFactory.createSentence(p3);

A continuación, podemos pasar estos elementos como una lista al método createParagraph:

    DocumentElement par1 = nlgFactory.createParagraph(Arrays.asList(s1, s2, s3)); [1]

Y finalmente, realizamos el párrafo:

    String output = realiser.realise(par1).getRealisation();
    System.out.println(output);

La salida resultante es:

    María persigue un mono. El mono pelea. María está nerviosa.

Hay que tener en cuenta que en los últimos pasos, estamos usando el realiser de manera diferente que en todos los ejemplos anteriores: En lugar de usar realiser.realiseSentence(), como lo hicimos para las oraciones individuales, ahora estamos usando Realiser.realise().getRealisation().

Creando una sección

Digamos que queremos tener varios de párrafos, organizados juntos bajo un encabezado de sección. Para hacer esto, se usaría createSection().

Con nuestro código anterior, podemos crear una sección con un encabezado como este:

    DocumentElement section = nlgFactory.createSection("Los juicios y afliciones de María y el mono");

Podemos agregar un párrafo a esta sección usando:

    section.addComponent(par1);

A continuación, se puede realizar la sección como en el ejemplo anterior:

    String output = realiser.realise(section).getRealisation();
    System.out.println(output);

→ Para ver más ejemplos de DocumentElement, ver testsrc/DocumentElementTest.java.

Salida HTML

De forma predeterminada, SimpleNLG-ES produce una salida de texto plano. Si se desea una salida con etiquetas HTML, se debe añadir un HTMLFormatter al realiser, por ejemplo:

    realiser.setFormatter(new HTMLFormatter());

→ Para ver más ejemplos con salida HTML, ver HTMLFormatterTest.java.


[1] También se pueden agregar oraciones individuales:

    DocumentElement par1 = nlgFactory.createParagraph();
    par1.addComponent(s1); // ...etc.