# Sistema Especialista para Diagnóstico Médico
# Este código implementa um sistema especialista simples para diagnóstico médico usando regras de inferência.
# O sistema é baseado em uma base de conhecimento composta por fatos e regras, e pode inferir novos fatos a partir de um conjunto inicial de sintomas.
# O sistema é projetado para ser facilmente extensível, permitindo a adição de novos fatos e regras conforme necessário.
# O exemplo inclui regras para diagnosticar infecção respiratória, pneumonia e resfriado com base em sintomas como febre alta, tosse, falta de ar e coriza.
class Fato:
def __init__(self, nome):
self.nome = nome
class Regra:
def __init__(self, antecedentes, consequente):
self.antecedentes = antecedentes
self.consequente = consequente
class BaseDeConhecimento:
def __init__(self):
self.fatos = []
self.regras = []
def adicionar_fato(self, fato):
self.fatos.append(fato)
def adicionar_regra(self, regra):
self.regras.append(regra)
class SistemaEspecialista:
def __init__(self, base_conhecimento):
self.base = base_conhecimento
def inferir(self, fatos_iniciais):
fatos_conhecidos = {fato.nome for fato in fatos_iniciais }
houve_alteracao = True
while houve_alteracao:
houve_alteracao = False
for regra in self.base.regras:
if all( antecedente.nome in fatos_conhecidos for antecedente in regra.antecedentes):
if regra.consequente.nome not in fatos_conhecidos:
fatos_conhecidos.add( regra.consequente.nome)
houve_alteracao = True
return fatos_conhecidos
#tabela de regras para diagnóstico médico
regra1 = Regra(
[Fato("febre_alta"), Fato("tosse")],
Fato("infeccao_respiratoria")
)
regra2 = Regra(
[Fato("febre_alta"),
Fato("tosse"),
Fato("falta_de_ar")],
Fato("pneumonia")
)
regra3 = Regra(
[Fato("coriza"), Fato("tosse")],
Fato("resfriado")
)
regra4 = Regra(
[Fato("coriza"), Fato("tosse")],
Fato("resfriado")
)
# Criando a base de conhecimento e adicionando as regras
base = BaseDeConhecimento()
base.adicionar_regra(regra1)
base.adicionar_regra(regra2)
base.adicionar_regra(regra3)
base.adicionar_regra(regra4)
# Fatos iniciais do paciente
fatos_paciente = [
Fato("febre_alta"),
Fato("tosse"),
Fato("falta_de_ar")
]
# Criando o sistema especialista a partir da base de conhecimento
sistema = SistemaEspecialista(base)
# Inferir os diagnósticos com base nos fatos do paciente (sintomas)
resultado = sistema.inferir( fatos_paciente)
print("\nFATOS INFERIDOS:")
for fato in resultado:
print("-", fato)