Programa que "entende" sentenças simples (sintática)


Descrição do proplema: Interpretação 1

O programa deve dar respostas apropriadas, com base nas sentenças fornecidas previamente. O usuário deve fornecer uma sentença (escrita em uma lista) e o programa irá responder se esta sentença está gramaticalmente correta ou não.

Características necessárias para a resolução do problema:

Descrição da resolução:

Para a construção de frases é preciso lembrar que as palavras são agrupadas segundo certas categorias gramaticais. Portanto, foi necessário definir as palavras de acordo com suas categorias gramaticais. Desta forma as palavras foram agrupadas em:

Uma vez definida as categorias gramaticais o próximo passo foi a definição das frases. As frases são formadas pela junção de certos principios que a caracterizam como uma estrutura. Estes principios são:

Deste modo, uma frase na notação DCG pode ser escrita da forma:frase --> sintagma_nominal, sintagma_verbal

Obs: o símbolo --> deve ser lido como "é constituido de" ou "é constituido com".

Após a definição das estruturas gramaticais o passo seguinte é a execução do programa. Para executar o programa devemos interrogar Prolog do seguinte modo:

frase(X, [])

onde: X é a frase a ser analisada ou possíveis frases que devem ser formada (caso consideremos X como uma variável).

Observe que X é uma lista (onde cada palavra da frase corresponde a um elemento da lista) pois em Prolog a notação DCG (frase --> sintagma_nominal, sintagma_verbal) é intepretada da seguinte forma:

frase(Lista_inicial, Lista_final):- sintagma_nominal(Lista_inicial, Lista_intermediária),

sintagma_verbal(Lista_intermediária, Lista_final).

Otimização:

Para otimizar, o programa, foi utilizado uma forma alternativa de definir, por exemplo, os substantivos. Os substantivos formam definidos do seguinte modo:

substantivo(G, N) --> [Nome_do_substantivo],

{pertence(Nome_do_substantivo, [substantivo_1, substantivo_2,..., substantivo_n ])}.

A maneira como foi inserido os substantivos evita que se tenha um predicado (separado) para cada substantivo, pois estes foram agrupados em uma lista.

No contexto deste exercício esta otimização é pouco significativa pois trata-se de uma aplicação pequena e restrita, no entanto em uma aplicação mais abrangente onde é necessário trabalhar com um conjunto grande de palavras tal estrutura pode ser útil. Uma vez que podemos definir do mesmo modo palavras como verbos, adjetivos, etc.

Execução - Casos de teste:

?- frase([joao, eh, um, homem], []).

yes.

?- frase([um, eh, homem], []).

no.

Na primeira execução Prolog responde yes pois a sentença está gramaticalmente correta, o mesmo não ocorre na segunda execução.

?- frase(X, []).

X = [mulher,eh,pessoa] ;

X = [mulher,eh,uma,pessoa] ;

X = [homem,eh,um,brasileiro,bonito] ;

X = [homens,sao,brasileiros] ;

X = [o,homem,eh,joao] ;

X = [uma,mae,eh,uma,pessoa] .

yes.


Interpretação 1: código (roda em Amzi 3.3 e 4.1)

Interpretação 2 : código (roda em Amzi 3.3), código (roda em Amzi 4.1)


Última Atualização [99/Apr/14 05:50] por Myrian Renata Barros Araujo