A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Gramáticas de Cláusulas Definidas

Apresentações semelhantes


Apresentação em tema: "Gramáticas de Cláusulas Definidas"— Transcrição da apresentação:

1 Gramáticas de Cláusulas Definidas
Jacques Robin CIn-UFPE

2 Porque LIFE para Processamento de Linguagem Natural (PLN)?
Como linguagem de programação em lógica, inclui built-in: Gramáticas de Cláusulas Definidas (DCGs) um Formalismo de Representação do Conhecimento (FRC) lingüístico para PLN A maioria dos sistemas de PLN profundo modernos: usam como estrutura de dados termos de traços tipados muito semelhantes aos termos LIFE Sistemas de PLN requer conhecimento: muito heterogêneo porém altamente interdependente, como morfo-sintaxe da língua, semântica do domínio, estrutura do discurso, objetivos dos agentes comunicativos, etc. que só pode ser adequadamente codificado por um FRC flexível, integrando vários paradigmas

3 DCGs: Gramáticas de Cláusulas Definidas
Pré-processador built-in da programação em lógica: convertendo regras de gramáticas em cláusulas lógicas, e assim re-aproveitando o provador de teorema da programação em lógica para implementar “de graça” parser ou gerador de frases Usa diferença de listas como estrutura de dados: frase da linguagem cuja gramática é representada pela DCG - lista de palavras ainda a ser processadas = listas de palavras já processadas Cada regra DCG: associada a uma categoria sintática genérica cat instancia 2 argumentos adicionais implícitos: 1. lista de palavras do constituinte const da frase de catégoria cat 2. lista de palavras do resto da frase na direita de const

4 Exemplo mínimo de Prolog DCG: conversão regra DCG / cláusula Prolog
Regras de gramáticas: sn --> det, subs. Entradas do dicionário: det --> [o]. det--> [a]. det --> [os]. det --> [as]. subs --> [menino]. subs --> [meninos]. subs --> [menina]. subs --> [meninas]. Conversão para cláusulas Prolog: sn(Csn,Rsn) :- det(Csn,Rdet), subs(Rdet,Rsn). det([o|Rdet], Rdet). det([a|Rdet], Rdet). det([os|Rdet], Rdet). det([as|Rdet], Rdet). subs([menino|Rsubs], Rsubs). subs([meninos|Rsubs], Rsubs). subs([menina|Rsubs], Rsubs). subs([meninas|Rsubs], Rsubs).

5 Exemplo mínimo de Prolog DGC: execução
sn(Csn,Rsn) :- det(Csn,Rdet), subs(Rdet,Rsn). det([o|Rdet], Rdet). det([a|Rdet], Rdet). det([os|Rdet], Rdet). det([as|Rdet], Rdet). subs([menino|Rsubs], Rsubs). subs([meninos|Rsubs], Rsubs). subs([menina|Rsubs], Rsubs). subs([meninas|Rsubs], Rsubs). ?- sn([o,menino],[]). call sn([o,menino],[]). call det([o,menino],Rdet). exit det([o,menino],[menino]). call subs([menino], []). exit subs([menino], []). exit sn([o,menino],[]). yes ?- subs([menino],[]). ?- det([o, menino],[menino]). ?- sn([minha, menina],[]). no ?- sn([o,meninas],[]).

