如何在clipspy中获取事实值并将其存储在python变量中

2024-10-03 06:27:26 发布

您现在位置: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模板并显示它


Tags: envappif规则requesthtmltemplateassert
1条回答
网友
1楼 · 发布于 2024-10-03 06:27:26

您可以通过事实迭代器访问环境事实

根据事实是ordered还是unordered,您可以通过索引或键访问其内容

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

关于你在评论中的问题,这取决于你的申请。在您的情况下,我建议使用事实来表示决策结果。专家系统知识由事实表示,因此非常适合

您可以使用生成的知识进一步推理和激活更多规则,例如,这些规则可以对用户生病的事实做出反应并相应地采取措施

相关问题 更多 >