Palavras-chave: lingüística formal, lingüística computacional, processamento computacional da linguagem natural, processamento automático das línguas naturais, lingüística comparada, lingüística contrastiva, lingüística geral, teoria lingüística, lingüística teórica, lingüística descritiva Grupo de Estudos em Lingüística Formal, Computacional e Comparada – GELFOCO http://www.geocities.com/Athens/Crete/1546/gelfoco.htm Exercício para a aula de 28.09.05 - Autor: Leonel F. de Alencar Tarefa 1: Elaboração de fragmentos de gramática computacional O exercício anterior tratou da regência verbal de verbos divalentes. No programa latim01.txt, implementei a distinção entre verbos monovalentes (intransitivos) e divalentes. Também mostrei como dar conta da seleção do caso (nominativo ou acusativo) dos verbos divalentes. (Ver também o programa femina2.txt.) Desenvolva agora em Prolog uma ou mais minigramáticas capazes de dar conta dos seguintes dados do português (padrão), latim, alemão e inglês, envolvendo verbos trivalentes. Português (1) (2) (3) (4) (5) (6) Ele a viu. *Ele lhe viu. Ela lhe deu um livro. *Ela o deu um livro. Ele a deu à Maria. *Ele lhe deu à Maria Latim (7) (8) (9) (10) (11) magistra reginae rosam dat magistrae reginis rosas dant pirata feminis rosas dat magistra reginis invidet magistrae reginae invident Alemão (12) (13) (14) (15) Die Prinzessin gibt dem Prinzen den Vogel. *Die Prinzessin gibt den Vogel an den Prinzen. Die Prinzessin schickt dem Prinzen den Vogel. Die Prinzessin schickt den Vogel an den Prinzen. Inglês (16) (17) Mary gives him the book. Mary gives the book to him. Tarefa 2 Nas gramáticas desenvolvidas até o momento, o léxico contém apenas formas flexionadas. Desse modo, no latim, para cada uma das formas de um substantivo como pirata, é necessária uma entrada lexical. Conseqüente, cada substantivo do latim implica a elaboração de 12 entradas lexicais, conforme o quadro a baixo: 1 Caso Nominativo Singular pirata Plural piratae Vocativo pirata piratae Acusativo piratam piratas Genitivo piratae piratarum Dativo piratae piratis piratis Ablativo Um léxico nesses moldes contém muita informação redundante. De fato, todo substantivo da primeira declinação apresenta o mesmo leque de terminações, conforme se destaca no seguinte quadro: Caso Nominativo Singular regin-a Plural regin-ae Vocativo regin-a regin-ae Acusativo regin-am regin-as Genitivo regin-ae regin-arum Dativo regin-ae regin-is Ablativo regin- regin-is Comparando as formas piratam e reginam, observamos que duas informações não redundantes desses itens estão contidas nas respectivas raízes: a forma fonológica e o gênero gramatical. Em Prolog, é possível eliminar essas redundâncias por meio do predicado atom_concat, que opera de modo semelhante a append. No entanto, ao invés de listas, atom_concat tem átomos como argumentos. Assim como palavras correspondem, em Prolog, a listas de um único elemento, morfemas equivalem a átomos. Desse modo, uma forma como piratam resulta da concatenação dos átomos pirat e am, para formar o átomo piratam. Esse átomo, por sua vez, é uma palavra latina, constituindo, portanto, a lista [piratam]. Nessa operação de concatenação, devem ser juntadas também as informações morfossintáticas da raiz e da terminação, de modo que a sintaxe "saiba" que piratam é uma forma de substantivo masculino, singular e acusativa. No fragmento (18), essas observações são implementadas. Amplie o inventário de morfemas de modo que o programa possa gerar todas formas da 1a declinação (i.e. classe flexional 1) para os substantivos pirata, nauta, regina, magistra e poëta. Faça o mesmo para a 1a classe dos adjetivos (femininos e masculinos) e para verbos da 1a conjugação. Se você sabe alemão ou grego, pode fazer uma minigramática nos mesmos moldes. 2 (18) Morfologia flexional do latim %léxico %inventário de morfemas % o número indica a classe flexional (declinação) raiz_nom (pirat,[1,masc]). raiz_nom (naut,[1,masc]). raiz_nom (regin,[1,fem]). raiz_nom (mens,[1,fem]). des_nom(am,[1,sg,ac]). %regras da morfologia flexional n([Z],[Gen,Num,Caso]):- raiz_nom (X,[Classe_Flex,Gen]), des_nom(Y,[Classe_Flex,Num, Caso]), atom_concat(X,Y,Z). 3