6 Regras com argumentos de concordância
Regras de gramáticas: sn(G,N) --> det(G,N), subs(G,N). Entradas do dicionário: det(masc,sing) --> [o]. det(fem,sing) --> [a]. det(masc,plur) --> [os]. det(fem,plur) --> [as]. subs(masc,sing) --> [menino]. sub(masc,plur) --> [meninos]. subs(fem,sing) --> [menina]. subs(fem,plur) --> [meninas]. Conversão para cláusulas Prolog: sn(G,N,Csn,Rsn) :- det(G,N, Csn,Rdet), subs(G,N, Rdet,Rsn). det(masc,sing,[o|Rdet], Rdet). det(fem,sing,([a|Rdet], Rdet). det(masc,plur,[os|Rdet], Rdet). det(fem,plur,[as|Rdet], Rdet). subs(masc,sing,[menino|Rsubs], Rsubs). subs(masc,plur,[meninos|Rsubs], Rsubs). subs(fem,sing,[menina|Rsubs], Rsubs). subs(fem,plur,[meninas|Rsubs], Rsubs).

7 Regras genéricas com restrições
Regras de sintaxe: const(sn,G,N) --> const(det,G,N), const(subs,G,N). Dicionário: const(subs,menino,masc,sing). const(det,o,masc,sing). Regras de morfologia: const(Cat,LexMS,masc,sing) --> [LexMS], {member(Cat,[subs,adj,det])}. const(Cat,LexMS,masc,plur) --> [LexMP], {member(Cat,[subs,adj,det]), plur(LexMP,LexMS)}. const(Cat,LexMS,fem,sing) --> [LexFS], {member(Cat,[subs,adj,det]), fem(LexFS,LexMS)}. const(Cat,LexMS,fem,plur) --> [LexFP], {member(Cat,[subs,adj,det]), plur(LexFP,LexFS), fem(LexFS,LexSM). Predicados de restrições: plur(LexMP,LexMS) :- concatom(LexMS,s,LexMP). fem(LexFS,LexMS) :- concatom(LexRad,a,LexFS), concatom(LexRad,o,LexMS). concatom(A,B,AB) :- name(A,Sa), list(La,Sa), name(B,Sb), list(Lb,Sb), append(La,Lb,Lab), list(Lab,Sab), name(AB,Sab).

8 Argumentos para mapeamento frase, estrutura sintática, conteúdo semântico
sn(sn(Det,Subs),G,N) --> det(Det,G,N), subs(Subs,G,N). det(det(o),masc,sing) --> const(det,o,masc,sing). subs(subs(menino),masc,sing). --> const(subs,livro,masc,sing). const(Cat,LexMS,masc,sing) --> [LexMS], {member(Cat,[subs,adj,det])}. const(Cat,LexMS,masc,plur) --> [LexMP], {member(Cat,[subs,adj,det]), plur(LexMP,LexMS)}. const(Cat,LexMS,fem,sing) --> [LexFS], {member(Cat,[subs,adj,det]), fem(LexSF,LexMS)}. const(Cat,LexMS,fem,plur) --> [LexFP], {member(Cat,[subs,adj,det]), plur(LexFP,LexFS), fem(LexFS,LexSM).

9 DCG: interpretador ou gerador de frases
?- sn(ParseTree,G,N,[o,menino],[]). ParseTree = sn(det(o),subs(menino)), G = masc, N = sing. yes ?- sn(sn(det(o),subs(menino)),G,N,WordList,[]). WordList = [o, menino], G = masc, N = plur. ?- sn(sn(det(o),subs(menino)),_,_,[o,menino],[]).

10 Acumuladores em LIFE Ferramenta poderosa para simplificar o desenvolvimento de grandes programas São usados como difference lists. Exemplo de uso não lingüístico: > import(“accumulators”)? > acc_info(myacc, X, In, Out, acc_pred=>(Out=[X|In]))? > pred_info(loop, myacc)? > loop(0) :-- !? > loop(N) :-- N + myacc, loop(N-1)? > main(N, L) :- loop(N) with myacc([], L)? Programa é traduzido para: loop(0, in_myacc=>A, out_myacc=>A) :- !, succeed. loop(N, in_myacc=>B, out_myacc=>C) :- D=[N|B], loop(N-1, in_myacc=>D, out_myacc=>C). main(N, L) :- loop(N, in_myacc=>[], out_myacc=>L). Execução: > main(9,L)? L = [1,2,3,4,5,6,7,8,9].

11 LIFE DCGs Sintaxe: const(...,X:, ...,Y:, ...) -->
subconst1(...,X,...) , ... , subconstM(...,Y,...) {pred1(...,X,...,Y,...), ..., predN(...,X,...,Y,...)} Expansão em LIFE const(...,X:, ...,Y:, ..., in_dcg=>_A, out_dcg=>_Z) :- subconst1(...,X,..., in_dcg=>_A, out_dcg=>_B), ... , subconst25(...,Y,..., in_dcg=>_Y, out_dcg=>_Z), pred1(...,X,...,Y,...), ..., predN(...,X,...,Y,...)

12 Gramáticas EDCG Extended Definite Clause Grammar Tradução em LIFE:
sn --> num=>sing)) --> [“a”]? --> [“pera”]? Tradução em LIFE: => defArt, agreeFt => fem, num => sing)), in_dcg => ["a"|_A], out_dcg => _A) :- succeed. => comNoun, in_dcg => ["pera"|_A],

