一种基于知识图谱的分布式医院信息综合查询系统
技术领域
本发明属于医疗系统
技术领域
,具体涉及一种基于知识图谱的分布式医院信息综合查询系统。背景技术
当前医院信息化高速发展,业务软件不断增加,产生并累积了大量数据信息,它们分布在不同的数据库中,数据量庞且相对独立,利用好这些医疗信息数据将为医院提升现代化管理水平,提供更科学的决策支持。然而各业务软件自带的信息查询功能只能提供自身数据库信息查询,无法有效地整合和分析利用这些原始数据,且无法深入发掘蕴含在这些数据中的价值。而通过接口平台互联,对于跨平台、跨数据库的综合信息查询,也会存在查询效率低、信息匹配速度过慢、无法实现数据融合等方面的问题。
知识图谱是对于特定领域知识的精确查询,可以用来更好的查询复杂的关联信息,从语义层理解用户意图,改进搜索质量,能够快速匹配和查询出结果,所以本文主要围绕基于知识图谱的快速搜索查询功能,利用它的封装解析功能,提取各个不同业务系统之间的数据,再利用K最近邻算法(KNN),对整个数据进行医疗文本分类,可以解决上述问题。
发明内容
本发明的目的是为了解决现有医院查询系统效率低其无法实现数据融合等问题,提出了一种基于知识图谱的分布式医院信息综合查询系统。
本发明的技术方案是:一种基于知识图谱的分布式医院信息综合查询系统包括医疗信息模块、用户信息模块、耗材信息模块、设备信息模块和药品信息模块;
医疗信息模块用于统计每日医疗日报、统计医院实时数据、统计科室占床收入、统计医疗收入、统计用药情况和统计医疗质量;
用户信息模块用于用户信息修改和用户角色权限分配;
耗材信息模块用于统计耗材库存明细、统计科室请领明细、出入库对账、统计科室消耗和查询供货情况;
设备信息模块用于在线查询医院信息综合查询系统的信息;
药品信息模块用于统计每日药品日报、统计临床药房库存、统计门诊药房库存、查询出入库和查询药品信息。
进一步地,基于知识图谱的分布式医院信息综合查询系统的查询方法为:利用KNN算法对医疗数据进行分类,并构建基于分类后的医疗数据的知识图谱;利用知识图谱,在医疗信息模块、用户信息模块、耗材信息模块、设备信息模块和药品信息模块中进行信息查询。
进一步地,分布式医院信息综合查询系统采用SpringMVC框架。
进一步地,医疗信息模块中,每日医疗日报通过定时器定时汇总每日数据得到;
医院实时数据通过依次从分布式医院信息综合查询系统中的缓存数据和Cache数据库中查询得到;
科室占床收入包括每段时间内各个科室的病床占有率和收入数据,其通过依次从分布式医院信息综合查询系统中的缓存数据和Cache数据库中查询得到;
用药情况包括抗菌药物使用率、大处方比例和药品类型。
进一步地,用户信息模块中,用户信息修改的具体方法为:通过用户登录分布式医院信息综合查询系统,发起修改信息请求,调用数据访问层查询分布式医院信息综合查询系统的数据库,并将查询结果返回SpringMVC架构中的Service层,进行用户信息修改;
用户角色权限分配的具体方法为:通过管理员登录分布式医院信息综合查询系统,发起权限分配请求,利用QUERY方法调用SpringMVC架构中DAO层的查询接口进行查询,并将查询结果返回至管理员,进行权值配置。
进一步地,耗材信息模块中,通过具有耗材明细查询权限的用户登录分布式医院信息综合查询系统,利用网络接口层将耗材库存明细查询请求转换为JSON格式,并发送至SpringMVC架构中Controller层进行处理,将处理得到的查询条件发送至SpringMVC架构中DAO层,利用DAO层进行查询操作,并将查询结果返回至SpringMVC架构中Service层进行封装,完成耗材库存明细统计。
进一步地,设备信息模块采用MyISAM存储引擎和InnoDB存储引擎进行在线查询。
进一步地,药品信息模块中查询出入库的查询方式包括查询每段时间的入库药品、查询每段时间的出库药品和按照厂家查询每段时间的入库药品;
其具体查询方法为:通过具有出入库查询权限的用户登录分布式医院信息综合查询系统并设置查询时间段,通过HTTP协议将封装成JSON格式的入库查询请求发送至MVC架构中Controller层,并利用Java反射机制将入库查询请求映射至SpringMVC架构中Service层进行查询条件解析,根据解析后的查询条件调用SpringMVC架构中DAO层的持久层映射框架查询入库信息。
本发明的有益效果是:
(1)本分布式医院信息综合查询系统可对医疗信息等进行实时查询,并通过数据统计分析对医院及科室的运营和管理起到数据支撑作用,系统将查询统计的功能分为以下四大类:医疗信息的统计分析功能、药品信息的查询与统计功能、医疗耗材信息的查询与统计功能和医疗设备的查询与统计功能。
(2)本分布式医院信息综合查询系统提高了临床诊疗的服务的效率,减少了医疗的差错,改善了医疗的体验,控制了医疗的成本,也为医院管理运营提供了更强大的数据分析工具,提高了医疗数据精细化的管理水平。
附图说明
图1为分布式医院信息综合查询系统的结构图;
图2为用户信息修改时序图;
图3为角色权限分配时序图;
图4为角色分配程序流程图;
图5为耗材库存明细时序图;
图6为药品出入库查询时序图;
图7为数据采集程序流程图。
具体实施方式
下面结合附图对本发明的实施例作进一步的说明。
在描述本发明的具体实施例之前,为使本发明的方案更加清楚完整,首先对本发明中出现的缩略语和关键术语定义进行说明:
KNN算法:一种基于监督学习的机器算法,全称为K-近邻算法。
在SpringMVC架构中,dao层:主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此;
service层:主要负责业务模块的应用逻辑应用设计;
controller层:负责具体的业务模块流程的控制;
view层:view层与控制层结合比较紧密,需要二者结合起来协同开发,view层主要负责前台jsp页面的显示。
Cache数据库:美国Intersystems公司产品,属于后关系型数据库。
QUERY方法:主要用于执行sql语句,实现对数据库的增删改查。
Java反射机制:指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。
MyISAM存储引擎:MySQL关系数据库系统的默认储存引擎。
InnoDB存储引擎:默认的表存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU。
如图1所示,本发明提供了一种基于知识图谱的分布式医院信息综合查询系统,包括医疗信息模块、用户信息模块、耗材信息模块、设备信息模块和药品信息模块;
医疗信息模块用于统计每日医疗日报、统计医院实时数据、统计科室占床收入、统计医疗收入、统计用药情况和统计医疗质量;
用户信息模块用于用户信息修改和用户角色权限分配;
耗材信息模块用于统计耗材库存明细、统计科室请领明细、出入库对账、统计科室消耗和查询供货情况;
设备信息模块用于在线查询医院信息综合查询系统的信息;
药品信息模块用于统计每日药品日报、统计临床药房库存、统计门诊药房库存、查询出入库和查询药品信息。
在本发明实施例中,基于知识图谱的分布式医院信息综合查询系统的查询方法为:利用KNN算法对医疗数据进行分类,并构建基于分类后的医疗数据的知识图谱;利用知识图谱,在医疗信息模块、用户信息模块、耗材信息模块、设备信息模块和药品信息模块中进行信息查询。
KNN算法作为一种便于理解、实现简单的方法,它的优点在于产生的训练结果精度高,不需要对无数据输入做出假定,而且对样本中异常值的敏感程度也较低,在边界不规则的数据中,其分类效果比线性分类好。但它也具有一定的缺陷,在对数据进行训练时,除了需要大量空间存储所有需要训练测试的数据之外,计算复杂度和空间复杂度都比较高,因此不适用于特征空间维度较高的数据。
本发明所涉及的医疗数据不同于一般的文本数据,本发明所涉及的医疗数据大致分为数值型数据和文本型数据,例如药品信息所包含的数据较多的是数值型数据,而耗材信息则包含更多的文本型数据。对于文本型数据,不涉及标点符号和停用词等,但为了对特征进行提取,需要某些词进行切分操作。
在本发明实施例中,分布式医院信息综合查询系统采用SpringMVC框架。
在本发明实施例中,医疗信息模块中,每日医疗日报通过定时器定时汇总每日数据得到;
医院实时数据通过依次从分布式医院信息综合查询系统中的缓存数据和Cache数据库中查询得到;
科室占床收入包括每段时间内各个科室的病床占有率和收入数据,其通过依次从分布式医院信息综合查询系统中的缓存数据和Cache数据库中查询得到;
医院收入由全院总收入、门急诊总收入、住院总收入、全院药品总收入、门急诊药品总收入、住院药品总收入、全院医疗收入、门急诊医疗收入和住院医疗的收入组成;
用药情况包括抗菌药物使用率、大处方比例和药品类型。
每日医疗日报:针对每日的数据进行一个汇总统计。为了避免统计过程影响白天医院正常的业务,统计功能安排在当日的凌晨进行。使用Spring提供的定时器功能来实现定时统计。
医院实时数据:为了加速医院实时数据的查询效率,查询流程分为两部分,首先去缓存数据中进行数据查询,如果缓存中不存在,再进行第二步,去Cache数据库中查询;
科室占床收入:统计的是一段时间内各个科室的病床占有率以及收入情况,为医院总体的病人安排以及决策提供数据决策支撑。
用药情况:合理化用药模块对全院各科室用药情况进行监督控制,可以通过该模块实时查看科室医生药品使用情况,比如说大处方、抗菌药物的使用情况(DDDS)、药占比等等,实现医院相关部门和临床科室在药品使用上的自我监控。
在本发明实施例中,用户信息模块中,用户信息修改的具体方法为:通过用户登录分布式医院信息综合查询系统,发起修改信息请求,调用数据访问层查询分布式医院信息综合查询系统的数据库,并将查询结果返回SpringMVC架构中的Service层,进行用户信息修改;
用户角色权限分配的具体方法为:通过管理员登录分布式医院信息综合查询系统,发起权限分配请求,利用QUERY方法调用SpringMVC架构中DAO层的查询接口进行查询,并将查询结果返回至管理员,进行权值配置。
如图2所示,用户信息修改用户首先登录系统,并点击用户信息按钮,进入个人信息界面的视图。个人信息界面视图会向个人信息ViewModel发起事件请求。个人信息ViewModel会通过HTTP协议向后端服务器进行请求。后端服务器的控制层在接收到来自ViewModel的事件请求后,会采用反射的方式来寻找到指定的Service层方法。Service层的方法接着向操作数据库的DAO层进行请求。DAO层接收到了有关个人信息的查询请求之后,使用Mybatis对数据库查询,并返回查询的结果到Service层。Service层把查询到的结果封装为JSON的数据格式,通过Controller层返回给个人信息视图界面,然后通过个人视图界面的渲染,将用户登录过后,查询到的个人信息进行展示。上述步骤,即:时序图中的1-15步,进行的是用户登录系统后,个人信息的显示过程。信息修改时序图中的第17-31步骤为修改信息的流程。修改信息的流程描述和展示信息的描述基本一致,区别主要有两个方面的不同。第一方面是触发机制的不同,展示信息需要用户点击个人的信息按钮,触发查询个人相关信息的查询请求;而修改信息需要用户提供待修改的信息,如果没有提供修改信息,则调用查询信息请求。第二方面是在服务端的处理上。如果是对信息的修改,在服务端调用的是UPDATE更新方法,继而去调用DAO层的UPDATE方法操作数据库。而查询时服务端使用的QUERY查询方法是调用的DAO层里的SELECT方法查询数据库的数据。
角色各个权限的分配时序如图3所示。系统的管理员为角色各自分配的权限,在医院信息综合查询系统,不同的用户拥有不同的查询权限。例如:拥有院长角色的用户拥有系统所有的数据查询权限,能够对全院的财务和药品、服务质量进行清晰的查询,拥有主任级别的用户只能查看所在科室的一些数据。与信息修改功能不同的是,角色权限分配功能只有管理员才具有的功能。管理员登录系统,用户列表视图会将系统中所有的用户以列表的形式展现在浏览器页面上。管理员选择一个想要修改权限的用户,点击查看按钮。用户列表ModelView会向权限ModelView发起事件请求。权限ModelView会通过HTTP协议向服务端的Controller发起请求。服务端的Controller接收到请求之后,会使用Java的反射方式,定义到Service层中的QUERY查询方法。QUERY方法调用DAO层中的Mybatis查询接口,将数据库的查询结果集返回,并经过权限视图界面的渲染展现给管理员。管理员完成权限的配置,然后点击提交按钮,并将鼠标点击事件发送给权限ModelView。权限ModelView将管理员配置的权限数据封装成JSON格式的数据,通过HTTP协议发送给服务端的控制层。服务端的控制层调用Service层中的UPDATE方法,通过操作DAO层中的Mybatis接口修改数据库中的数据。
此处把一个医生设为科长级别为例进行说明,具体流程的程序流程如图4所示。首先,根据医生的姓名查询医生的个人信息,核实系统中是否存在该医生。此处为了提升系统的整体的效率,将医生的姓名进行缓存,存储在内存关系数据库中。
在本发明实施例中,耗材信息模块中,通过具有耗材明细查询权限的用户登录分布式医院信息综合查询系统,利用网络接口层将耗材库存明细查询请求转换为JSON格式,并发送至SpringMVC架构中Controller层进行处理,将处理得到的查询条件发送至SpringMVC架构中DAO层,利用DAO层进行查询操作,并将查询结果返回至SpringMVC架构中Service层进行封装,完成耗材库存明细统计。
如图5所示,首先,拥有对耗材明细查询权限的用户才可以执行耗材库存明细查询,否则无法进行查询。针对权限的拦截体现在两点,前端访问界面上的拦截,以及后端接口访问的拦截。前端界面的拦截采用Shiro框架绑定标签进行操作,如果没有查询耗材库存的权限,则用户登录系统后不会显示出查询按钮。除此之外,后端在执行访问接口前会对当前用户进行权限校验,如果没有查询耗材库存的权限,那么将返回权限错误的状态码。拥有查询耗材信息权限的医生登录系统后,点击按钮跳转到耗材信息View。在耗材信息界面上的搜索栏里输入要查询的耗材的名称或者关键字,并点查询的按钮。然后所要查询的信息会被网络接口层封装成为JSON格式的数据在网络中传输,并发送给服务端的Controller层。服务端的Controller层接收到网络中传递过来的查询请求,对查询请求进行处理,并使用Java语言的反射调用,映射到所对应的服务层的接口上。Service层接收到相关的查询条件之后,需要对查询条件进行处理,例如:去除空格,多关键词的分割等等。然后将处理完毕的查询条件发送给DAO层,DAO层使用数据库持久层映射框架Mybatis进行最终的查询操作。DAO层查询的结果会返回给Service层进行具体的封装和处理。例如:对查询结果的排序等。Service层把经过处理的数据发送给Controller层,然后经过JSON序列化的操作之后发送给耗材信息View。耗材信息View接到JSON字符串之后进行反序列化操作取出数据,并对页面进行渲染,展示给医生。
在本发明实施例中,设备信息模块采用MyISAM存储引擎和InnoDB存储引擎进行在线查询。
设备信息模块的作用是:通过该模块可以实现对全院医疗设备信息的在线查询,做到在线查阅设备信息。由于医院的设备相对固定,因此设备信息模块的数据相对稳定,不会存在频繁的修改、增加和删除的操作,针对设备信息模块的操作主要是查询操作。因此,针对设备信息模块,本文的主要的优化针对在提升查询效率上。在提升效率上,本文使用了以下的几种方法。针对设备信息表,选择查询性能更加高效的MyISAM存储引擎。如上,因为设备信息相对固定,插入、删除以及修改的操作频次很低,并且不存在复杂的事务逻辑。Cache自身所带的两个存储引擎MyISAM和InnoDB,在查询的性能上看MyISAM性能是要高于了InnoDB,尽管InnoDB引擎的速度要比MyISAM的引擎慢,不过InnoDB的引擎是支持复杂事务操作的,并且拥有多种锁来解决并发脏数据的问题。很明显,针对频繁的查询,需要选择MyISAM引擎。除此之外,为每一个设备生成一个全局唯一的设备ID,称为UEID,并将UEID设置成索引,加速查询效率。设备的信息支持的查询方式比较多,有按照设备的编号、设备的名称、设备的类别、供应商、生产的厂商、合同号等其他的查询条件。输入要查询的信息之后,点击查找按钮,就可以查询到满足相关条件的设备信息的数据结果。
在本发明实施例中,药品信息模块中查询出入库的查询方式包括查询每段时间的入库药品、查询每段时间的出库药品和按照厂家查询每段时间的入库药品;
其具体查询方法为:通过具有出入库查询权限的用户登录分布式医院信息综合查询系统并设置查询时间段,通过HTTP协议将封装成JSON格式的入库查询请求发送至MVC架构中Controller层,并利用Java反射机制将入库查询请求映射至SpringMVC架构中Service层进行查询条件解析,根据解析后的查询条件调用SpringMVC架构中DAO层的持久层映射框架查询入库信息。
如图6所示,查询出入库信息需要用户拥有查询权限,如果没有查询权限,医生登录了系统之后,将不会看到药品信息View。如果医生登录了系统以后,有药品的信息View则医生可以对药品出入库信息进行查询。系统中总共支持三种查询方式,查询一段时间的入库药品,查询一段时间的出库药品以及按照厂家查询某段时间的入库药品。整个药品出入库查询过程可以描述为:拥有查询权限的医生登录系统,进入药品信息View。医生设置查询的方式,如上,共有三种查询方式,并设置查询的时间段。设置完毕之后,药品信息View将查询信息封装为JSON格式数据,通过HTTP协议发送给服务端的Controller层,Controller层接收到JSON的数据之后,使用Java反射机制,映射到药品出入库查询Service接口上。药品出入库查询Service接口将JSON格式的查询条件解析,并调用DAO层的持久层映射框架Mybatis对Cache数据库操作,查询出结果。Service层接收到返回的药品出入库信息,对数据进行处理并递交给Controller层,由Controller层将数据封装成JSON格式之后,通过HTTP协议返还给药品信息View。药品信息View接收JSON格式的数据,对其进行解析渲染,展示给医生。
具体来讲,MedicineService类中与药品出入库查询相关的方法有4个。findMedicineReportByFactoryName()方法对应按照厂家名称查询药品入库信息,该方法会调用MedicineMapper实例中的同名方法对数据库进行查询。findMedicineReporIn()方法实现了查询某一时间段内的入库药品信息。findMedicineOut()则对应了查询某一时间段内的出库的药品信息。最后一个方法,countMedicineReport()用作数据统计,统计某一时间段内出入库药品的条目数。
在本发明实施例中,如图7所示的数据抓取图。医院信息综合查询系统的数据来源是医院的业务系统,在不影响医院正常的医疗流程下,如何才能快速的获取业务数据是需要考虑的问题,医院患者虽然很多,但是晚上看病的患者相对于白天会少很多,周末比工作日患者多,所以系统的定时任务白天每隔1个小时抓取一个小时以内的数据,数据的抓取采用存储过程,存储过程在Cache服务器端有缓存,可以提高代码执行的效率,白天跑增量。晚上凌晨患者相对较少,所以每个星期二的凌晨抓取全量数据;抓取的流程可以描述为:第一,安装sqoop,hadoop脚本文件;第二,判断系统是否有增量数据,如果有空值,则不用调用hadoop添加增量索引,否则进行下一步的操作;第三,执行hadoop批量添加索引命令,向系统索引中添加增量数据。
本发明的工作原理及过程为:首先,对不同业务系统的数据提取、整合技术进行研究,引入知识图谱的概念,提出通过知识图谱的快速精确搜索功能,结合利用KNN算法,实现系统跨平台跨数据库的精确快速的查询统计功能。其次,本发明系统以医院管理者对管理决策的数据需求为主线,通过整合院内业务数据,建设医院数据仓库,建立统计分析和数据挖掘模型及知识库,实现医院运营和临床的数据分析,从而为医院相关方面的管理者提供决策方面数据的支持。然后,根据医院管理者对数据信息的需求和系统需要满足功能,对本发明系统进行架构方面的设计,并对查询系统中所涉及的每个子模块做出详细设计,通过系统中所有资源间的操作和统计,结合医疗管理制度,实现医疗信息查询、药品信息查询等主要的系统功能。最后,实现本发明系统的所涉及的模块,除了对关键模块做了界面展示和说明之外,也对系统进行了有效性和合理性方面的验证。
本发明的有益效果为:
(1)本分布式医院信息综合查询系统可对医疗信息等进行实时查询,并通过数据统计分析对医院及科室的运营和管理起到数据支撑作用,系统将查询统计的功能分为以下四大类:医疗信息的统计分析功能、药品信息的查询与统计功能、医疗耗材信息的查询与统计功能和医疗设备的查询与统计功能。
(2)本分布式医院信息综合查询系统提高了临床诊疗的服务的效率,减少了医疗的差错,改善了医疗的体验,控制了医疗的成本,也为医院管理运营提供了更强大的数据分析工具,提高了医疗数据精细化的管理水平。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。