|
|
|
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 "main". 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.
|
|
|
|
|
|
|
|
→ Para obtener más ejemplos sobre cómo utilizar simpleNLG-es, revisar los archivos java en la carpeta `test`.
|
|
|
|
|
|
|
|
## Generar el tipo más simple de frase en SimpleNLG-es
|
|
|
|
|
|
|
|
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 siempre queremos que la primera línea del párrafo sea "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.
|
|
|
|
|
|
|
|
## Pasos necesarios para generar una oración más compleja
|
|
|
|
|
|
|
|
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 vayan a hacer cosas más complicadas, especificar que un sujeto es un `NPPhraseSpec` o que un verbo es un` VPPhraseSpec` no es necesario! 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 simpleNLG-es puede generar. 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. |
|
|
|
\ No newline at end of file |