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

本文详细描述了一款利用Python开发的中医药知识问答系统,涉及网络爬虫抓取数据、中药文本处理、知识图谱构建以及智能问答界面实现,系统展示了在准确性与效率方面的优势,为中医药领域提供了一种实用的信息查询工具。
摘要由CSDN通过智能技术生成

[简介]
这篇文章主要介绍了基于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)
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

三、偏方库查询

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

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)

Q:2777.077.178
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SupAor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值