Как получить значение факта в 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])
Что касается вашего вопроса в комментариях, это зависит от вашего приложения. В вашем случае я бы рекомендовал использовать факты для представления результата решения. Знание экспертных систем представлено фактами, поэтому оно хорошо подходит.
Вы можете использовать полученные знания для дальнейшего обоснования и активации дополнительных правил, которые, например, могут реагировать на факт болезни пользователя и предпринимать соответствующие действия.