【部署医药类问答系统QASystemOnMedicalKG】

前言

从无到有搭建一个以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。github链接

【部署医药类问答系统QASystemOnMedicalKG】

; 部署过程

一、Ubuntu18.04安装MongoDB4.0

参考官网链接
安装依赖库:

sudo apt-get install gnupg

引入秘钥:

wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add -

创建列表文件:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

更新apt库:

sudo apt-get update

安装:

sudo apt-get install -y mongodb-org=4.0.26 mongodb-org-server=4.0.26 mongodb-org-shell=4.0.26 mongodb-org-mongos=4.0.26 mongodb-org-tools=4.0.26

开启MongoDB数据库服务:

sudo service mongod start

输入mongo可连接数据库

show dbs;
use database;
db.collection.stats()

注意问题:

注意版本对应,mongodb其他版本在本项目中使用可能会出现问题。

二、运行数据准备脚本

1. 运行prepare_data文件夹中的data_spider.py数据爬取脚本,完成对网页数据的爬取,并存储在数据库中

python data_spider.py

在此脚本中,首先建立数据库medical,其分为两个集合,分别为data,jc

其中data中包含每个爬取的病理的如下信息
url:信息来源的网站链接
basic_info:病理的基础信息,包括类别、名字、描述、属性等
cause_info: 生成病理的原因
prevent_info: 预防的方法
symptom:症状信息
inspect_info:检查项目
treat_info:治疗方法
food_info:食物对病理的影响,包含有利于病情的食物,有害于病情的食物和推荐食用的食物
drug_info:适用的药物信息

其中jc为初步抓取检查项目抓取的结果,包含
url:信息来源页的链接
html:从链接抓取到的html信息,供后续做信息提取
在收集的链接中提取上述信息并存储到数据库中,此部分结束。

2. 运行prepare_data文件夹中的build_data.py数据建立脚本

python build_data.py

首先调用modify_jc函数对数据库中jc集合进行修改完善,具体实施是从html中提取检查项的名称和检查项结果的描述,得到集合jc下的set{‘name’:name, ‘desc’:sesc}
然后遍历数据库中data集合的每个爬取的病理信息,获取名称、简介、所属类别、预防措施、成因、症状、属性、药品推荐、药品明细、并发症等,其中检查项只提取jc集合中出现的项目,食物信息分列为宜食、忌食、推荐三种。
其中并发症提取:
对提取的并发症信息与dict/disease.txt中的疾病字典进行双向最大匹配,将匹配到的疾病存储为集合

三、安装neo4j

下载地址

【部署医药类问答系统QASystemOnMedicalKG】
下载完成后解压,在bin目录,输入如下命令:
./neo4j start

在浏览器访问127.0.0.1:7474进入nei4j

【部署医药类问答系统QASystemOnMedicalKG】

四、运行构建知识图谱脚本

进入项目根目录,输入命令:

python build_medicalgraph.py

此部分分为两个步骤,分别为创建知识图谱实体节点类型、创建实体关系边。

1. 创建知识图谱实体节点

在创建知识图谱实体节点中,首先读入节点,节点分为8类:药品、食物、检查、科室、药品信息、疾病、症状、疾病信息,然后定义节点和实体的关系,包含科室——科室、疾病——忌吃、疾病——宜吃、疾病——推荐吃、疾病——通用药物、疾病——热门药物、疾病——检查关系、厂商——药物、疾病——症状、疾病——科室、疾病与并发关系。
接着遍历病理集合,获取这些节点和关系的信息。此部分用到节点的信息,节点的信息包括名称、描述、治愈周期、治愈概率等等。
其中疾病信息节点示例:
{
“identity”: 0,
“labels”: [
“Disease”
],
“properties”: {
“prevent”: “1、避免感染分支杆菌病,卡氏肺囊肿肺炎,巨细胞病毒等。
2、注意锻炼身体,提高免疫力。”,
“cure_way”: [
“支气管肺泡灌洗”
],
“name”: “肺泡蛋白质沉积症”,
“cure_lasttime”: “约3个月”,
“cured_prob”: “约40%”,
“cause”: “病因未明,推测与几方面因素有关:如大量粉尘吸入(铝,二氧化
硅等),机体免疫功能下降(尤其婴幼儿),遗传因素,酗酒,微生物感染等
,而对于感染,有时很难确认是原发致病因素还是继发于肺泡蛋白沉着症,例
如巨细胞病毒,卡氏肺孢子虫,组织胞浆菌感染等均发现有肺泡内高蛋白沉着

虽然启动因素尚不明确,但基本上同意发病过程为脂质代谢障碍所致,即由于
机体内,外因素作用引起肺泡表面活性物质的代谢异常,到目前为止,研究较
多的有肺泡巨噬细胞活力,动物实验证明巨噬细胞吞噬粉尘后其活力明显下降
,而病员灌洗液中的巨噬细胞内颗粒可使正常细胞活力下降,经支气管肺泡灌
洗治疗后,其肺泡巨噬细胞活力可上升,而研究未发现Ⅱ型细胞生成蛋白增加
,全身脂代谢也无异常,因此目前一般认为本病与清除能力下降有关。”,
“cure_department”: [
“内科”,
“呼吸内科”
],
“desc”: “肺泡蛋白质沉积症(简称PAP),又称Rosen-Castle-man-Liebow综合
征,是一种罕见疾病。该病以肺泡和细支气管腔内充满PAS染色阳性,来自肺
的富磷脂蛋白质物质为其特征,好发于青中年,男性发病约3倍于女性。”,
“easy_get”: “”
}
}

