Skip to content

Sección XI – Frases preposicionais

andrea.cascallar edited this page Jul 11, 2018 · 1 revision

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.