class BaseDeConhecimento:
def init(self):
self.fatos = set()
self.regras = []
def adicionar_fato(self, fato):
self.fatos.add(fato)
def adicionar_regra(self, condicoes, conclusao):
self.regras.append({
"condicoes": condicoes,
"conclusao": conclusao
})
class SistemaEspecialista:
def init(self, base_conhecimento):
self.base = base_conhecimento
def inferir(self):
novos_fatos = True
while novos_fatos:
novos_fatos = False
for regra in self.base.regras:
condicoes = regra["condicoes"]
conclusao = regra["conclusao"]
if all(condicao in self.base.fatos for condicao in condicoes):
if conclusao not in self.base.fatos:
print(
f"Regra aplicada: "
f"{' E '.join(condicoes)} -> {conclusao}"
)
self.base.adicionar_fato(conclusao)
novos_fatos = True
return self.base.fatos
base = BaseDeConhecimento()
base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade para respirar")
base.adicionar_regra(
["febre alta", "tosse"],
"infecção respiratória"
)
base.adicionar_regra(
["infecção respiratória", "dificuldade para respirar"],
"pneumonia"
)
sistema = SistemaEspecialista(base)
resultado = sistema.inferir()
Regra aplicada: febre alta E tosse -> infecção respiratória
Regra aplicada: infecção respiratória E dificuldade para respirar -> pneumonia
print("\nFatos e diagnósticos obtidos:")
for fato in resultado:
print("-", fato)
Fatos e diagnósticos obtidos:
- dificuldade para respirar
- febre alta
- infecção respiratória
- tosse
- pneumonia