其他节点label即为节点类型(如药品、食物、检查等),仅有name一个属性。实例如下图

【部署医药类问答系统QASystemOnMedicalKG】

; 2. 创建实体关系边

同样先获取节点和关系的信息,此部分使用获取到的节点的关系。
对于得到的节点关系集合,首先对其进行去重处理,即使用set()处理节点关系列表,核心语句:

【部署医药类问答系统QASystemOnMedicalKG】
其中科室——科室关系可视化示例:

{
“start”: {
“identity”: 20912,
“labels”: [
“Department”
],
“properties”: {
“name”: “中医综合”
}
},
“end”: {
“identity”: 20893,
“labels”: [
“Department”
],
“properties”: {
“name”: “中医科”
}
},
“segments”: [
{
“start”: {
“identity”: 20912,
“labels”: [
“Department”
],
“properties”: {
“name”: “中医综合”
}
},
“relationship”: {
“identity”: 40291,
“start”: 20912,
“end”: 20893,
“type”: “belongs_to”,
“properties”: {
“name”: “属于”
}
},
“end”: {
“identity”: 20893,
“labels”: [
“Department”
],
“properties”: {
“name”: “中医科”
}
}
}
],
“length”: 1.0
}

其他关系与此类似。

五、运行问答对话脚本

运行根目录下chatbot_graph.py,进行对话交互。
在此部分,脚本依次调用对问句进行问句类型分析、问句内容解析、问句答案搜索。

1. 问句类型分析

首先以药品、食物、检查项目、科室、药品信息、疾病、症状即知识图谱中节点的名称为特征词,构建领域的关键词树;然后分别构建症状提问关键词、原因提问关键词、并发症提问关键词、食物提问关键词、药品提问关键词、预防提问关键词、持续时间提问关键词、治疗方法提问关键词、治愈概率提问关键词、易感人群提问关键词、检查项目提问关键词、科室提问关键词、治疗作用提问关键词。

1)构建领域关键词树

安装ahocorasick包,其能够在一次运行中找到给定集合所有字符串,可帮助我们快速进行关键词匹配。

pip install pyahocorasick

首先利用特征词进行构建actree,pyahocorasick构建actree的用法如下:

【部署医药类问答系统QASystemOnMedicalKG】
接着以特征词构建类别词典,key为关键词,value为特征词的类别(如药品、食物、检查项目等)。
2)构建问句疑问词词典

分别构建症状提问关键词、原因提问关键词、并发症提问关键词、食物提问关键词、药品提问关键词、预防提问关键词、持续时间提问关键词、治疗方法提问关键词、治愈概率提问关键词、易感人群提问关键词、检查项目提问关键词、科室提问关键词、治疗作用提问关键词。
症状提问疑问关键词示例:

【部署医药类问答系统QASystemOnMedicalKG】
; 3)问句过滤和类型确定

利用1)中以特征词构建的actree进行关键词匹配,得到关键词的类别词典,以关键词的类别确定问题的类型,如疾病症状、疾病原因等。

【部署医药类问答系统QASystemOnMedicalKG】

2. 问句内容解析

根据得到的类别词典和问题类型判断的结果,组合sql语句:

【部署医药类问答系统QASystemOnMedicalKG】
得到了sql信息列表,用作后面答案搜索。

; 3. 问句答案搜索

首先链接neo4j,在上面已经构建完成了节点和关系边:

【部署医药类问答系统QASystemOnMedicalKG】

然后根据sql列表中每个sql实体的sql语句从知识图谱中得到搜索的答案,然后根据问题类型组装搜索得到的答案,得到回答。其中根据对于疾病症状问题类型进行的答案组装实例:

【部署医药类问答系统QASystemOnMedicalKG】

六、运行结果

【部署医药类问答系统QASystemOnMedicalKG】

