Inter Prolog uma API para integrar Prolog com
- Slides: 32
Inter. Prolog: uma API para integrar Prolog com Java Marcelino Pereira CIn-UFPE
Roteiro * Motivação Interfaces Java/Prolog Inter. Prolog 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 * * * *
Motivação: porque integrar os paradigmas lógico e orientado a objetos ? * Pontos fortes da prog. em lógica * Pontos fortes da prog. OO • raciocínio dedutivo built-in • raciocínio por herança built-in • parsing e geração built-in (compilação, meta-prog. , PLN) • encapsulamento • expressão de relações universalmente quantificadas e recursivas entre conceitos • expressão de estruturas complexas internas aos conceitos • expressão declarativa do conhecimento terminológico • expressão declarativa do conhecimento comportamental • robustez e extensibilidade do código • concisão do código • metodologia de desenvolvimento informal, porém escalável para software de grande porte • prototipagem rápido • especificação formal executável
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.
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
Arquiteturas de integração Prolog/Java * 1 camada • Um programa Prolog é transformado em um programa Java • 2 estratégias: t t * 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: t t via 3 a 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 (Inter. Prolog)
Inter. Prolog * 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 t t 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, Servi. Soft (empresa)
Arquitetura de Inter. Prolog
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
Gramáticas de Cláusulas Definidas
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
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 --> [meninos]. 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([meninas|Rsubs], Rsubs).
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).
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, Lex. MS, masc, sing) --> [Lex. MS], {member(Cat, [subs, adj, det])}. const(Cat, Lex. MS, masc, plur) --> [Lex. MP], {member(Cat, [subs, adj, det]), plur(Lex. MP, Lex. MS)}. const(Cat, Lex. MS, fem, sing) --> [Lex. FS], {member(Cat, [subs, adj, det]), fem(Lex. FS, Lex. MS)}. const(Cat, Lex. MS, fem, plur) --> [Lex. FP], {member(Cat, [subs, adj, det]), plur(Lex. FP, Lex. FS), fem(Lex. FS, Lex. SM). * Predicados de restrições: plur(Lex. MP, Lex. MS) : - concatom(Lex. MS, s, Lex. MP). fem(Lex. FS, Lex. MS) : - concatom(Lex. Rad, a, Lex. FS), concatom(Lex. Rad, o, Lex. MS). 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). *
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(o), masc, sing) --> const(det, o, masc, sing). subs(menino), masc, sing). --> const(subs, livro, masc, sing). const(Cat, Lex. MS, masc, sing) --> [Lex. MS], {member(Cat, [subs, adj, det])}. const(Cat, Lex. MS, masc, plur) --> [Lex. MP], {member(Cat, [subs, adj, det]), plur(Lex. MP, Lex. MS)}. const(Cat, Lex. MS, fem, sing) --> [Lex. FS], {member(Cat, [subs, adj, det]), fem(Lex. SF, Lex. MS)}. const(Cat, Lex. MS, fem, plur) --> [Lex. FP], {member(Cat, [subs, adj, det]), plur(Lex. FP, Lex. FS), fem(Lex. FS, Lex. SM).
DCG: interpretador ou gerador de frases ? - sn(Parse. Tree, G, N, [o, menino], []). Parse. Tree = sn(det(o), subs(menino)), G = masc, N = sing. yes ? - sn(sn(det(o), subs(menino)), G, N, Word. List, []). Word. List = [o, menino], G = masc, N = plur. yes ? - sn(sn(det(o), subs(menino)), _, _, [o, menino], []). yes
SWING * * Java Foundation Classes (JFC) extende o Abstract Windowing Toolkit (AWT), adicionando bibliotecas de classes GUI JFC/Swing GUI Components t componentes escritos em Java sem código específico para sistema de janelas t facilita customização de visual t independência do sistema nativo de janelas t simplifica a extensão de aplicações
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
Chamar Java a partir de Prolog * java. Message(Target, Result, Message) • sincronamente envia Message para o objeto Target obtendo o objeto Result • java. Message(Target, Message): ? java. Message('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)
Chamar Java a partir de Prolog * ip. Object. Spec • especifica objetos da respectiva classe * ip. Object. Template • substitui por variáveis lógicas as variáveis descritas na classe * ip. Prolog. Engine • referencia Prolog. Engine
Chamar Java a partir de Prolog * Build. Term. Model • constrói uma especificação de objeto para uma instância representando um termo • utilizado para passar termos Prolog para Java * browse. Term • cria janela com um browser de termo * browse. Tree. Term • cria janela com um browser hierárquico * browse. XSBTable • cria janela para navegação na avaliação corrente do predicado
Chamar Prolog a partir de Java * Classe Prolog. Engine • fornece ao programador Java acesso ao Prolog • cada processo background Prolog é encapsulado numa instância Prolog. Engine * 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
Chamar Prolog a partir de Java * Classe add. Prolog. Output. Listener • faz com que o cliente receba mensagens * send. And. Flush • envia texto ao stdin do Prolog * interrupt(), shutdown() • simula um ctrl-c
Chamar Prolog a partir de Java * teach. More. Objects • envia um array de objetos p/ Prolog * register. Java. Object • registra um objeto com seu Prolog. Engine e retorna um ID integer p/ futura ref em Prolog * is. Available • retorna true se o Prolog não estiver ocupado * deterministic. Goal • chama o objetivo Prolog que retorna objetos que refletem a 1 a solução encontrada
DOODCI Uma API Prolog para OLAP • Deductive Object-Oriented Data Cube Interface • Integração t DW + OLAP + D. Mining + Dedução + PLN • Ambiente inteligente e abrangente para DSS e KDD • Projeto MATRIKS t Multidimensional Analysis and Textual Reporting for Insight Knowledge Search • BD multidimensionais + Sist. Dedutivos
DOODCI Uma API Prolog para OLAP Java + FLORA + XSB + Inter. Prolog * Interprolog * • permite a comunicação entre Java e o sistema dedutivo XSB * APIs (JDCI e DOODCI) • permitem comunicação entre multidimensional e dedutivo * o banco de dados A partir dos objetos FLORA será possível realizar consultas OLAP no paradigma lógico orientado a objetos
DOODCI Uma API Prolog para OLAP
DOODCI Uma API Prolog para OLAP * Load. Cubes e Execute. MDQuery • classes principais para converter os objetos Java em termos Prolog * Load. Cubes • Load. Cubes instanciada quando da conexão da JDCI ao esquema multidimensional • a partir de FLORA, utilizando Inter. Prolog, Load. Cubes é chamada • quando construtor classe é executado, metadados multidimensionais exportados pela JDCI são convertidos para termos XSB Prolog por meio do Inter. Prolog.
DOODCI Uma API Prolog para OLAP * Execute. MDQuery • 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 Inter. Prolog
* Java Conclusões • Reflexão/Serialização • Comunicação/GUI * Inter. Prolog=poder/flexibilidade Prolog/Java • Ferramenta nova • Necessita ajustes • Flexibilidade e dinamismo * DOODCI • OLAP + Dedução Data Mining * Carência de documentação Inter. Prolog
Conclusões * Prolog • representação dados * Java • manipulação eventos • aparência • edição * Java Foundation Classes (JFC) / SWING • fornece framework natural
Bibliografia * * Calejo, Miguel (1998). Introduction to Inter. Prolog. Servisoft. Calejo, Miguel (1998). Inter. Prolog: 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/7 Elmp/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
- ¿cuáles son las claves del éxito para integrar las tics?
- Dậy thổi cơm mua thịt cá
- Cơm
- Outlook office
- Integrar software
- Ats internet
- Viso integrar significado
- Visual prolog vs swi-prolog
- Download prolog
- Um escoteiro usa uma lupa para acender uma fogueira
- Unesp em uma obra para permitir
- Uma bola sera retirada de uma sacola contendo 5
- Uma flecha lançada uma palavra dita
- Uma onda possui uma frequencia angular de 110 rad/s
- Só sei que maria de nazaré resolveu se casar com josé
- Vela acesa
- Era uma vez uma ilha onde moravam todos os sentimentos
- Uma caixa de coelhos continha uma fêmea himalaia
- Galinha azulzinha
- Uma uma
- Uma equipe de cientistas lançará uma expedição
- Delgada
- Fuvest sp uma estudante quer utilizar uma lâmpada
- Atitude é uma pequena coisa que faz uma grande diferença
- Era uma vez uma menina chamada
- Era uma vez uma ilha onde moravam todos os sentimentos
- Poema sobre as estrelas
- Uma pessoa agachada perto de uma fogueira
- Raiz aprumada
- Ita a borda de um precipício
- O capim elefante é uma designação
- Era uma vez uma sementinha
- Sorteando uma das n pessoas de uma sala