Jardel Osorio Duarte Portfólio

Sistemas Especialistas - IA

Projeto desenvolvido para o componente curricular de Inteligência Artificial, o intuito foi o desenvolvimento de um sistema especialista baseando-se nos modelos apresentados. Neste, fiz a escolha em elaborar um serviço no qual a máquina identifica o tipo de arte (visual e/ou digital) que o usuário tem mais interesse, foi implementado com a linguagem de programação Python.

Durante a coleta dos dados, foi necessário construir um pequeno dataset identificando as relações hereditárias, listadas abaixo.

 #se  -   então
colorido-surrealista 
colorido-renascentista
colorido-minimalista
colorido-artdigital
pb-renascentista
pb-minimalista
pb-artdigital
pixel-artdigital
abstrato-surrealista
fotofig-renascentista
geometrico-minimalista

Para construir a máquina foram criadas duas classes (Pergunta e Identifica) que posteriormente foram inclusas na função principal que executa o programa.

A classe Pergunta, recolhe os valores (S ou N) que o usuário vai respondendo assim que o programa é executado, similar a um Quizz, onde cada pergunta possui uma resposta “correta” e que irá atribuir uma probabilidade em caso de acerto.

 from random import *
class Pergunta:
def __init__(self):
    self.level = [
    ['Você gosta de pinturas coloridas?','colorido'],
    ['Te agrada figuras abstratas, coisas distorcidas?','abstrato'],
    ['Você gosta de pinturas em preto e branco?','pb'],
    ['Para voce a arte pode ser vista digitalmente?','pixel'],
    ['Poucos detalhes, simbolos, textos e desenhos?','geometrico'],
    ['Pinturas de pessoas(rostos, lugares)?','fotofig'],		
    ]

def texto(self):
    string = self.level[0]
    del self.level[0]
    return string

A classe abaixo (Identifica) é responsavel por pegar a resposta do usuário e fazer a identificação a partir da lista dos possíveis cenários do nosso set hereditário. Buscando a probabilidade e removendo os casos que não existem relações com a resposta.

 class Identifica():
# metodo construtor
def __init__(self):
    self.resultado = ['surrealista', 'renascentista', 'minimalista', 'artdigital']
    self.pessoa = []
    self.db = []
# abre o arquivo db.txt em modo leitura e passa os dados para
# uma lista de listas de str
    arquivo = open('db.txt','r')
    for linha in arquivo:
        if linha[len(linha) - 1] == '\n':
            linha = linha.replace("\n", "")
            (self.db).append(linha.split('-'))
    arquivo.close()

# imprime a quantidade de possibilidades cadastradas
def tamanho(self):
    print(len(self.resultado))

# imprime a probabilidade do diagnótico
def probabilidade(self):
    return (int((1/int(len(self.resultado)))*100))

# verifica se diagnóstico pensado tem a caracteristica passada por parametro
def busca(self, familiar, caract):	
    for i in range(len(self.db)):
        if familiar == self.db[i][1] and self.db[i][0] == caract:
            return True
    return False				

# remove os diagnósticos que não possuem o atributo passado por parametro
def excluiquemnaoe(self, atributo):
    lista = []
    count = 0
    for i in range(len(self.resultado)):
        if not self.busca(self.resultado[i], atributo):
            lista.append(self.resultado[i])
            count = count + 1
    for i in range(count):
        self.resultado.remove(lista[i])
	
# remove os cenários que possuem o atributo passado por parametro
def excluiqueme(self, atributo):
    lista = []
    count = 0
    for i in range(len(self.resultado)):
        if self.busca(self.resultado[i], atributo):
            lista.append(self.resultado[i])
            count = count + 1
    for i in range(count):
        self.resultado.remove(lista[i])
    
def pergunta(self,pergunta, caract):
    resp = input(pergunta+': ')
    if resp == 's' or resp == 'S':
        self.excluiquemnaoe(caract)
    elif resp == 'n' or resp == 'N':
        self.excluiqueme(caract)

Enfim, a main executa o programa até que a probabilidade da característica seja 100%, enquanto não for, o programa continua perguntando ao usuário, no fim, retorna o tipo de arte que a pessoa tem propensão e mostra alguns pintores daquela característica, selecionados por mim.

 from classId import *
from classPerguntas import *

#Inferência
se = Identifica()
pergunta = Pergunta()


while se.probabilidade() != 100:
	string = pergunta.texto()
	se.pergunta(string[0], string[1])
	print('probabilidade é %d' %(se.probabilidade()))
	print(se.resultado)
	if se.probabilidade() == 100:
		print('Arte mais indicado para você é: ',se.resultado[0])
		if(se.resultado[0] == 'surrealista'):
			print("Pintores relacionados:\n Vicente Van Gogh \n Salvador Dalí \n Pablo Picasso \n")
		elif(se.resultado[0] == 'renascentista'):
			print("Pintores relacionados:\n Michelangelo \n Leonardo da Vinci \n Rafael \n")
		elif(se.resultado[0] == 'minimalista'):
			print("Pintores relacionados:\n Donald Judd \n Yayoi kusama \n Frank Stella \n")
		elif(se.resultado[0] == 'artdigital'):
			print("Pintores relacionados:\n Mike Winkelmann \n Banksy \n Giselle Beiguelman \n")

Link para acessar o conteúdo:especialista-IA.