13 Análise Morfológica em LIFE Verbos (3a. Pessoa do Sing)
const (syntr(syntcat => main, agreeFt pers=>3), conjug => present), lex => Lex), semr(semcat=>Semcat)) --> [PVerb], {rverb(lex=>Lex, semcat=>Semcat), PVerb=strcon(Lex,"s")}? rverb(lex=>"smell", semcat=>percep) --> ["smell"]? rverb(lex=>"walk", semcat=>action) --> ["walk"]?

14 Análise Sintática de Superfície em LIFE
% “I see a glitter at 1 2” const (syntr(syntcat => clause, conjug => voice=>active), syntRoles => @(pred => Pred, args => Subj, dobj => DObj)) mods => FAd1, endAd1 => EAd1)))) --> const(FAd1:syntr(syntcat=>pp, optional=>yes)), const(Subj:syntr(syntcat=>nominal, funct=>subj, optional=>no, agreeFt=>Sva)), const(Pred:syntr(syntcat=>vg, optional=> no, conjug=>Conjug, agreeFt=>Sva), semr(semcat=>percep)), const(DObj:syntr(syntcat=>nominal, funct=>dobj, optional=>no)) const(EAd1:syntr(syntcat=>pp, optional=>yes))?

15 Análise Sintática de Superfície em LIFE
nominal := {np; pronoun}. pronoun := {perPron; indPron; demPron}. const (syntr(syntcat => np, det => Det, agreeFt => 3, num => Num), head => Noun, preMod => PMod)) --> const(Det:syntr(syntcat=>determ, optional=>no, num=>Num)), const(PMod:syntr(syntcat=>ap, optional=>yes)), const(Noun:syntr(syntcat=>noun, optional=>no, num=>Num))? const (syntr(syntcat=>perPron, func=>subj, => 1, num => sing))) --> ["I"]?

16 Análise Sintática de Superfície em LIFE
const (syntr(syntcat => vg, conjug => Conjug, agreeFt=>Agree, head => Main), semr(semcat=>Sem)) --> const(Main:syntr(syntcat=>verb, agreeFt=>Agree conjug=>Conjug), semr(semcat=>Sem))? determ := {article}. const (syntr(syntcat=>article, lex=>"a", ref=>indef, num=>sing)) --> ["a"]? const (syntr(optional=>yes)) --> []?

17 Análise Sintática Profunda em LIFE
% “I see the gold” const (syntr(conjug => declar, voice => active), semr(themRoles => @(situation => Pred, partic => Subj, percept => DObj) --> const(Subj:syntr(syntcat=>nominal, funct=>subj, optional=>no, agreeFt=>Sva)), const(Pred:syntr(syntcat=>vg, optional=> no, conjug=>Conjug, agreeFt=>Sva), semr(semcat=>percep)), const(DObj:syntr(syntcat=>nominal, funct=>dobj, optional=>no))

18 Análise Sintática Profunda em LIFE
% “the gold is seen by me” const (syntr(conjug => declar, voice => active) semr(themRoles => @(situation => Pred, partic => Comp, percept => Subj)))) --> const(Subj:syntr(syntcat=>nominal, funct=>subj, optional=>no, agreeFt=>Sva)), const(Pred:syntr(syntcat=>vg, optional=>no, conjug=> Conjug, agreeFt=>Sva), semr(semcat=>percep)), const(Comp:syntr(syntcat=>pp, optional=>no))?

19 Frases interrogativas
% “do you smell a stench?” const (syntr(syntcat => clause, conjug => voice=>active), syntRoles => @(pred => Pred, args => Subj, dobj => DObj))), semr(themRoles => @(situation => Pred, partic => DObj)))) --> const(QAux:syntr(syntcat=>auxiliar)), const(Subj:syntr(syntcat=>nominal, agreeFt=>Sva)), const(Pred:syntr(syntcat=>vg, conjug=>Conjug, agreeFt=>Sva, aux => QAux) semr(semcat=>percep)), const(DObj:syntr(syntcat=>nominal))?

20 Frases imperativas % “shoot the wumpus”
const (syntr(syntcat => clause, conjug => voice=>active), syntRoles => @(pred => Pred, args => agreeFt=> pers=>2)) obj => Obj))), semr(themRoles => @(situation => Pred, partic => Ocult, comp => Comp)))) --> const(Pred:syntr(syntcat=>vg, conjug=>Conjug, agreeFt=>Sva) const(Obj:syntr(syntcat=>{pp;adv;nominal}))?


Carregar ppt "Gramáticas de Cláusulas Definidas"

Apresentações semelhantes


Anúncios Google