Как получить значение факта в clipspy и сохранить его в переменной Python

Скажем, я вставил правило:

(defrule matching
    (fever ?fever)
    (headache ?headache)
    (disease (fever ?fever) (disname ?disname1) (headache ?headache))
    =>
    (assert (dis ?disname1)))

Теперь я хочу получить значение? Disname1 в переменной python, чтобы я мог отобразить его на веб-странице,

Код фляги -

import clips
from flask import Flask , render_template ,request
app = Flask(__name__)

env = clips.Environment()

env.load("clips.clp")

env.reset()



@app.route('/')
def home():
   return render_template('main.html')

@app.route('/result' , methods = ['POST', 'GET'])
def result():
    if request.method == 'POST':
        if  request.form.get('fever'):
            env.assert_string("(fever true) ")

        if request.form.get('headache'):
            env.assert_string("(headache true)")
            
        
        rule = """ (defrule matching 
                      (fever ?fever) (headache ?headache) 
                        (disease (fever ?fever) (disname ?disname1) (headache ?headache))
                        =>
                          (assert ( dis ?disname1 )) """

        env.build(rule)
       
        

    return render_template('next.html')

env.run()

if __name__ == '__main__':
   app.run(debug= True)

Итак, после создания правила (dis? Disname) утверждается как факт в клипах, поэтому теперь я хочу получить значение ? Disname, которое укажет мне болезнь, с которой сталкивается человек, в переменную python, чтобы я мог передать его в шаблон html и отобразить его.

1 ответ

Решение

Вы можете получить доступ к фактам окружения через итератор фактов.

В зависимости от того, является ли факт упорядоченным или неупорядоченным, вы можете получить доступ к его содержанию через индексы или ключи.

for fact in env.facts():
    if fact.template.name == 'dis':
        print(fact[0])

Что касается вашего вопроса в комментариях, это зависит от вашего приложения. В вашем случае я бы рекомендовал использовать факты для представления результата решения. Знание экспертных систем представлено фактами, поэтому оно хорошо подходит.

Вы можете использовать полученные знания для дальнейшего обоснования и активации дополнительных правил, которые, например, могут реагировать на факт болезни пользователя и предпринимать соответствующие действия.

Другие вопросы по тегам