Automatizando a criação de uma base de conhecimento em Prolog para gerenciar os acessos a um site

O presente artigo pretende demonstrar a implementação de uma base de conhecimento em Prolog, capaz de agregar dinamicamente novas informações a cada acesso a um site. Ela permitirá que o usuário formule consultas complexas e que necessitem de certo grau de inferência, de forma simples e relativamente próxima da linguagem natural.

[ Hits: 28.092 ]

Por: Rafael José de Alencar Almeida em 08/01/2010 | Blog: http://www.rafael-labs.com


GNU Prolog



Para a demonstração do tema proposto neste artigo será utilizado o compilador GNU Prolog, que na presente data encontra-se na versão 1.3.0. A linguagem Prolog não possui grande padronização, e existem diversas outras implementações, com alguns recursos e sintaxes diferentes, como o SWI-Prolog e o Visual Prolog.

Em um sistema operacional Linux Debian-like, podemos instalar o GNU Prolog com o comando:

# aptitude install gprolog

Um programa em Prolog deve ser escrito em um arquivo texto, geralmente com a extensão .pl, o que as vezes causa confusão com arquivos Perl. Uma vez instalado o GNU Prolog, podemos testá-lo criando um arquivo teste.pl, com o seguinte conteúdo:

% programa de teste na linguagem Prolog

acessou(ip(200, 131, 10, 131), data(27, 12, 2009, domingo)).
acessou(ip(127, 0, 0, 1), data(22, 12, 2009, terca)).

classe_a(OCT1, OCT2, OCT3, OCT4) :-
OCT1 > 0, OCT1 < 126;
OCT1 = 126, OCT2 = 0, OCT3 = 0, OCT4 = 0.

final_de_semana(data(_, _, _, DIA)) :-
   DIA = sabado; DIA = domingo.

Para executar o GNU Prolog, usa-se o comando:

gprolog
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?-

O programa que será compilado para a consulta deve ser especificado com o comando consult, passando-se o caminho completo do arquivo teste.pl:

?- consult('caminho/teste.pl').
compiling teste.pl for byte code...
teste.pl compiled, 11 lines read - 2039 bytes written, 22 ms

A partir deste ponto já é possível realizar consultas, como nos exemplos abaixo:

% "que IP acessou o site em um domingo do ano de 2009?"
?- acessou(IP, data(_, _, 2009, domingo)).
IP = ip(200,131,10,131)
yes

% "que IP de classe A acessou o site em um domingo do ano de 2009?"
?- acessou(ip(OCT1, OCT2, OCT3, OCT4), data(_, _, 2009, domingo)), classe_a(OCT1, OCT2, OCT3, OCT4).
no

% "qual o primeiro octeto dos ips que acessaram o site?"
?- acessou(ip(OCT1, _, _, _), _).
OCT1 = 127 ? ;
OCT1 = 200
yes

Deve-se observar que, quando uma variável pode possuir mais de um valor (como no terceiro exemplo), o usuário deve pressionar ";" para ver o próximo valor, <ENTER> para finalizar a consulta e "a" para ver todas os resultados.

É possível visualizar o conteúdo da base pelo comando listing:

?- listing.
classe_a(A, B, C, D) :-
   (   A > 0,
       A < 126
       ;   A = 126,
       B = 0,
       C = 0,
       D = 0
   ).

final_de_semana(data(_, _, _, A)) :-
   (   A = sabado
       ;   A = domingo
   ).

acessou(ip(200, 131, 10, 131), data(27, 12, 2009, domingo)).
acessou(ip(127, 0, 0, 1), data(22, 12, 2009, terca)).

(4 ms) yes

Para finalizar o GNU Prolog, basta digitar o comando:

?- halt.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. GNU Prolog
   3. Gerenciando os acessos a um site
   4. Conclusão
Outros artigos deste autor

Python: automatizando a extração de informações na web com expressões regulares

Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais

Leitura recomendada

Paginação de resultados com a classe ADODB

MySQL + Amarok: dupla poderosa

Instalando o Interbase 7.5 no Debian Sarge

Utilizando arquivos Access (.mdb) no seu Linux

Exportando e importando confs do Putty em Windows

  
Comentários
[1] Comentário enviado por rony_souza em 08/01/2010 - 16:09h

muito bom...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts