基于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)
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/456687.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows系统部署Plex影音站点并实现公网访问内网媒体库

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

《鸟哥的Linux私房菜》第6章——总结与习题参考答案

目录 一、 简介 二、一些新了解的指令 1.touch- 修改文件时间或创建新文件 2.umask-新建文件/目录的默认权限 3.文件隐藏属性 4.文件特殊权限 5.file-观察文件类型 三、简答题部分 一、 简介 本章介绍了一些常用的文件与目录指令,包括新建/删除/复制/移动/查…

devops-git【部署及配置】

1、安装Git Linux做为服务器端系统,Windows作为客户端系统,分别安装Git: 【服务器端】 输入git --version 若出现 -bash:git:command not found则需要安装git;服务器端:输入yum -y install git安装完后,…

java枚举与模拟方法

枚举 枚举的定义 枚举算法(穷举算法),这种算法就是在解决实际问题的时候去使用所有的方式去解决这个问题,会通过推理去考虑事件发生的每一种可能性,最后推导出结果 优点 简单粗暴,他暴力的枚举所有可能&…

[ROS 系列学习教程] rosbag C++ API

ROS 系列学习教程(总目录) 本文目录 一、rosbag::Bag1.1 常用接口1.2 其他接口 二、rosbag::View2.1 常用接口2.1.1 代码示例 rosbag 的 C API 主要有两个类,用于写bag文件的Bag类,和用于读bag文件的View类。 一、rosbag::Bag 用于写bag文件。 头文件…

变量直接赋值、浅拷贝、深拷贝、递归、异常

对象拷贝(对象存在堆中) 变量直接赋值 赋值 就是一个&#xff0c;比如let obj2obj1 这就是赋值&#xff0c;只是把栈中存储的值&#xff0c;赋值给另一个变量 把obj1在栈中的地址&#xff0c;赋值给obj2 <script>let str hellolet str2 str //把str的值,赋值给str2.也…

Linux系统Docker部署Plik系统结合内网穿透实现公网访问本地文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

HarmonyOS NEXT应用开发之深色模式适配

介绍 本示例介绍在开发应用以适应深色模式时&#xff0c;对于深色和浅色模式的适配方案&#xff0c;采取了多种策略如下&#xff1a; 固定属性适配&#xff1a;对于部分组件的颜色属性&#xff0c;如背景色或字体颜色&#xff0c;若保持不变&#xff0c;可直接设定固定色值或…

企业微信如何接入第三方应用?

1.登录企业微信管理后台&#xff1a;https://work.weixin.qq.com/wework_admin​​​​​ 2.点击创建应用&#xff1b; ​​​​​​​ 3. 此时可以看到已经创建好的应用&#xff0c;并且生成应用的唯一id&#xff08;agentId&#xff09; 4. 第三方应用申请域名 (举例&…

通过OceanBase 3.x中not in无法走hash连接的变化,来看OB优化器的发展

作者简介&#xff1a; 张瑞远&#xff0c;曾从事银行、证券数仓设计、开发、优化类工作&#xff0c;现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作。 持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得的专业技能与认…

卷径计算(膜厚叠加+数值积分器应用博途PLC SCL代码)

VN积分法卷径计算的其它方法,可以参考下面文章链接: 1、VN积分法卷径计算FB https://rxxw-control.blog.csdn.net/article/details/131612206https://rxxw-control.blog.csdn.net/article/details/1316122062、PLC数值积分器 https://rxxw-control.blog.csdn.net/article/…

【刷题训练】LeetCode:557. 反转字符串中的单词 III

557. 反转字符串中的单词 III 题目要求 示例 1&#xff1a; 输入&#xff1a;s “Let’s take LeetCode contest” 输出&#xff1a;“s’teL ekat edoCteeL tsetnoc” 示例 2: 输入&#xff1a; s “Mr Ding” 输出&#xff1a;“rM gniD” 思路&#xff1a; 第一步&am…

Cassandra 集群安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装说明4.安装准备4.1.安装 JDK 114.2.安装 Python4.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/m…

TikTok新手如何起号?环境因素与内容创新技巧

相信很多刚入行的TikTok玩家都遇到过一个难题&#xff0c;那就是账号权重低&#xff0c;播放量在个位数徘徊&#xff0c;其实都是因为还没起号&#xff01;那么具体如何起号呢&#xff1f;下面小编也给大家分享一下技巧。 一、如何起号 1、明确注册 TikTok 账号的目的 无论是…

嵌入式3-14

1、整理思维导图 2、重写链表的代码 3、实现链表&#xff0c;按值查找返回位置的功能&#xff0c;按位置查找返回值&#xff0c;释放单链表&#xff0c;链表逆置 node_p create_link_list()//创建头结点 { node_p p(node_p)malloc(sizeof(node)); if(pNULL) { …

python中的常用模块

os和sys模块 os和sys是Python标准库中两个非常重要的模块&#xff0c;它们提供了丰富的方法来与Python解释器以及操作系统交互。 os模块 os模块提供了许多函数&#xff0c;用于处理文件和目录等操作系统任务&#xff0c;如路径管理、执行命令、获取进程信息等。 常用方法&a…

计算机网络-第7章 网络安全(1)

主要内容&#xff1a;安全威胁与问题、对称密钥密码体制和公钥密码体制、数字签名与鉴别、网络层和运输层安全协议、应用层电子邮件、系统安全&#xff1a;防火墙与入侵检测 当网络中的用户都来自社会各个阶层和部门时&#xff0c;网络中存储和传输的数据需要保护。 7.1 网络安…

【python开发】并发编程(上)

并发编程&#xff08;上&#xff09; 一、进程和线程&#xff08;一&#xff09;多线程&#xff08;二&#xff09;多进程&#xff08;三&#xff09;GIL锁 二、多线程开发&#xff08;一&#xff09;t.start()&#xff08;二&#xff09;t.join()&#xff08;三&#xff09;t.…

深入了解栈和队列

小伙伴们&#xff0c;今天我们来继续学习数据结构的第二部分内容&#xff0c;就是栈和队列了。那么栈和队列有什么用呢&#xff1f; 栈和队列是两种重要的线性结构。从数据结构的角度看&#xff0c;栈和队列也是线性表&#xff0c;其特殊性在于栈和队列的基本操作是线性表操作…

Linux系统部署Swagger Editor结合内网穿透实现公网管理本地接口文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xf…