1 / 32

InterProlog: uma API para integrar Prolog com Java

InterProlog: uma API para integrar Prolog com Java. Marcelino Pereira CIn-UFPE. Roteiro. Motivação Interfaces Java/Prolog InterProlog Serialização de objetos Java Gramáticas de Cláusulas Definidas: ferramentas Prolog para Parsing e Geração Swing Chamar Java a partir de Prolog

gita
Télécharger la présentation

InterProlog: uma API para integrar Prolog com Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. InterProlog: uma API para integrar Prolog com Java Marcelino Pereira CIn-UFPE

  2. Roteiro • Motivação • Interfaces Java/Prolog • InterProlog • Serialização de objetos Java • Gramáticas de Cláusulas Definidas: ferramentas Prolog para Parsing e Geração • Swing • Chamar Java a partir de Prolog • Chamar Prolog a partir de Java • DOODCI: exemplo de aplicação Java/Prolog • Conclusões

  3. Pontos fortes da prog. em lógica raciocínio dedutivo built-in parsing e geração built-in (compilação, meta-prog., PLN) expressão de relações universalmente quantificadas e recursivas entre conceitos expressão declarativa do conhecimento comportamental concisão do código prototipagem rápido especificação formal executável Pontos fortes da prog. OO raciocínio por herança built-in encapsulamento expressão de estruturas complexas internas aos conceitos expressão declarativa do conhecimento terminológico robustez e extensibilidade do código metodologia de desenvolvimento informal, porém escalável para software de grande porte Motivação: porque integrar os paradigmas lógico e orientado a objetos ?

  4. Motivação: porque integrar especificamente as linguagens Prolog e Java? • Quase todas as aplicações reais de IA são embutidas em aplicações multifacetadas • Envolvem também GUI, distribuição em redes, conectividade com BD, conectividade com software de legado convencionais, atuadores físicos, etc. • ex, comércio eletrônico, filtragem de informação na Internet, jogos, robótica, etc.

  5. Motivação: porque integrar especificamente as linguagens Prolog e Java? • Prolog: • base mais versátil sobre a qual implementar serviços cognitivos • dedutivo, lingüístico, indutivo, abdutivo, probabilista • padrão em IA, usado também fora da IA (ex, BD), no entanto divulgação industrial permanece marginal • Java: • base mais versátil sobre a qual integrar todos os outros serviços • conjunto incomparável de API prontas para GUI, distribuição e mobilidade em redes, conectividade com qualquer coisa, segurança, etc. • linguagem mais maciçamente divulgada ao lado de C/C++ • Ambos compilados para código de máquina virtual

  6. Arquiteturas de integração Prolog/Java • 1 camada • Um programa Prolog é transformado em um programa Java • 2 estratégias: • Pré-compilação de regras Prolog em classes Java • Extensão de Java, com construções para a definição de regras • 2 camadas • Máquina de inferência Prolog implementada em Java • ex, método unify, método search, método backtrack,... • 3 ou mais camadas • 2 processos rodando: uma máquina virtual Prolog e uma máquina virtual Java • os 2 comunicam: • via 3a linguagem (ex, C) pelo qual ambas máquinas virtuais tem API • ou via soquetes com conversão bi-direcional de objetos Java para termos Prolog (InterProlog)

  7. InterProlog • API bidirecional entre XSB Prolog e Java padrão • execução de consultas Prolog em métodos Java • invocação de métodos Java em consulta ou premissa Prolog • Princípios básicos: • comunicação entre máquinas virtuais via soquetes • conversão bi-direcional de objetos Java para termos Prolog usando • serialização de objetos Java • parsing e geração de termos Prolog usando gramáticas de cláusula definidas (ou DCG do inglês Definite Clause Grammar) • 2 componentes: classes Java e regras Prolog • mecanismo built para geração de termos Prolog a partir de objetos Java • Origem: • Projeto PROLLOPE multi-institucional Univ. Nova de Lisboa, Univ. de Porto, Univ. de Hannover, ServiSoft (empresa)

  8. Arquitetura de InterProlog

  9. Serialização de objetos Java • Padrão de representação de objetos Java compilados na forma de bytecodes interpretáveis pela máquina virtual Java • Utilizado para: • armazenamento persistente • transferência de objetos pela rede em aplicações distribuídas

  10. Gramáticas de Cláusulas Definidas

  11. DCGs: Gramáticas de Cláusulas Definidas • Pré-processador built-in de Prolog • converte regras de gramáticas em cláusulas lógica • re-aproveita provador de teorema de Prolog • 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

  12. 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). Exemplo mínimo de Prolog DCG: conversão regra DCG / cláusula Prolog

  13. 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). Regras com argumentos de concordância

  14. 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).

  15. 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).

  16. 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. yes ?- sn(sn(det(o),subs(menino)),_,_,[o,menino],[]). yes

  17. SWING • Java Foundation Classes (JFC) extende o Abstract Windowing Toolkit (AWT), adicionando bibliotecas de classes GUI • JFC/Swing GUI Components • componentes escritos em Java sem código específico para sistema de janelas • facilita customização de visual • independência do sistema nativo de janelas • simplifica a extensão de aplicações

  18. Chamar Java a partir de Prolog • O formato da sequência de bytes é padrão e público, e Interprolog sabe disso, em forma de uma Gramática de Cláusulas Assertivas • Esta gramática é capaz de fazer parse de objetos enviados por Java e de sintetizar novos objetos das especificações de termos Prolog, através da representação serializada da sequência de bytes

  19. Chamar Java a partir de Prolog • javaMessage(Target,Result,Message) • sincronamente envia Message para o objeto Target obtendo o objeto Result • javaMessage(Target,Message): ?- javaMessage('java.lang.System'-out,println(string('Hello world!'))) • predicado pode ser usado para enviar qq mensagem p/ qq método público na classe Target ou superclasses (variedades)

  20. Chamar Java a partir de Prolog • ipObjectSpec • especifica objetos da respectiva classe • ipObjectTemplate • substitui por variáveis lógicas as variáveis descritas na classe • ipPrologEngine • referencia PrologEngine

  21. Chamar Java a partir de Prolog • BuildTermModel • constrói uma especificação de objeto para uma instância representando um termo • utilizado para passar termos Prolog para Java • browseTerm • cria janela com um browser de termo • browseTreeTerm • cria janela com um browser hierárquico • browseXSBTable • cria janela para navegação na avaliação corrente do predicado

  22. Chamar Prolog a partir de Java • Classe PrologEngine • fornece ao programador Java acesso ao Prolog • cada processo background Prolog é encapsulado numa instância PrologEngine • Métodos disponíveis para: • solicitar ao Prolog para avaliar objetivos e obter um resultado num objeto • enviar texto ao seu stdin e coletar seu stdout utilizando um mecanismo listener simples baseado em processos background Java

  23. Chamar Prolog a partir de Java • Classe addPrologOutputListener • faz com que o cliente receba mensagens • sendAndFlush • envia texto ao stdin do Prolog • interrupt(), shutdown() • simula um ctrl-c

  24. Chamar Prolog a partir de Java • teachMoreObjects • envia um array de objetos p/ Prolog • registerJavaObject • registra um objeto com seu PrologEngine e retorna um ID integer p/ futura ref em Prolog • isAvailable • retorna true se o Prolog não estiver ocupado • deterministicGoal • chama o objetivo Prolog que retorna objetos que refletem a 1a solução encontrada

  25. DOODCIUma API Prolog para OLAP • Deductive Object-Oriented Data Cube Interface • Integração • DW + OLAP + D. Mining + Dedução + PLN • Ambiente inteligente e abrangente para DSS e KDD • Projeto MATRIKS • Multidimensional Analysis and Textual Reporting for Insight Knowledge Search • BD multidimensionais + Sist. Dedutivos

  26. DOODCIUma API Prolog para OLAP • Java + FLORA + XSB + InterProlog • Interprolog • permite a comunicação entre Java e o sistema dedutivo XSB • APIs (JDCI e DOODCI) • permitem comunicação entre o banco de dados multidimensional e dedutivo • A partir dos objetos FLORA será possível realizar consultas OLAP no paradigma lógico orientado a objetos

  27. DOODCIUma API Prolog para OLAP

  28. DOODCIUma API Prolog para OLAP • LoadCubes e ExecuteMDQuery • classes principais para converter os objetos Java em termos Prolog • LoadCubes • LoadCubes instanciada quando da conexão da JDCI ao esquema multidimensional • a partir de FLORA, utilizando InterProlog, LoadCubes é chamada • quando construtor classe é executado, metadados multidimensionais exportados pela JDCI são convertidos para termos XSB Prolog por meio do InterProlog.

  29. DOODCIUma API Prolog para OLAP • ExecuteMDQuery • instanciada quando passa-se um string MDX, a partir de FLORA, para ser executada no esquema de dados multidimensionais conectado, na parte Java de DOODCI • na execução do construtor desta classe, os objetos criados do lado Java na execução da consulta MDX pela API JDCI são convertidos para termos XSB Prolog utilizando-se o InterProlog

  30. Conclusões • Java • Reflexão/Serialização • Comunicação/GUI • InterProlog=poder/flexibilidade Prolog/Java • Ferramenta nova • Necessita ajustes • Flexibilidade e dinamismo • DOODCI • OLAP + Dedução  Data Mining • Carência de documentação InterProlog

  31. Conclusões • Prolog • representação dados • Java • manipulação eventos • aparência • edição • Java Foundation Classes (JFC) / SWING • fornece framework natural

  32. Bibliografia • Calejo, Miguel (1998). Introduction to InterProlog. Servisoft. • Calejo, Miguel (1998). InterProlog: A simple yet powerful Java/Prolog interface. Servisoft. • Lino, Natasha C. Q. (2000). DOODCI - Uma API para Integração entre Bancos de Dados Multidimensionais e Sistemas Dedutivos. CIn/UFPE. • Projeto PROLOPPE (2000) em: http://www-ia.di.fct.unl.pt/7Elmp/documents/proloppe.html • Java+Prolog systems and interfaces (2000) em: http://www.declarativa.com/interprolog/systems.htm • Java API Documentation (2000) em: http://www.declarati va.com/interprolog/htmldocs/overview-summary.html

More Related