Implementação em Python
python
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((set(condicoes), conclusao))
class SistemaEspecialista:
def init(self, base):
self.base = base
self.historico = []
def inferir(self, fatos_iniciais):
for fato in fatos_iniciais:
self.base.adicionar_fato(fato)
novos = True
while novos:
novos = False
for condicoes, conclusao in self.base.regras:
if condicoes.issubset(self.base.fatos) and conclusao not in self.base.fatos:
self.base.adicionar_fato(conclusao)
self.historico.append((condicoes, conclusao))
novos = True
return self.base.fatos
def exibir_diagnostico(self):
diag = [f for f in self.base.fatos if 'pneumonia' in f or 'infeccao' in f]
print(f"Diagnóstico: {diag if diag else 'Nenhum'}")
for c, concl in self.historico:
print(f" {c} → {concl}")
Teste
base = BaseDeConhecimento()
base.adicionar_regra(['febre', 'tosse'], 'infeccao_respiratoria')
base.adicionar_regra(['infeccao_respiratoria', 'dificuldade_respirar'], 'pneumonia')
sistema = SistemaEspecialista(base)
sistema.inferir(['febre', 'tosse', 'dificuldade_respirar'])
sistema.exibir_diagnostico()
Saída
text
Diagnóstico: ['infeccao_respiratoria', 'pneumonia']
{'febre', 'tosse'} → infeccao_respiratoria
{'infeccao_respiratoria', 'dificuldade_respirar'} → pneumonia
Como funciona
Componente Função
Fatos Sintomas do paciente (ex: febre, tosse)
Regras SE condições ENTÃO diagnóstico
Inferência Aplica regras repetidamente até nenhum fato novo
Regras do sistema
SE febre E tosse → infeccao_respiratoria
SE infeccao_respiratoria E dificuldade_respirar → pneumonia
Aplicações
Diagnóstico médico assistido
Suporte a decisões clínicas
Treinamento de profissionais