Este projeto tem como objetivo construir um mecanismo de busca utilizando Lógica de Primeira Ordem (Prolog). A partir de um dataset real, foi desenvolvido um processo de ETL em Python para transformar os dados em uma base de conhecimento composta por fatos lógicos, permitindo a realização de consultas estruturadas.
O dataset utilizado foi o Cryptocurrency Market Dataset, disponível no Kaggle.
Foram selecionados 7 atributos, combinando variáveis qualitativas e quantitativas:
coin_idsymbolcurrent_price_usdmarket_cap_rankprice_change_24h_percentall_time_high_usdtotal_volume_usd
A base foi limitada a 500 registros para otimizar e facilitar a execução das consultas no compilador Prolog online.
Durante o ETL, os dados passaram por:
- padronização de strings (minúsculas, sem espaços e remoção de caracteres especiais)
- conversão de tipos numéricos
- remoção de valores nulos ou inválidos
Execute o script Python:
python etl.pyIsso irá gerar o arquivo base_conhecimento.pl, contendo os fatos no formato:
crypto(Id, Symbol, Price, Rank, Change24h, ATH, Volume).- Acesse o compilador online: SWISH SWI-Prolog
- Cole o conteúdo de
base_conhecimento.pleperguntas.plna área Program (à esquerda) - Execute as consultas na área Query (canto inferior direito)
Objetivo: identificar as 10 criptomoedas com maior variação positiva nas últimas 24h.
Query:
?- ranking_valorizacao(Top10).Lógica: construção de lista com findall, ordenação com sort, inversão com reverse e limitação para o top 10 usando length e append.
Objetivo: encontrar criptomoedas cujo preço atual está abaixo de 20% do seu valor máximo histórico.
Query:
?- desconto_historico(Moeda, Preco, ATH, Razao).Lógica: cálculo da razão Preco / ATH com restrição condicional ATH > 0 (para evitar divisão por zero) e filtro lógico Razao < 0.2.
Objetivo: calcular a média do volume de negociação entre as criptomoedas até um determinado rank.
Query:
?- media_volume_top(20, Media).Lógica: filtragem por rank limitador, agregação dos volumes com findall e cálculo da média usando as funções nativas sum_list e length.