-
Notifications
You must be signed in to change notification settings - Fork 6
Sección III – Primeros pasos
Es importante destacar que SimpleNLG-ES es una librería [1], no una aplicación. Esto significa que no se puede ejecutar como un programa Java - no tiene un método o módulo principal. Es necesario crear un programa Java que utilice sus clases y métodos.
Para hacer uso de la librería SimpleNLG-ES, es necesario:
-
Descargar el archivo zip de SimpleNLG-ES.
-
Extraer y añadir el archivo jar de SimpleNLG-ES al classpath.
-
Crear una nueva clase Java que tenga el método "main" en ella. En este ejemplo, vamos a llamar a la nueva clase TestMain.
-
En la parte superior de la clase, añadir los siguientes "import":
import simplenlg.framework.*; import simplenlg.lexicon.*; import simplenlg.lexicon.spanish.XMLLexicon; import simplenlg.realiser.spanish.*; import simplenlg.phrasespec.*; import simplenlg.features.*;
-
Crear un lexicon, NLGFactory y realiser:
Lexicon lexicon = new XMLLexicon(); NLGFactory nlgFactory = new NLGFactory(lexicon); Realiser realiser = new Realiser(lexicon);
Siguiendo estos pasos, se debería obtener un código similar a este:
import simplenlg.framework.*;
import simplenlg.lexicon.*;
import simplenlg.lexicon.spanish.XMLLexicon;
import simplenlg.realiser.spanish.*;
import simplenlg.phrasespec.*;
import simplenlg.features.*;
public class TestMain {
public static void main(String[] args) {
Lexicon lexicon = new XMLLexicon();
NLGFactory nlgFactory = new NLGFactory(lexicon);
Realiser realiser = new Realiser(lexicon);
}
}
Figura 1: Clase Java lista para hacer uso de la librería SimpleNLG-ES.
Ahora ya se puede hacer uso de la librería para generar oraciones.
Tenéis disponibles más ejemplos sobre cómo utilizar SimpleNLG-ES, revisando los archivos java en la carpeta test
.
Vamos a crear el tipo más simple de frase permitida en SimpleNLG-es: texto enlatado, es decir, una cadena que nos gustaría que salga por pantalla tal y como está. Por ejemplo, si estamos escribiendo un programa que toma la entrada de los usuarios y genera un párrafo diferente dependiendo de las diversas entradas, pero cuya primera línea del párrafo sea siempre igual (por ejemplo, "Mi perro es feliz.") El código para hacer esto es:
NLGElement s1 = nlgFactory.createSentence("mi perro es feliz");
Ahora necesitamos usar el Realiser para generar la salida de la cadena:
String output = realiser.realiseSentence(s1);
System.out.println(output);
Es importante tener en cuenta que sólo es necesario crear el Lexicon
, NLGFactory
y Realiser
una vez dentro del programa; no es necesario crearlos para cada frase que se vaya a generar. Así que una buena idea es crearlos al inicio del programa y utilizarlos durante la ejecución del programa. De hecho, si el lexicón utilizado contiene un número elevado de términos, recargarlo cada vez que se genere una frase puede añadir una cantidad importante de tiempo a la ejecución de la realización lingüística.
El ejemplo anterior es la forma más sencilla de crear una oración. Ahora veremos cómo utilizar SimpleNLG-ES para hacer la mayor parte del trabajo, hay que tener en cuenta que es bastante flexible y hay varias maneras de generar oraciones.
En el nivel más bajo, SimpleNLG-ES entiende que una oración está usando una clase llamada SPhraseSpec
. Esta es accesible a través de NLGFactory
, usando el método createClause
. Los conceptos de 'frase verbal', 'frase nominal', 'frase preposicional', 'frase adjetiva' y 'frase adverbial' también se pueden acceder a través de NLGFactory
, usando createVerbPhrase
, createNounPhrase
, createPrepositionPhrase
, etc. Estos métodos devuelven clases con nombres similares - VPPhraseSpec
, NPPhraseSpec
, PPPhraseSpec
, AdjPhraseSpec
y AdvPhraseSpec
.
Para construir una oración utilizando las clases de SimpleNLG-ES, normalmente hay que seguir estos pasos (explicados más detalladamente en las Secciones V y siguientes):
- Crear una instancia de NLGFactory.
- Crear la oración utilizando el método createClause de NLGFactory. (Este método devuelve una instancia de SPhraseSpec.)
- Crear un verbo, sujeto y complemento directo usando los métodos createVerbPhrase y createNounPhrase de NLGFactory. (Estos métodos devuelven instancias de VPPhraseSpec y NPPhraseSpec).
- Opcionalmente, crear frases preposicionales, frases adjetivas y adverbios utilizando los métodos createPrepositionPhrase, createAdjectivePhrase y createAdverbPhrase de NLGFactory. (Estos métodos devuelven instancias PPPhraseSpec, AdjPhraseSpec y AdvPhraseSpec).
- Indicar el papel que las partes del discurso desempeñarán en la frase. Por ejemplo, especificar que una frase sustantiva es el sujeto de la oración y otra frase nominal es el complemento directo, utilizando setSubject y setObject. Especificar el verbo usando setVerb, y un complemento (por ejemplo, una frase preposicional) usando addComplement.
- Crear un objeto SimpleNLG llamado Realiser.
- Pedir al Realiser que transforme la instancia de SPhraseSpec en una cadena sintácticamente correcta.
Finalmente se obtiene una cadena de texto que es una frase o oración y puede tratarse como cualquier otra cadena de texto de Java.
Hay que tener en cuenta que este es el enfoque más detallado: en realidad se puede utilizar sólo setSubject
, setVerb
, etc., pasando a estos métodos cadenas de texto simples como argumentos. A menos que se quiera hacer cosas más complicadas, no es necesario especificar que un sujeto es un NPPhraseSpec
o que un verbo es un VPPhraseSpec
. Consultar la Sección V para ver un ejemplo de código Java real utilizado para generar una oración.
A continuación se muestra un desglose de las partes principales del discurso que puede generar SimpleNLG-ES. El resto del tutorial discutirá cada una de estas partes con más detalle.
Parte del discurso | Tipo de frase | Ejemplos | Método |
---|---|---|---|
Sujeto | Frase nominal | "el niño" | setSubject() |
Verbo | Frase verbal | "dió" | setVerb() |
Complemento directo | Frase nominal | "un regalo" | setObject() |
Complemento indirecto | Frase preposicional | "al perro" | setIndirectObject() |
Complementos | Frase preposicional | "en el parque" | addComplement() |
Cláusula "que" | "que Sara ve a Juan" | ||
Frase adjetiva | "encantado de conocerte" | ||
Frase adverbial | "muy rápido" | ||
Modificadores | Cláusula "que" | "la chica que conocía" | addModifier() |
Frase adjetiva | "bonita" | ||
Frase adverbial | "rápidamente" | ||
Tabla 1: Las partes del discurso que simpleNLG-es puede utilizar. Los modificadores y artículos se añaden a otras frases, el resto se añaden a una oración. |
[1] Una librería o API es una colección de métodos/funciones que se pueden usar en otros programas. Esto evita que los programadores tengan que escribir ese código ellos mismos.