您现在的位置:   首页 >> 新闻中心

智能医疗问答系统的设计与实现

研究论著 中国医疗设备 2021年第36卷 09期 VOL.36 No.09引言通过互联网得到科学准确的医疗服务与人们的幸福生活密切相关,智能问答平台有助于快速筛选搜索信息。自动聊天机器人可分为以信息提取为基础的专家系统和自主生产学习式的开放领域问答平台系统[1] 。垂直领域的专家系统大大压缩了数据规模,适用于医疗领域的应用开发[2] 。语义分析是实现智能问答的基本途径。在传统 算法和 基础上, 以 MySQL+Flask web +vue分级架构实现了知识自动问答[3] 。医疗数据包含大量冗余文本数据。联合标注策略的实体关系抽取模型使用 NoSQL数据库 Neo4j 存储知识数据,获得较高检索效率[4] 。Java语言的 MVC(Model、View、)架构将后台运算与前端显示分离[5-6] 。利用多源异构数据构建医疗相关知识库智能医疗问答系统,联合中文分词和医疗词典,准确识别医疗相关领域词汇[7] 。不同数据库的知识存储会影响问答效率。MySQL 体积小、速度快,在灵活性上远超 SQL Sever 和 数据库[8] 。

利用 Redis 数据库缓存,可提高系统处理高并发场景时的效率[9] 。ANSJ 实现分词,且标注分词后词性,在内存中分词速率 100 万字 /s,准确度达 96% 以上[10-11] 。作为 框架,集成了控制翻转和面向切面编程的特点[12-13] 。布隆过滤器利用错误率换取更小的空间占用,其操作时间复杂度为 O(1) [14-15] 。本文旨在设计实现一款智能智能医疗问答系统的设计与实现何艳,张宁西安邮电大学 通信与信息工程学院,陕西 西安 [摘 要] 目的 设计与实现智能医疗问答系统,为医疗服务信息化和智慧化的建设提供支持。方法 本系统平台引入B/S架构设计,采用前后端分离开发。其中利用Vue.JS开发Web端,以作为基础语言搭建后端,配合框架实现MVC模式对项目解耦合处理。项目数据库的数据来源于寻医问药网(),以框架多线程进行数据爬取。采用关系型数据库MySQL实现医疗信息以及用户信息的数据存储。结果 本文设计实现了一款基于的医疗问答系统。通过数据库设计、服务逻辑设计、系统优化设计和数据交互设计,利用中文分词技术和数据库对象映射与知识推理,实现基本的医疗问答。

结论 智能医疗问答系统能够满足用户健康需求,在B/S模式下让用户通过网页浏览器实现医疗健康信息咨询。[关键词] 智能医疗问答系统;医疗服务;关系型数据库 and of Yan, ZHANG of and , Xi’an of Posts & ,Xi’an , : To for the of and , the is . By B/S , was in with front-end and back-end . i cally, Vue.JS was used to the Web end, was taken as the basic to build up the back end, and the union of the the under MVC . All the that in this came from the (), where multi- data was under the of . The MySQL was to store as well as . In this study, a was and based on . The fulf i of this was of , logic , and data , the of and was the of word and as well as . The can meet the needs of users, users to and a web in the B/S mode. Key words: ; ; [中图分类号] R197.39;TP391.1[文献标识码] Adoi:10.3969/j.issn.1674-1633.2021.09.023 [文章编号] 1674-1633(2021)09-0100-04收稿日期:2020-12-15基金项目:国家自然科学基金();陕西省自然科学基础研究计划项目(-861)。

