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.391 ]

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

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

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

Leitura recomendada

Administrar um servidor MS SQL pelo Linux

Utilizando arquivos Access (.mdb) no seu Linux

Criando uma mala direta com OpenOffice.org

Tutorial Kettle

Elasticsearch na saúde

  
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