2

假设我插入了一条规则:

(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 模板并显示它。

4

1 回答 1

2

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

根据事实是有序的还是无序的,您可以通过索引或键访问其内容。

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

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

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

于 2020-10-31T18:21:07.673 回答