通信作者:何艳,副教授,主要研究方向为复杂系统与复杂网络。通信作者邮箱: i 研究论著 中国医疗设备 2021年第36卷 09期 VOL.36 No.09问答系统,通过用户对自身病情症状的描述,系统通过语义解析得到合理准确的医疗指导,进而给人们提供日常的健康医疗咨询。1 医疗问答系统设计本医疗问答系统设计框图如图 1 所示,系统采用分级架构,使得数据库、逻辑层、展示层分开,便于分层开发维护。1.1 后端结构设计后 端 代 码 结 构 大 致 分 为 、Dao、Pojo、、Test 五部分。其中 层负责与前端代码的交互,接收或发送数据到前端。Pojo 层存储项目对应的数据模型类。 层负责处理项目的主要逻辑。Test 负责代码的调试与测试功能。图 2 展示了后端项目代码结构。1.2 数据库连接设计在数据库连接的部分,采用基于 JDBC 的 Java 数据库连接工具 进行 Java 程序与 MySQL 数据库的连接。使用注解的方式完成连接,并将 SQL 语句卸载至 xml 文件中,便于维护管理[16] 。

同时项目采用了 自带的SQL 预处理方式,避免了 SQL 注入的风险。1.3 医疗问答系统数据库设计医疗问答系统的数据模型包括用户集合、疾病集合和用户患病集合。用户集合用于存储普通用户在平台进行登录、注册、问答咨询所需的基本信息 ;疾病集合用于存储爬取的医疗相关信息 ;用户患病集合用于存储疾病与用户之间的对应关系,形成用户表与疾病表之间多对多的表间关系。各表间关系绘制成实体联系图如图 3 所示。1.4 前后端交互资源使用设计由于项目前后端分离的设计,在本机测试时两端会分别占用不同端口,前端 Vue 部分占用 8080 端口,后端占用 8081 端口。前后端的数据交互采用 JSON( )数据格式。依照 JSON 将后端 Java 实体类序列化成字符串的格式发送至前端解析,同时前端也能发送 JSON 至后端,经由后端转换为实体类。在 Java 中,可以将 JSON 还原为 结构或者一个基本对象。1.5 系统并发设计本系统在多个角度进行了并发设计,确保了程序的稳定性(图 4)。系统设计将 服务器默认提供的 BIO模式改配置为 NIO 模式。

BIO 模式下,每次请求会新建一个线程去处理,线程的创建与销毁极大地浪费了系统资源,改为 NIO 模式后不用每次阻塞线程,提高了系统效率。在编写 Java 代码时,内部使用了 作为缓存暂时存储数据库查询结果,避免每次处理时对数据库的反复查询。利用 的多线程爬虫特性爬取医疗数据,开启 5 个线程同时爬取,提高了系统速度。1.6 MVC模式解耦设计考虑到系统各模块间耦合度高,本系统在架构设计上采用 MVC 模式解耦合。将系统拆分为 View(前端视图层)、(逻辑控制层)、Model(中间数据逻辑层),分别对应后端代码中的 、、Pojo 三个文件夹。其中 文件夹中主要编写基于 的相关代码,负责通过 http 协议完成前后端数据交互。 文件夹中主要编写问答系统的主要逻辑,即接收到问题后对问题处理并回复的过程。Pojo 文件夹中则存放系统用到的实体类,包括用户类、医疗信息类。三层分离编写,互不图1 系统设计框图图2 后端项目代码结构图3 系统数据库实体联系图图4 医疗问答系统的并发设计图研究论著 中国医疗设备 2021年第36卷 09期 VOL.36 No.09干扰。

三层间通过数据接口交互,方便分模块纠错。1.7 系统功能模块详细设计问答模块是系统的主要逻辑模块,具体流程是前端接收用户输入的语句传输至后端,随后进入 层。通过 Ansj 对语句进行分词处理,并按照词性摘取出语句中的动词、名词等作重点处理,并将其存入 标记为。依次遍历 中的所有词,并在 MySQL 数据库中查找相关疾病的症状,并记录疾病名称和出现次数至 Map 中,最后通过 反馈给前端。用户信息处理模块包含对用户注册信息的数据库写入以及对登录用户信息的查库校验。项目中的 User 类对应MySQL 中的 User 表,分别设置 Uid、UName、三个字段,简单地实现了登录注册功能所需要的所有信息。用户通过 /login 进入登录模块前端页面,输入用户名密码后发送至后端,在通过 MySQL 查询登录信息完成校验,校验成功后自动转入问答模块。注册功能则是在数据库中存入用户的注册信息,注册完成后返回登录页面。信息获取模块负责自动获取医疗网站内医疗相关的信息,医疗数据内容爬取后重新存储,见图 5。

