|
|
Volvendo á situación na que María persegue un mono, imos engadir á acción un escenario: "María persegue un mono **no parque**".
|
|
|
|
|
|
A frase "no parque" é preposicional. Hai diferentes xeitos de crear frases preposicionais con SimpleNLG-gl. A máis sinxela sería pasar a cadea de caracteres "no parque" ao método `addComplement`:
|
|
|
|
|
|
SPhraseSpec p = nlgFactory.createClause("María", "perseguir", "un mono");
|
|
|
p.addComplement("no parque");
|
|
|
|
|
|
Sen embargo, unha forma máis sofisticada de crear esta frase preposicional sería especificar as partes da frase preposocional -a preposición e a frase nominal- e combinalas:
|
|
|
|
|
|
NPPhraseSpec place = nlgFactory.createNounPhrase("o", "parque");
|
|
|
PPPhraseSpec pp = nlgFactory.createPrepositionPhrase("en");
|
|
|
pp.addComplement(place);
|
|
|
|
|
|
A continuación, engadimos a frase preposicional como un complemento á frase "María persegue un mono".
|
|
|
|
|
|
p.addComplement(pp);
|
|
|
|
|
|
A continuación móstranse tres formas diferentes de crear a frase preposicional "no parque". O mellor xeito de facelo depende das necesidades da aplicación.
|
|
|
|
|
|
* Forma simple:
|
|
|
|
|
|
p.addComplement("no parque");
|
|
|
|
|
|
* Forma semi-complexa:
|
|
|
|
|
|
PPPhraseSpec pp = nlgFactory.createPrepositionPhrase("en", "o parque");
|
|
|
p.addComplement(pp);
|
|
|
|
|
|
* Forma complexa:
|
|
|
|
|
|
NPPhraseSpec place = nlgFactory.createNounPhrase("o", "parque");
|
|
|
PPPhraseSpec pp = nlgFactory.createPrepositionPhrase("en");
|
|
|
pp.addComplement(place);
|
|
|
p.addComplement(pp);
|
|
|
|
|
|
O terceiro método require moito máis código que as outras dúas formas. Entón, por que o elexiriamos?
|
|
|
|
|
|
A razón principal é que o terceiro método permiet engadir partes a unha frase ou oración con moita máis facilidade. Temos que recordar que, habitualmente, SimpleNLG-gl utilizarase en un programa máis grande que seleccione o contido da oración, e que este contido será probablemente determinado de xeito fragmentado. É moito máis fácil engadir unha palabra ou unha cláusula a unha frase definida de xeito modular en vez de ter que engadir nova información a unha cadea monolítica con partes non diferenciadas. Por exemplo, se quixeramos describir o parque como "frondoso" empregando o terceiro método para definir a nosa oración, o único que teríamos que facer é escribir o seguinte código:
|
|
|
|
|
|
place.addPreModifier("frondoso");
|
|
|
|
|
|
Se escolleramos o primeiro ou o segundo método, engadir o adxectivo 'frondoso' á cadea 'parque' sería más complicado. Entre outras cosas, habería que escribir un código que:
|
|
|
|
|
|
* Busque onde inserir a nova palabra. Na maioría dos casos esto requeriría analizar a cadea, que non é unha tarefa sinxela.
|
|
|
* Rompa a cadena en partes para permitir a inserción.
|
|
|
* Insira a palabra.
|
|
|
* Determine se esa inserción require cambiar outras partes da cadea.
|
|
|
* Una novamente os anacos da cadea de forma gramaticalmente correcta.
|
|
|
|
|
|
En outras palabras, habería que programar un realizador como SimpleNLG-gl.
|
|
|
|
|
|
Entón, ¿por que, a pesares deste inconvinte poderiamos elexir os métodos 1 e 2 para definir unha oración? Porque ás veces simplemente queremos xerar texto enlatado, é dicir, texto que sabemos que non necesitará ser ampliado ou cambiado. Se simplemente queremos que a saída sea como se introduce na aplicación e sabemos que non cambiaremos unha frase (como 'no parque'), ten sentido tratala como unha entidade uniforme, como se fai cos dous primeiros métodos.
|
|
|
|
|
|
→ Para ver máis exemplos de frases preposicionais, ver `testsrc/PrepositionalPhraseTest.java`. |
|
|
\ No newline at end of file |