Original: https://blog.csdn.net/super_carry/article/details/121695560
Author: 不瘦20斤不换头像
Title: 【部署医药类问答系统QASystemOnMedicalKG】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/555294/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • neo4j常用的数据导入方式

    目前常用的数据导入方式对比如下:1、create语句 CREATE (:label {property1:value, property2:value, property3:val…

    人工智能 2023年6月1日
    0161
  • 左益豪:用代码创造一个新世界|OneFlow U

    左益豪,一流科技工程师(实习),2022年本科毕业于北京邮电大学电子商务及法律专业,目前已保研到本校人工智能学院。除了爱写代码,他自称,”琴棋书画,样样不通,唱跳Rap…

    人工智能 2023年7月14日
    070
  • 【路径规划】基于matlab多种算法无人机路径规划【含Matlab源码 1263期】

    ⛄一、无人机简介 0 引言随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化、完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8…

    人工智能 2023年6月2日
    070
  • SQL介绍

    目录 一、什么是SQL? 1、SQL的概念 2、SQL的特点 3、SQL发展简史 二、openGauss数据库的”SQL” 1、数据类型(常用) 数值类型 …

    人工智能 2023年6月2日
    0113
  • 【数据分析】——pandas

    😊作者简介:大家好我是hellobigorange,大家可以叫我大橙子📃个人主页:hellobigorange的个人主页🔥系列专栏:数据分析(pandas-numpy-matplo…

    人工智能 2023年7月9日
    071
  • NPU架构与算力分析

    NPU架构与算力分析参考文献链接https://mp.weixin.qq.com/s/xc_-5SmtWLGQuX3w-ptPfAhttps://mp.weixin.qq.com/…

    人工智能 2023年7月28日
    057
  • 数据探索与数据预处理的实验报告

    数据探索与数据预处理 提示 参考书:张良均《Python数据分析与挖掘实战》等。 数据文件:课本自带数据。 使用软件:Pycharm。 类别:实验。 温馨提示:该实验是跟张良均这本…

    人工智能 2023年7月7日
    057
  • 将labelImg生成的指定xml标签中某一类的检测框复制给其他图片的xml

    应用背景: 我们在针对监控视频进行多目标labelImg标注时,有些目标检测框的位置时不变的(例如监控镜头下的固定设备),有些目标的检测框是实时变化的(例如监控镜头下的人)。 我们…

    人工智能 2023年6月29日
    084
  • Stata重复与去重

    我们在处理数据的时候,经常会遇到观测值(数据中,每一行叫一个观测值)有重复的情况;有些时候这些观测值是有差别的,而这些差别有可能要关注,也有可能不关注。 下面我们来看一下下图的数据…

    人工智能 2023年7月15日
    0110
  • 密码存储的发展史

    纯文本密码存储阶段 最早期的时候,使用纯文本存储密码,不过存储密码的文件是加了密。 但是容易到SQl注入的风险。 加密算法密码存储阶段 后来使用以SHA-256为代表的HASH加密…

    人工智能 2023年6月4日
    092
  • Windows下使用ssh 调用远程服务器跑神经网络。

    我们在跑神经网络的过程中,经常遇到笔记本呢显卡内存不够的情况。这种情况可以调用相关服务器上的资源。以下是Windows 系统调用远程服务器跑神经网络的过程。 Step1: 下载 e…

    人工智能 2023年7月14日
    068
  • 目标检测:YOLOX 解读

    摘要 YOLOX把YOLO 系列的检测头换成了anchor free的方式,并且采取了一些优化策略:样本分配策略:simOTA,decoupled head(解耦头)的思想。 1….

    人工智能 2023年7月11日
    051
  • python深度学习之基于LSTM时间序列的股票价格预测

    1.本文是一篇LSTM处理时间序列的案例 我们先来看看数据集,这里包含了一只股票的开盘价,最高价,最低价,收盘价,交易量的信息。本文基于LSTM对收盘价(close)进行预测 ; …

    人工智能 2023年6月13日
    0117
  • 史上最全学习率调整策略lr_scheduler

    学习率是深度学习训练中至关重要的参数,很多时候一个合适的学习率才能发挥出模型的较大潜力。所以学习率调整策略同样至关重要,这篇博客介绍一下Pytorch中常见的学习率调整方法。 im…

    人工智能 2023年7月29日
    053
  • 优思学院|利用Excel进行双样本t检验

    以往,六西格玛的专业人员要进行假设检验,除了使用Minitab之外,别无他法。不过,随着时代对数据分析的渴求日益增长,我们日平常办工所用的Excel软件,现在已经可以为我们进行多种…

    人工智能 2023年6月19日
    0103
  • ChatGPT 这玩意好吓人,真能颠覆搜索引擎?

    大家好,我是校长。 前一段风靡世界的是 AI 绘画,不过,这两天又有一个 AI 聊天机器人风靡世界了,热度简直比 AI 绘画有过之而无不及。 这个东西就是 ChatGPT ,IT …

    人工智能 2023年7月31日
    046
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球