借助 提供的爬虫接口,使用 Java 线程池技术配置多个线程同时爬虫,考虑到本电脑使用四核 CPU,确定开启五个线程,理论上获得了五倍速度的爬虫效率。通过爬虫获取疾病名称、疾病描述、病因、症状、治疗手段、诊断鉴别等多种信息,对应创建其 Java 类用于存储智能医疗问答系统,最后通过的持久化技术将医疗数据存储至MySQL数据库中。2 技术创新2.1 爬虫策略与算法网络爬虫策略包括借助栈结构实现的深度优先搜索、借助队列实现的广度优先搜索以及最佳优先搜索。最佳优先搜索比深度优先策略和广度优先搜索策略更加复杂,但在面对大量网页爬取的任务时,能更好地过滤掉 30% 以上的无关网页。它的逻辑是在爬取之前先对候选URL 进行一系列的相似度分析,并最终选择爬取与主题相关度更高的网页,节省计算机资源。2.2 爬虫 是一个基于 Java 的开源爬虫框架,其整体 结 构 包 括 、、 和 四个组件,分别对应爬虫生命周期中的下载、清洗、时间管理和持久化。需要将这些组件结合并完成多线程任务以提高爬虫效率,同时使用容器 将组件组织起来协作完成任务。

图6展示了Web Magic各模块协作工作流程。2.3 关系型数据库数据库技术主要研究目标是数据,实现数据高效存储与快速获取。目前的主流数据库分为关系型数据库与非关系型数据库两种。关系型数据库指采用行列表格形式组织数据,其主要模块是二维的表格。如图 7 所示分为表头和内容,多个数据表组成了数据库。为了避免数据重复存储,按照最小关系表的形式存储,采用 SQL 对数据库进行增删改查等操作。2.4 非关系型数据库非关系型数据库也被叫作 NoSQL(不适于 SQL 语句的意思),其速度优势得益于 Hash 数据结构,其预先准备适当长度的存储空间,并做线性标记。当有数据存入空间时,采用特定哈希算法计算数据位置后存入,在后续查询过程中,只需要将查询词再次进行哈希计算,就能在 01 的复杂度内完成查询操作,同比使用了 B+ 树的 MySQL 数据库,查询的时间复杂度远远超过 01。2.5 分词技术分词技术将连续词语组成的句子重新分割成各个词语,便于计算机分治处理。中文分词算法大致分为基于词典的分词算法与基于人工智能统计的分词算法。Java 语言提供了盘古分词、NLPIR、、 等分词工具。

由于 提供便捷的分词接口,分词处理后,框架将会返回句子中所有词语与其所对应的词性,因此本文将采用 分词工具。2.6 Java框架技术 是源于 的一个开源项目,完成了对底层 JDBC 的封装,简化了后端连接数据库的步骤,对外提供简便的接口。其解除了 SQL 语句与程序代码的耦合,将业务层与数据访问分离使系统结构更加清晰。3 结果展示3.1 登录注册功能实现用户自主输入随意用户名密码即可完成注册,注册成功后系统自动跳转到登录页。用户在输入自身症状后,系图5 爬取获得的医疗数据内容图6 运行流程图图7 关系型数据库的数据表研究论著 中国医疗设备 2021年第36卷 09期 VOL.36 No.09统会反馈可能性病症以及其可能性权值。用户登录成功后,页面将自动跳转到 /work 路径展示问答页面,用户向第一个输入框内输入疾病症状(不需要特殊格式),点击提交按钮后,前端自动将内容提交至后台分析,随后 Java后台经过分词处理后向数据库查询结果,结果集将封装在 中暂存,由于 可以将 key 值排序,所以得到疾病可能性权值将从小到大展示。3.2 数据获取模块的实现数据库中的医疗数据均由数据获取模块提供,首先对被爬取网页进行分析,确保其 Robot 协议允...