当前位置:   article > 正文

基于Python的中医药知识问答系统设计与实现_基于知识库的python问答系统

基于知识库的python问答系统

[简介]
这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言,结合中医药领域的知识和技术,实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性,然后提出了设计思路和实现方法。系统的设计包括数据的采集和处理、问题的分类和分析、答案的生成和评价等关键步骤。通过实验验证,该系统在问答准确性和效率上都取得了较好的表现,具有一定的实用价值。文章最后总结了设计过程中遇到的问题和改进的方向,为进一步研究和应用提供了参考。

(节选)主要研究内容

(1)网络爬虫
(2)中药文本处理
(3)知识图谱搭建
(4)智能问答界面实现

一、知识图谱

在这里插入图片描述

二、问答页面

在这里插入图片描述

在这里插入图片描述
知识图谱架构只要指的是构建模式的结构。
在这里插入图片描述
偏方Flask实现:

app = Flask(__name__)
@app.route('/query/', methods=['GET', 'POST'])
def query():
    if request.method == "POST":
        name = request.form.get("name")
        dict_return = getdata(name)
        return render_template('query.html', dict_return=dict_return)
    else:
        dict_return = getdata('ALL')                       #默认初始页面
        return render_template('query.html', dict_return=dict_return)
    
if __name__ == '__main__':
    app.run(debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        """
        只要检查到了是bytes类型的数据就把它转为str类型
        :param obj:
        :return:
        """
        if isinstance(obj, bytes):
            return str(obj, encoding='utf-8')
        return json.JSONEncoder.default(self, obj)

def getdata(name):
    dict_return = {}
    #处理好的文件路径
    path = "./Data_excel/"
    file = path+str(name)+"偏方秘方.xlsx"
    data = pd.read_excel(file)
    num=list(i+1 for i in range(len(data[u'drug'])))
    drug = list(data[u'drug'])
    prescript = list(data[u'prescript'])
    part = list(data[u'part'])
    # 以下为将处理好的数据加入字典
    dict_return['num'] = num
    dict_return['drug'] = drug
    dict_return['prescript'] = prescript
    dict_return['part'] = part
    # 滚动图
    item = []
    for i in range(0, len(drug)):
        item.append({'num':num[i],'drug': drug[i],'prescript':prescript[i],'part':part[i]})
    data_tb = json.dumps(item,cls=MyEncoder,ensure_ascii = False)
    data_tb = demjson.decode(data_tb)
    dict_return['data_tb'] = data_tb
    li=[]
    for root, dirs, files in os.walk('./Data_excel'):
        for file in files:
            li.append(file.split('偏')[0])
    dict_return['li'] = li
    return dict_return
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

三、偏方库查询

在这里插入图片描述
问答实现:

class SimpleQA:
    def __init__(self):
        self.data = {
            'name_part': {'水部': '藻类', '火部': '灯芯花'},
            'name_alias': {'藻类': '藻藻', '灯芯花': '火火'},
            'name_smell': {'藻类': '清新', '灯芯花': '芳香'},
            'name_cure': {'藻类': '泻火', '灯芯花': '散结'},
            'drug_department': {'藻类': '肝部科室', '灯芯花': '心部科室'},
            'drug_prescript': {'藻类': '清火汤', '灯芯花': '散结丸'},
            'drug_onepart': {'藻类': '水', '灯芯花': '火'}
        }

    def search(self, question_type, drug_name):
        if question_type not in self.data:
            return "抱歉,暂不支持该类型的问题。"
        
        if drug_name not in self.data[question_type]:
            return "抱歉,找不到相关信息。"

        if question_type == 'name_part':
            return '属于部类是:' + self.data[question_type][drug_name]
        elif question_type == 'name_alias':
            return '别名是:' + self.data[question_type][drug_name]
        elif question_type == 'name_smell':
            return '气味品质是:' + self.data[question_type][drug_name]
        elif question_type == 'name_cure':
            return '使用方法是:' + self.data[question_type][drug_name]
        elif question_type == 'drug_department':
            return '该去科室是:' + self.data[question_type][drug_name]
        elif question_type == 'drug_prescript':
            return '治疗疾病的偏方是:' + self.data[question_type][drug_name]
        elif question_type == 'drug_onepart':
            return '该病从属于:' + self.data[question_type][drug_name]

if __name__ == '__main__':
    qa_system = SimpleQA()
    question_type = 'drug_prescript'
    drug_name = '藻类'
    answer = qa_system.search(question_type, drug_name)
    print(answer)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
Q:2777.077.178
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/609674
推荐阅读
相关标签
  

闽ICP备14008679号