-
Notifications
You must be signed in to change notification settings - Fork 1
Sección XI – Frases preposicionais
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
.