应用基于列表的处理的计算机医疗诊断系统的制作方法

文档序号:6413069阅读:231来源:国知局
专利名称:应用基于列表的处理的计算机医疗诊断系统的制作方法
技术领域
本发明涉及一种计算机医疗诊断系统。更特别地,本发明的目的是一种通过对病人疾病的基于时间的诊断中应用动态数据结构的计算机系统。
当前,健康维护的费用花费了相当大比例的美国国民生产总值,且与任何其它消费品价格指数的其他成分相比正在快速上升。更严重的是,因为付不起医疗服务费,许多人得不到甚至最基本的医疗维护和信息。
许多人因为付费、时间限制或不方便等原因,而延误或未能获得医疗服务。如果公众有全面的、不受限制的、且容易获取的医疗信息,那么就能防止许多疾病。同样,对于许多疾病的早期检查和治疗就可以防止许多疾病发展到危险的阶段,对于我们国家的健康维护系统来说,这些治疗费占了财政负担的重要部分。显然,美国正在面对与健康相关的重大问题,且当前的解决方法是不健全的。
以前针对健康维护问题的试探性工作已涉及各种形式的自动化。其中一些试探性工作已形成一种回答医疗问题的电话拨入程序库。其它的试探性工作已把目标针对于在给病人检查时为医生提供计算机辅助支持。这些方法涉及到静态过程和算法。而人们所希望的是一种能快速、有效和准确地提供病人医疗建议和诊断自动化的方法。这样一种医疗建议系统必须是允许为新型的医疗问题和检查方法扩展的标准组件。
一种进行病人查询的方法包括医疗诊断脚本。需要的是一种以脚本的形式代表在各专业方面的专家的医疗知识的有效方法。脚本必须应用动态结构,得以快速和有效地实现病人的诊断。
基于列表的处理是一种诊断疾病的方法,它把疾病、症状和问题组成一组互相嵌套的疾病、症状和问题(DSQ)列表,以该方法处理这些列表,去产生与病人的对话。给病人的每个问题产生一组确定的回答,且每个回答产生一组确定的问题。这样建立起一个对话,得以从病人引出症状。症状被处理和加权去确定疾病在界限内或界限外。这组界限内的疾病建立起这个诊断。一种基于列表的处理系统把医疗知识组成整齐的、结构列表或矩阵,然后对那些列表应用一种特定的算法去自动地选择下一个问题。对问题的回答引出更多的问题,而最终得出一个诊断。
本发明的一个实施例中,有一种计算机诊断方法,它包括以下步骤把一组疾病列表提供给电脑,每种疾病与一组症状列表相关,而每种症状与一组问题列表相关;重复地提问题去引出回答,这些回答构成症状,每种构成的症状给疾病提供一个加权值;并判定对于一种疾病的累积的加权值是否达到或超过一个阈值,从而得出一个诊断。
该医疗建议系统还包括一种以地理位置为基础的病人所在的人群中的差别诊断的列表,当被基于列表的处理器处理时,列表转为一种针对具体病人的差别诊断。该系统还包括一个关于疾病发生频率的列表,利用病人所在地的人群中疾病的概率或发生率来对病人进行评估。该系统也可以针对具体病人提供专门的与具体情况相关的关于化验室检测的选择以及图像形式选择的建议,以有助于进一步确诊。该系统行使“重入”功能,得以完成化验室测试选择和图像形式选择,然后把结果递交给病人、病人的护士和/或其它需要的机构。该系统可以行使该“重入”功能,得以允许病人去完成体检操作(亲自进行或经过一个助手进行〕并且重新查询该系统,以进一步确诊。


图1a是一个示出本发明的计算机医疗诊断与治疗建议(MDATA)系统的当前最佳实施例的部件的方框图;图1b是一个示出说明显示在图1a中的该MDATA系统的用户/病人的电脑的部件的方框图;图2是一个示出说明应用于图1a的系统中的一组程序、文件和数据库的方框图;图3a是一个离线医疗诊断脚本(MPS)产生程序的图示,该程序为图2中已显示的MDS数据库产生一个脚本文件;图3b是一个用于说明对于两个不同的时间间隔的脚本的DSQ列表的可能的结构图;图4a是一个在图3a中已显示的“收集与组织医疗知识”程序中的确定疾病部分的流程图;图4b是一个在图3a中已显示的“收集与组织医疗知识”程序中的获取疾病知识部分的流程图;图5是一个在图3a中已显示的“脚本编辑器”程序的流程图;图6a是一个用于显示在诊断脚本引擎的操作过程中使用的结构的方框图;图6b是一个用于显示一组结构和在脚本引擎的操作过程中所用的输入和被MDATA系统产生的输出的方框图;图7是一个为图1的MDATA系统服务的用户程序的最高级流程图;图8a是一个在图7中已显示的,用于完成联机查询操作的“诊断脚本引擎”程序的流程图;图8b是一个在图8a中已显示的“分类建议”程序的流程图;图9是一个在图8a中已显示的用于基于列表的处理的“DSQ列表脚本引擎”程序中的部分流程图;图10是一个用于显示在图8a中已显示的在DSQ列表脚本引擎的操作过程中使用的部分列表的方框图;图11是另一个在图8a中已显示的“DSQ列表脚本引擎”程序的流程图;图12是一个在图11中标明的“选择症状”(将被考虑的选择症状)程序的流程图;图13是一个在图11中标明的“处理回答”(处理从用户来的回答)程序的流程图;图14是一个在图11中标明的“更新疾病列表”(根据已更新的症状列表,更新疾病的暂时列表中的分数,并消除界限里或界限外的疾病)程序的流程图;以及图15是一个在图1a的MDATA系统中用于产生医疗建议或诊断的另一种实施例的高级流程图。
下文的最佳实施例的具体描述是本发明的一个特定的具体实施。然而本发明体现在由权利要求限定和覆盖的范围内的各种不同的方法。在说明中,参考附图中相同的部件自始至终用相同的附图标记标定。
为了方便,对最佳实施例的说明由以下主要部分组成系统综述、医疗诊断脚本、知识获取详情、脚本产生详情、脚本执行详情和基于列表的处理的优点。
一.系统综述医疗诊断和治疗建议(MDATA)系统是一个计算机系统,它为了建立一个医疗诊断的目的而进行自动化的病人查询。为了进行查询,MDATA使用一个医疗诊断脚本(MDS)数据库。每个MDS包含有为一个专门的医疗条件服务的,查询一个病人和输出诊断所必需的数据和命令。脚本由其它MDATA数据库支持,该数据库包括疾病、症状、治疗、药剂、专家…即关于医疗诊断和建议所需要的所有信息。症状可以被当作一个病史信息,一个从身体检查获得的信息,例如通常从自检获得的身体信号、化验室测试结果或图像形式选择的结果。
参见图1a,下面将说明MDATA系统100的当前最佳实施例的方框图。该MDATA系统100包括一个网络102,它可以代表一个局域网(LAN)、一个广域网(WAN)、因特网或其它连接业务。
该MDATA程序和数据库最好存储在一组服务器108上,它最好通过一个局域网106和一个网关104与网络102互连。另一方面,该MDATA程序和数据库存储在一个使用网络接口设备和软件112的单个服务器110上。该MDATA服务器108/110储存下文将说明的疾病/症状/问题(DSQ)列表。
网络102可以与用户的电脑116连接,例如,通过使用一个调制解调器或通过使用一个网络接口卡连接。在电脑116上的一个用户114可以使用一个浏览器120,应用键盘和/或鼠标设备和一个视频显示器,例如监视器118,远程访问该MDATA程序。另一方面,当MDATA程序以局域模式在电脑116上执行时,就不使用浏览器120。一个视频摄像机122可以有选择地与电脑116连接,以提供视频输入,例如可见症状。
可以使用各种其它设备与该MDATA服务器108/110连通。如果该服务器装备有声音识别或DTMF装置,那么用户可以通过使用电话124与MDATA程序连通。一种电话型实施例在申请人同时申请的题为“计算机化医疗诊断和治疗建议系统”的美国专利第08/176,041号中有具体描述,该文献包含在本专利中作为参考。其他用于连通MDATA服务器108/110的连接设备包括一个装有调制解调器或无线接口的便携式个人电脑、一个与视频显示器130连接的电缆接口设备128、或一个与卫星接收机134和电视机136相连的卫星盘132。还有采用其他方法把用户114与MDATA服务器连通。
参见图1b,当前最佳用户/病人电脑的结构框图显示了各种可能的与网络互连的方法。为了“播放”一个脚本,使用一个叫做脚本引擎的专用程序,该程序读出MDS文件并用其代码去完成查询功能,例如输出一个问题给病人,并由其输入一个回答。脚本也收集病人的回答、对其回答进行评估、作出诊断和更新病人的医疗记录。脚本引擎最好驻留在用户的电脑中。脚本引擎可以存在硬盘驱动器或CD-ROM上,且装入主存储器或高速缓冲存储器中以便于执行。
当前优选的由本发明的自动化的MDATA系统100的用户144所用的电脑116的部件显示在图1b中。另外,用作医疗查询的其它设备,如图1a中所示的,可用来代替电脑116。
电脑116包括装在机壳116中的许多部件。电话线156经由调制解调器160把公共电话网158连接到电脑116。电话网158可以与已和MDATA系统盘108/110连接的网络102相连。另外,用户可以通过使用网络接口卡164与网络102连接。
在本文件中,“用户”和“病人”这两个词是可以互换使用的。然而,应当知道用户可以当作病人的代理人。如果是这样,那么用户则表现为病人的一个助手。
组成硬件和系统软件,脑子里应有以下两个基本概念对于其它操作系统的可移植性和工业标准元件的使用。这样,该系统的适应性将更强,并可使得自由市场竞争持续不断地促进生产,而且同时降低成本。当可能涉及专门的硬件和软件时,应当知道可以在本系统中采用各种不同的部件。
电脑116最好是一个装有英特奔腾微处理器170的个人电脑。另外的电脑,例如也可以使用苹果公司的Macintosh机,Amiga多媒体计算机,数字设备公司的VAX计算机,或IBM公司的大型机。调制解调器160或网络接口卡164与工业标准结构(ISA)或外设部件互连(PCI)总线162相连。总线162通过控制器电路(芯片或板卡)把微处理器170与许多外部设备互连。
电脑总线162上具有多个通过适配器或控制器与之相连的外部设备。视频适配器板172,最好是SVGA或具有更高的分辨率,与视频显示器118互连。一个串行通信电路176与一个定点设备对接,如鼠标器178。在另外的实施例中,一个并行通信电路可以代替电路176。一个键盘控制电路180与键盘182对接。一个500Mb或更大的硬盘驱动器184和一个可选的CD-ROM驱动器186最好与总线162连接。这个硬盘184存储数据库文件,如病人文件、其它MDATA文件、和二进制支持文件。这个CD-ROM驱动器186也存储数据库文件,如为使用电脑116的病人服务的文件、和二进制支持文件。
一个主存储器190与微处理器170相连。在当前最佳实施例中,电脑116最好在Windows 95操作系统192下工作。存储器190运行诊断脚本引擎194和疾病/症状/问题(DSQ)列表脚本引擎196。脚本引擎软件用Borland Delphi Pascal 2.0语言编写。
参见图2,下面将说明用于MDATA系统100的一组程序、文件和数据库。除下面将说明的脚本引擎程序、MDS数据库、图像形式数据库和化验室测试数据库外,这些程序、文件和数据库已在申请人共同申请的题为“计算机医疗诊断和治疗建议系统”的美国专利08/176,041中作了说明。
该MDATA系统100使用多个主程序和相关的数据库。一组病人注册程序被系统100用以下三种方法中的一种来确认一个病人以前是否已在该系统中注册1)通过提示输入病人的身份证号(PIN);2)通过提示输入一个助手的身份证号(AIN),来确定一个以前已在该系统中注册的助手;3)确定一个有助手的病人,他以前已通过提示输入病人的身份证号在该系统中注册。一组程序212用来注册病人或助手。如果用户是病人,一个病人注册程序被系统用来注册新的或第一次的病人。如果用户不是病人,一个助手注册程序被系统用来注册新的或第一次的助手。然后,如果病人还没有注册,那么一个辅助病人注册程序被系统用来注册病人。
每当用户已录入或注册,系统就提供选择程序。涉及本实施例的主程序是执行病人诊断的诊断程序220。这个评估程序220访问一个化验室测试的选择和图像形式选择数据库,以向该病人在此时及时地推荐适当的测试方式,并且访问一个治疗表250,以获得对该具体疾病或诊断的当前治疗信息。在另一个实施例中,增加其它选择去访问其它医疗信息程序。
与这些程序相关的是一个病人和助手的注册数据库240、一个咨询病史数据库242、一个病人回答数据库244、一个医疗史结果数据库246、一个病人医疗数据库248、一个未定数据库252、一个病人医疗史数据库254、一个医疗诊断脚本(MDS)数据库256、一个图像形式数据库258和一个化验室测试数据库260。
二.医疗诊断脚本医疗诊断脚本(MDS)是一个为了产生一个或多个病人状态的诊断而编制的与用户对话的程序。开发MDS有如下多个步骤获取医疗诊断知识、用病人能懂的语言表示它、把它编排成一种有用的序列、把它编制成能播放的脚本、检测它、把它形成特定的通信媒介、把它嵌人其它脚本和支持数据库的汇编中、以及对它进行包装使其能够为病人所用。
“写一个脚本”意思是获取医疗知识和把它处理成逻辑问题串,去最终产生诊断结果的早期的步骤。显然,仅对于诊断特殊疾病有经验的医生才能完成这些步骤,而MDATA系统已开发出多个自动方法去支持它们。
本发明最好采用一种叫做“基于列表的处理”的特殊方法,它从疾病、症状和问题的列表开始。然后用一个基于列表脚本开发工具,把这些列表处理成可播放的脚本。用这个脚本开发工具,程序设计者能够写和编译源脚本,把它编辑成可放送的脚本文件,回送脚本,并设置各种脚本选择,去执行、评估和微调这个脚本。
一个基于列表的脚本由一个特殊格式的文本文件所构成,其中设计者以多种列表形式提供脚本的基本元素。最高级列表是脚本将考虑的疾病列表。对每种疾病,脚本列出症状和它们的加权值。对每种症状,设计者提供一组将引出该症状的问题和它们的加权值的列表。为每个问题,设计者提供多个文本,包括一个用于介绍问题的序言文本。在所有的列表为脚本准备好后,下一步是去“编辑”脚本,例如把它转换成能回放的或为病人所“运行”的特殊编码的脚本文件。为了在开发阶段运行脚本,脚本开发工具选择一个适当的下一个疾病和适合那种疾病的下一个症状。它显示问题文本并等待病人的回答。根据病人的回答,脚本开发工具更新疾病分数并继续下一个症状。当设计者设定的某些条件达到时,例如把划进界内的第一个疾病作为一个诊断,或所有疾病已被考虑,脚本就结束。
在开发阶段中,该脚本的设计者可能设置多种“选择”,它将改变脚本选择下一个疾病和下一个症状的方法,和脚本的运行时间。该选择特性使得做脚本试验的程序设计者找到最佳设置。
所以关于脚本的三个主要阶段是1)知识获取、2)脚本产生、和3)脚本执行。脚本的设计者在开发中使用所有三个阶段并调试脚本。在使用MDATA系统100的运行时间中,病人使用脚本执行阶段。脚本的阶段1.知识获取知识获取阶段包括必须从医疗专家吸取关于诊断给定的疾病的知识,并把那些知识缩编成在产生脚本中有用的某种格式。这个阶段典型地从脚本开发的领导表示需要一个用于诊断一种疾病(如疟疾)的脚本开始。进而决定脚本的范围、调查医疗文献、查询作者和其它专家,规范问题和回答的结构,建立问题的次序,并且,如果应用了自动知识获取的工具,那么在调试安装中运行这个问题流程。这个阶段结束于一组可能是自动生成的源文件,它(至少)包含写出一个能够正确地诊断疾病的脚本所必需的所有信息,例如,当为病人有/无疟疾作出反馈测试回答时,写出有疟疾或没有疟疾。在这时关于脚本的最终形式、它将运行的工作平台、甚至用于与病人通信的自然语言等都不知道,2.脚本产生在脚本产生阶段,产生脚本是一个记录在软件中的相对较小的诊断算法。在这个阶段中,目标是让该脚本自动体现设计者解决诊断疾病(如疟疾)或其它医疗问题的方法。脚本包含有数据和程序去产生第一个问题、对该回答进行权衡、用该回答去产生另一个问题,这样直到脚本能最终告诉它的使用者结果是或不是疟疾、以及相应的可信度。
要注意脚本不是一个可独立应用的、能被真正的病人运行的程序。脚本最好仅知道单个主要的疾病,如疟疾,而不诊断其它医疗问题,如痛风或哮喘这样的疾病。
这个脚本将会成为一个大约有40000个脚本的脚本数据库,有相当不同的形式和格式。现在脚本必须被翻译成适当的人类语言(德语、西班牙语)、增补适当的错误处理功能、形成适当的程序语言(C++、Java、HTML)、格式化成适用于适当的目标媒介(PC机、Mac机、电话、局域网、广域网、因特网〕、并与支持系统(数据库,中间函数,病人记录,通信记录〕连接。
下一步,脚本经历在试验台上的扩展测验,即给脚本送入各种各样的成组的病人的回答,用已知道的能采用的诊断,去证明这个脚本真的产生合适的输出。
最后,脚本将被装入一个产生系统。它可以存成一个大规模的脚本数据库,或包装成一组脚本被写到CD-ROM上或经由因特网送到医院。不管脚本库用什么样的形式,脚本都将应用脚本管理软件,而被编号和注册。在这个阶段的最后,脚本最后正式运行医疗诊断系统得以能够用来为真正的病人的真正的问题作真正的诊断。3.脚本运行在脚本的运行阶段,脚本迟早要被真正执行。当然,与病人的对话并不从关于疟疾的诊断脚本开始。一个为公众开放的医疗诊断系统,在用于任何医疗诊断之前,显然有许多管理任务要完成。首先,我们不希望在申请一个口令和社会安全号时,耽误了病人的病情。所以系统很可能为所有进入MDATA系统的人,首先运行急救室(ER)子系统。该急救室子系统由一些脚本组成,去确定病人是否有生命受威胁的情况而需要立即的“第一救助”治疗或建议。“是医疗急救吗?”、“病人是否有在呼吸?”、“病人在流血吗?”是几个急救室系统要提问的问题。
在系统排除该急救情况后,系统慢慢地进入确定病人和决定主要疾病。然后系统调用脚本路程子系统,它的工作是决定病人的一般问题范围。根据这个信息,脚本路程系统下一步选择一种适用于病人的主要疾病的最高级脚本的次序。例如,对于发烧,在较明显的阑尾炎、肠道感染、食物中毒的脚本已指明“无诊断”后,该路径脚本可以最后试定为疟疾。现在,最后放送在这个文件中我们已开发出的样本疟疾脚本。
脚本不是自己能运行的程序。脚本是数据串,它通过“脚本引擎”运行,去搜索用于问病人的下一个问题的脚本,并把问题格式化以便于传送(给屏幕、电话或因特网地址)。病人的回答也被脚本引擎获得,被格式化后用于脚本,并用作从脚本中选择下一个问题。脚本和它的脚本引擎的该互相作用可以被认为是病人的医疗记录、到目前为止在这个对话期间提供的信息、和甚至一些决定下一个问题中间函数。在脚本的最后,这个程序把控制权回到热带疾病路径脚本上,并有效地显示“这个病人的回答表明疟疾的权重有1350超出1000”,或“这个病人的回答仅有420超出1000,所以我排除疟疾的可能”。该叫做症状脚本的路径脚本现在的首要决定是进入另一个诊断脚本,或者决定给使用者一些回答,例如“病人的回答表明仅有275/1000的可能有热带疾病”。脚本的特性基于时间的诊断脚本基于时间的诊断脚本的概念把DSQ诊断脚本扩展到了时间范围。除了仅有一个诊断脚本,脚本的设计者现在能提供多个脚本,例如每小时一个脚本进入疾病程序。根据设计者的最佳判断,从症状的开始计时起经过一段时间产生一个脚本。例如产生一个心肌梗塞脚本用一个小时或更少的时间作为一个时间段,而疟疾不是这样。在运行时,诊断系统采用与病人的情况最接近的诊断脚本。症状脚本有隐含症状,它给与预言的模式相配的疾病添加额外的加权值。
系统询问病人在什么时候症状开始,部分地根据这个信息,从基于时间的脚本组中选择适当的脚本。一旦脚本被选定,就执行这个脚本。即,基于时间的脚本组的每个脚本可以有某些不同的症状和加权值,使得设计者建立基于时间的症状,为那些时间模式与病人的相配的疾病添加额外的加权值。当脚本引擎运行时,这些加权值被它自动增加。要注意这些基于时间的症状将是隐含症状,下面将详述。
每个算法的设计者必须在(例如)每个小时随着疾病发展控制、分配或计算这些问题和适当的值。然后当病人查询这个系统时,第一个要问的问题是“什么时候(或多长时间之前)您的症状开始?”,然后那个病人将与症状开始时起消逝的时间最相近的脚本相联系。隐含症状要注意“症状”是指可知的关于病人的任何数据项,直接或间接地包括名字、年龄、性别等。一个隐含症状是一个根据一个或多个其它症状的有或无而构成的症状。隐含症状的概念允许脚本的设计者去告诉脚本引擎,任何给出的症状(或症状组)含有或不含有一个或多个其它症状。这让设计者把客观世界的关系具体化成基于列表脚本,然后它让LB引擎进行逻辑推理,得以从列表中除去不必要的问题,而使得脚本更准确。
作为一个明显的例子,不用向男性病人问一个与女性生殖系统相关的问题。一个人类医生肯定知道这一点,但必须告诉脚本引擎。脚本的设计者简单地制作了一个如下形式的症状列表如果症状A,那么症状B。例如“病人是男性” 隐含着“病人不是女性” 和“病人有过阑尾切除术” 隐含着“病人已没有阑尾”。应用逻辑运算符,如AND、0R或NOT,就能建立起用相当少的问题引出很复杂的症状关系。隐含的症状被列在源脚本中,象一个“如果A,那么B”类型陈述的表。无论何时脚本引擎从病人那里接收一个新的症状,它也检查隐含症状表,去查明是否有任何其它的症状被隐含。并发症状并发症状是指这样的症状在任何假定的病人中,当某组症状同时发生时,它们的存在有特定的诊断意义。在一个DSQ基于列表源脚本中,每个症状对于诊断中的疾病有一个专门的加权值,但某组症状发生时,可以给诊断提供额外的加权值。例如,典型地诊断疟疾是从怕冷、发烧和盗汗的发生开始的(盗汗是由于疟疾发作时病原体进入血液循环而引起的)。怕冷、发烧和盗汗的单独发生不足以诊断病人为疟疾,但所有三个症状发生时,定会引导一个关于疟疾的查询。并发症状的概念支持该内在的引导,用这样一个陈述举例“有怕冷”AND“有发烧”AND“有盗汗”意味着“可能是疟疾”。并发症状在确定一个并发症时也有重要作用,例如,由于该特定的症状集合经常同时发生,对于公众来说,它们有其自己的名称,如爱滋病(AIDS)。脚本的设计者能用并发症状去肯定一个并发症,这对于他/她来说也是很重要的。
三.知识获取详情对于一个脚本来说,知识获取的初始任务是确定将被划进脚本中的疾病、为每种疾病安排次序、和分配给医疗专家去为他们的已安排的疾病开发脚本的各个部分。然后每个医疗专家产生各种疾病所需的合适的列表。这能被概括为如下内容·确定涉及的疾病的范围;·列出疾病和它们的症状;·给疾病和症状安排等级、次序和加权值;·设计用词恰当的和已加权的问题,它将引出症状;·把疾病、症状和问题列表格式化;·预测这些列表,使用专门为这目的而开发的测试工具;和·把列表写成文本文件,用任何能对ASCII码进行处理的文字处理器。
该基于列表的处理方法开始于一组联动列表,它获取用于诊断一个特别的健康问题的要素。在这个阶段中,医疗专家用多个列表的形式记录下他们的诊断技术和技巧。为了做这工作,专家最好能使用市场上能买到的字处理软件,它能产生一个ASCII码输出文件。
这个用作脚本的ASCII码列表包括三种类型的列表,归纳为如下·一种疾病列表,它确定脚本将考虑的所有疾病,并按照为诊断而被考虑的顺序把它们分等级;·一种用于每种疾病的症状列表,它确定症状并给每个症状定一个加权值,去确定它对诊断疾病的提供;·一种用于每种症状的问题列表,它确定一个或多个将引出病人的症状的已加权的问题。
为自动医疗诊断的目的,医疗诊断数据被组合成分级归类,分类是根据疾病有症状,和症状将通过提问从病人引出,这样的一般概念而进行。
一种“疾病”是指一种需要诊治或维护的健康状况,例如病痛、烦恼、苦恼、状况、状态、问题、障碍、失调等。为了用一个假定的疾病诊断一个病人,MDATA系统从一组可能的疾病列表开始,根据病人的回答显示疾病,并从该疾病归纳出一组诊断列表。
一种“症状”是MDATA系统有的关于病人的任何信息。这些包括·病人的身份(如名字、地址、HMO、年龄、性别);·病人的病史(如以前的病痛、父母的健康状况、最近到国外旅行的情况);·以前进入MDATA的情况(如病人的疾病和发展史);·身体疾病(如主要器官的病症)和亲自或辅助的身体检查练习的结果;·化验和测试结果;·症状、现象、外观、形状等。为每种疾病准备一组症状列表。在给定症状后为每种症状定一个加权值,它代表病人有该症状的可能程度。为了简化计算,MDATA系统使用一个阈值1000去判断这个被诊断的疾病,虽然也可以用其它阈值。系统也用一个阈值去正式地宣布病人没有该疾病。界内阈值和界外阈值都可以根据敏感因子组改变。这就允许按规格改制的阈值水平,例如为个别病人定制。下面将详细讨论这个敏感因子组。
实际上,在给定症状后,加权值是诊断中的医生认为是该疾病的意愿的尺度。在给定症状后,加权值也被用作病人有疾病的条件概率。如果方便的话,这也能对该症状进行贝叶斯概率分析。
一种症状由一个或多个问题引出,经常与如何回答问题的信息和说明交替出现。因引出症状所需而设置的节点被叫做一个“流程”,因为它典型地涉及一组分叉流程的问题,经常被画在一个小的流程图上,用它来说明与病人的对话是怎样进行的。
为了把由医疗专家开发出的诊断数据装入MDATA系统,数据必须被组织和格式化。为这个目的,使用一种文本文件,已开发出一种文本文件格式。虽然最好使用ASCII字符码,也可以使用任何定义明确的文本字符码,如,扩充的二-十进制交换码(EBCDIC)。
一个脚本包括如下所示的多个项或数据组A.疾病将根据已加权的症状而被诊断;B.症状将被流程引出或被其它症状所包含;C.隐含逻辑性地连接症状;D.流程由通过节点的路径构成;E.路径访问问题的节点;F.文本告知和/或建议病人;G.问题为一个回答而询问病人;H.按键从病人发出一个具体的回答。这些项是以下关于脚本“源”或文本文件的段落的部分。标题部分标题部分中包含关于整个脚本的数据,如脚本的格式和构成病人的主要疾病的症状组。疾病部分疾病部分列出被这个脚本诊断的疾病、它们的症状和对于一个诊断的症状的加权值。当脚本在脚本开发阶段运行时,脚本开发工具选择疾病中的一个当作下一个疾病,然后选择那个疾病的症状中的一个当作下一个症状。哪个疾病和症状被选成下一个,这要根据被设计者选定的运行选择而定。缺省次序是这个段落中疾病和它们的症状的列表顺序。疾病_名称疾病名称是为每个疾病所定的唯一的符号,用作识别该疾病。它仅用于系统内部,而病人将永远看不到。ICD-9_码一种专门的编码,被医疗专家用于识别疾病。形式_标题疾病的形式标题。该“形式”标题被用在这里是因为用于疾病的普通名称和简称会在将来的格式中增加。症状_名称症状名称是诊断图解或疾病的“指印”的部分。症状的定义将在症状部分中详细说明。在DSQ列表内容中,一个“症状”是一个已被假定、承认、引出、隐含的特殊而详细的事实。设计者不用为症状定义任何数据项。如果症状对于设计者是有用的,那么它可以包括非医疗的事实,如名字、头衔和病人的序号等。这意图是让设计者自由地去表示他/她的医疗经验,通过定义基本症状并以任何适当的方法把它们组合起来。
为了设计一个症状,设计者可以想象一组已加权的问题,它将唯一地认定或否定这个症状。如果这没问题,那么设计者根据它的问题和回答来定义这个症状(在症状部分中)。如果症状太复杂,设计者可以把症状分成几部分,把每个部分当作一个症状,并提出关于这部分的问题。设计者可以让病人分别建立每个部分,然后使用推理段落中的推理机制去构建主要症状。症状_加权值这个症状加到疾病的总分数上的数量。从技术上来说,这个数量可以是从-10000到+10000的任何值,实际上它可能是一个小的正整数。在写完后,脚本引擎把加权值当作给疾病“打分”的一种方法。当一个症状存在于病人中时,脚本引擎把这个症状的加权值加到这个疾病的总分数上。当该疾病的分数达到1000时,脚本引擎把该疾病划入界内。
简单的加权值的算术相加并不表示该表明症状对疾病存在的具体方法。给设计者的一种方法是先估计一组加权值,执行这个脚本,观察疾病的分数是如何随着每个问题和回答而变化的,然后回去“重新平衡”这些症状。
一种“并发症状”技术对于设计者在开发加权策略中是很有用的。如果有两个症状A和B,如果一个病人同时存在这两个症状,那么给比单独存在时更多的加权值,然后一个人为的第三症状C可以不言而喻地被定义为A和B,并给该疾病额外的加权值。症状C没有相关的问题;这是一个内部的“寄生”症状,它仅根据其它症状的存在或不存在,用来增加或减少加权值。症状部分症状部分列出并说明脚本的其它部分提到过的所有的症状。为每个症状,这个段落确定用于引出症状的问题流程。症状_名称症状名称是为每种症状所定的唯一的符号,用作识别在这个脚本的其它部分中的该症状。它仅用于系统内部,而病人将永远看不到。流程_名称“流程”这个词是用来描述一个特别的已加权的问题组的,以一种能被画成流程图的特定次序的问题。这样一个流程代表单个问题组。因为一个流程能引出多个症状中的一个,多个症状将典型地确定同一个将被使用的问题流程。某些症状(如主要疾病症状)没有相关的问题流程。隐含段落隐含段落列出症状间的逻辑推论,使得脚本引擎知道那些隐含其它症状。这个段落的每行确定一个或多个症状,它们一起隐含另一个症状。即每行为该形式的逻辑公式给出参数如果症状A和症状B和症状C,那么则有D。症状隐含能组成链,使得一个被隐含的症状能单个地或与其它症状结合地隐含另一个症状。
这个段落的一个用途是建立“并发症”症状,使得病人的一个特定的症状组将自动确认一个单独的集合症状。该组合症状也能用来增加(或减少)额外的加权值,如果一个特定的症状组存在的话,例如,将允许病人同时存在的多个症状“并发”。流程部分流程部分列出脚本中的所有流程,并确定能通过流程引出的问题和症状的次序。“流程”是“问题流程图”的缩写。它可被想象成一个复杂的问题,它将建立起多个症状中的其中一个。熟悉基于分支脚本的读者将认为该流程能起容纳或引入一整个基于分支脚本的作用,得以返回多个回答码中的一个。
一般情况是需要向病人提出多个问题去从病人引出一个特定的症状。例如,需要一些基础问题(“您曾吸烟吗?”)作铺垫,随后是很专业的问题(您已吸了总共多少年时间?)去精确地确定病人的症状。一整个流程可能容纳有20个关于吸烟的问题,并可能引出多个症状中的一个,例如从不吸烟;偶尔吸烟;已吸了20年且还在吸烟;和吸过10年烟,10年前不吸了。
根据流程从一个节点到另一个节点,流程图中的每个节点被编了号。这些路径用于每个节点将执行动作。问题部分问题部分确定下面提到的问题的详情。详情包括序言、实际问题、能被病人按的按钮(在电话面板上)、和(用于图象接口)用作每个回答的按钮标志。序言_文本序言是在问题提出之前读给或显示给病人的文本。它可以在前面的问题后,继续介绍一个新主题,确定一些项目,提供病人关于为什么要提问题,和如何回答问题的信息。这里仅给出文本的名称;这个实际的文本在文本段落部分给出。没有为一个问题的序言,那么这被标为0。问题_文本问题文本是实际的问题。序言可能是10行或100多行,问题典型地很短,甚至是一个点,并通过点或按这些键,引出一个很具体的问题。有效键一组有效键告诉诊断机病人可以按或点那一个键。键1...键N这些是键的标志,仅在脚本引擎的图象显示版本中使用。它们告诉脚本引擎如何给每个按钮作标志,例如是、非、和不确定。文本段落文本段落列出被其它段落中的名称定位的所有文本项的实际文本,例如序言、键标志和问题文本。通过给定每个文本唯一的名称,并列出文本段落中的文本,设计者能把同样的文本用在多个地方。
把所有的为病人服务的文本放在一个位置,也简化了脚本的自动处理,例如记录用于电话网的文本或格式化用于屏幕显示的文本。通过把它的文本段落代替成其它语言相关的文本,一个脚本可被翻译成外语。
参见图3a,下面将说明用于产生一个DSQ脚本的离线程序280。从一个操作284开始,医疗知识被收集和组织成列表文件。用作列表文件的数据是为一个或多个医疗设计者282而收集的。程序284有两部分。第一部分典型地是由脚本的调度员或管理设计者完成,去确定疾病,而第二部分用于收集脚本中关于每个疾病的疾病知识。用于收集疾病知识的部分典型地由许多在他们各自的领域内的医疗专家完成。程序482的确定疾病的部分将结合图4a作进一步说明,而程序284的收集疾病知识部分将结合图4b作进一步说明。程序284的输出是电子文本,如一个ASCII码文件。这个电子文本以DSQ列表的形式存在,如疾病、症状和问题列表286。附录中包括一个用于疟疾的示范脚本。这个脚本是一个DSQ列表的代表。
关于一个脚本的基于时间的DSQ的图象示范在图3b中显示。显示了对应时间T1的示范脚本320和对应时间T2的脚本322。在两个脚本中的每个都包括一个疾病列表324、一个症状列表326和一个问题列表328。这个图想要说明疾病、症状和问题列表的层次,并仅是示范性的。要注意一个疾病可以指向,由其它症状限定的症状,而症状可以指向由其它症状限定的问题。这样,症状和与它们相关的问题可以被多个医疗设计者重复使用。
现在回到图3a,程序移到状态290,它把DSQ列表变成电子文本的格式,并通过使用脚本数据开发工具处理它们。脚本编辑器292仔细地使用脚本数据开发工具去产生一个MDS文件。程序280可以反复使用脚本数据开发工具和脚本编辑器去产生一个最终的MDS文件。在状态294,这个MDS文件被一个MDS数据库管理设备298写成一个MDS数据库300。这个MDS文件296最好是二进制格式的。该MDS文件的一个范例显示在图3a的296中,这个MDS最好包括一个序言数据部分、一个主疾病列表部分、一个主流程部分和一个主文本列表部分。在另一个实施例中,医疗设计者可以用医疗设计语言编写脚本,或节点和分支,如在状态302显示的那样编写。可以包括编辑器在内的其它脚本工具,在状态304中显示,去产生一个MDS 296。
现在参见图4a,将说明收集和组织医疗知识程序284中的确定疾病程序350。程序350典型地将由脚本调度员完成,虽然使用MDATA系统的其它医疗专家也可以完成这些任务。程序350最好不是由计算机而是由脚本调度员完成,调度员可以使用计算机去辅助完成下面的步骤。从一个起始状态352开始,程序350移到状态354,那里确定与当前的脚本相关的主要疾病。当正在说明他们要查询的主要问题时,主要疾病包括病人最初提供给系统的症状。进行到状态356,脚本调度员确定一组将被当前的脚本诊断的疾病列表。这些疾病将提供一个关于主要疾病的诊断。包括在列表中的疾病的名称、一段叙词和该疾病的疾病国际分类(ICD-9)码。前进到状态358,根据在普通人口中,如病人所在的某个国家或国家的某个地区中,发生的可能性,把疾病分级。移到状态360,脚本的调度员根据急诊和/或疾病的严重程度安排优先级。根据已确定的优先级,脚本引擎可以直接去检查被安排有急救和严重指示的第一种疾病。继续到状态362,脚本调度员然后把用于当前脚本的疾病划分或分配给一个或多个医疗专家进行进一步开发。使用一个计算机网络,如因特网,和DSQ列表数据库,多个脚本可以被同时开发。疾病的设计者可以通过制作对于所有其它设计者经由数据库和网络都能获得的问题和说明,而能够并行地工作。该可能性允许快速开发脚本。程序350在结束状态364结束。
现在参见图4b,将说明收集和组织医疗知识程序284中的获取疾病知识部分380。程序380典型地也不是由计算机而是由医疗专家或使用计算机去实际地收集关于一种特殊疾病知识的专家完成。下面的步骤由疾病专家完成,象在图4a中的状态362那样由脚本调度员安排。
从起始状态382开始,程序380移到决定状态384,那里医疗专家确定脚本是否最好收集成象一个基于时间的脚本。即对应有序的时间间隔的许多脚本形成一个脚本系列,它用于跟踪疾病随时间的变化。如果被确定是一个基于时间的脚本,那么程序380移到状态386,那里确定在脚本系列中的脚本间的时间间隔。例如,脚本设计者可以决定在48小时内的每两个小时产生一个脚本。在完成决定脚本系列的时间间隔时,或如果脚本最好被显示成单个脚本,那么程序380继续到状态388,那里医疗专家为每个分配给他或她的疾病确定界内阈值的分数和界外阈值的分数。移到状态390,医疗专家为每种分配给他们的疾病确定一组相关的症状。症状列表包括症状名称、一段叙词和至少一个加权值,如下面将说明的。继续到状态392,医疗专家确定任何相关的后响应关系和被这些关系确定的症状。该后响应关系可以包括同时或并发关系,那里两种或多种症状的同时发生可以为诊断一种疾病提供比分别发生的症状的加权值的总和更多的加权值。一种顺序关系是指一个症状跟着另一个症状发生,这可以为诊断一种疾病提供比分别发生的症状的加权值的总和更多的加权值。一种顺序关系的变化是指疾病的开始或结束的次序的变化,提供与单独出现不同的加权值。隐含的关系是指一个症状的出现意味着另一个症状的出现。症状设计者还可以为已确定的症状和进一步作了后响应处理的症状建立随时间的关系。该后响应关系还涉及症状的分类处理、PQRST矩阵分析或症状严重程度分析。该PQRST矩阵是N维的矩阵,以疾病的不同属性或方面来分维。例如该PQRST矩阵可以有22维。
进行到状态394,医疗专家为每种疾病症状设定一个加权值。因为症状有一个相关的范围,如疾病的严重程度或其它类型的症状的严重程度,所以医疗专家可以设定与症状的严重程度相关的加权值的范围。加权值既可以是正值也可以是负值,它决定一个正或负的分数。移到状态396,医疗专家为每个症状设置一组问题节点,去引出或决定这个症状。一些症状可以被一个问题决定,而多数症状需要许多问题去引出症状。因为症状需要许多问题,所以在状态397为问题的可能回答设定加权值。这样,该类型的症状有一定范围的相关的加权值。前进到状态398,医疗专家为每个问题流程的问题节点写针对问题节点的文本,得以为病人提供介绍或解释、通告、建议和实际的问题。这些介绍可以确定被请求的内容(一个回答组)的值的范围或格式化这个期望的回答的其它方法。这些介绍和说明将帮助病人知道问题是关于什么的、为什么提出这个问题和为可能的回答设置阶段。
设计者将为每个症状组成一组问题流程,它用于引出症状。这个设计者使用的流程也可以是另一个医生的问题流程。例如,假说症状是抑郁症,一个医生可能问“您抑郁吗?”。这可以被叫做“抑郁_问题_1”。假说这个设计者不喜欢它,它太简洁并不能真正获取想要的东西。所以这个设计者在问题数据库中进一步寻找。设计者可能找到并看到“抑郁_问题_流程_2”。这个问题流程精巧得多。在这个流程中,为了回答问题“您抑郁吗?”,这个医生已设计了一个10点的问题列表。这些子问题可能甚至有其它问题在数据库中。在这个问题流程中,病人被问10个问题。每个问题分别被加权,并在回答所有问题后,得分是它们的总和,并且如果分数达到了由问题的设计者确定的阈值,那么这个医生将认为这个病人有抑郁症。
在另一个范例中,假说一个设计者想要问一个关于迁移晕船的问题。这个设计者检查问题库。这个设计者可以发现50个关于晕船的不同的问题。一个问题问“您晕船吗?”。这个问题不被这个迁移设计者接受。另一个设计者有一个问题流程,包含10个已加权的问题。如果它们的分数达到了设计者预先确定的阈值,那么那个医生认为他的病人晕船。这个迁移设计者虽然几乎喜欢这样,但是想要改变已加权的子问题中其中一个问题的加权值。在这个情况中,这个迁移设计者把这个已修改了加权值的新问题存为“晕船_问题_n+1”。现在当这个迁移设计者使用这个新版本或其它版本的晕船问题,它当然将在确定不同的疾病中被分别加权。
如果问题的不同加权值在问题流程中是不允许的,那么所有的问题将被确定为相同的加权值。但是当一个疾病设计者想要看看,假说腹部是否受伤,会问病人做一串动作,例如“请咳嗽。您的腹部痛吗?”。如果病人回答说“是”,然后这个疾病设计者请病人按压他的腹部并问是否痛。这个疾病设计者通常提问或请求病人完成许多这样的动作去建立这个腹部受伤的“症状”。然而,在确定腹部受伤中这些问题并不是都同样重要的。如果当病人在按压他的腹部感觉痛时,这比咳嗽的动作更有意义。
问题节点在状态398完成后,在决定状态400医疗专家决定是否为基于时间的脚本需要另一个时间段。如果不需要另一个时间段或如果当前的脚本不是基于时间的脚本,那么程序380在返回状态402结束。然而,如果在一个基于时间的脚本中需要另一个时间段,那么程序380回到388,为脚本系列中的另一个时间段重新运行步骤388直到400。
四.脚本产生详情在MDATA系统的内部,基于列表的医疗诊断数据象脚本那样储存。这些文件是人类医生和正被查询的病人之间的诊断接口。在运行时,一个MDS文件通过驱动脚本引擎而“运行”,它是一个安装MDS文件并根据编排在文件中的数据和命令运行脚本的普通程序。诊断的数据以疾病、症状、问题和文本节点列表的形式储存。
一个面向列表的MDS文件的内容反映ASCII码列表文件的内容。它们之间的主要区别是文本文件数据象特征串的文本行的段落那样储存,而MDS文件数据是以二进制整数的列表组成。第二个区别是MDS文件数据被存储成能互相参考,得以支持联机存取这些数据。
这个MDS文件最好格式化成一个很大的32位二进制整数的矩阵。然后这个大容量的矩阵被分配成长度不定的数据块。因为文件中数据块的位置是它自己的号码,所以它可以象一个数据块连着另一个数据块的数据项那样使用。就物理意义讲,这些数据块对如何程序语言或操作系统来说是独立的,它能传送到任何能够存储32位数的文件的计算机硬盘中。就逻辑性讲,这些数据块能以任意的方法嵌套和连接,去形成象环接的列表、堆栈、排列、树形结构和网络那样的数据结构。MDS文件被格式化成叫做“主列表”的多个段落块,如下所述·标题数据,·主疾病列表,·主流程列表,·主问题列表,·主症状列表,·主文本列表。
为了准备一个MDS文件,ASCII码列表文件被读出并通过脚本编辑器被转换成一个MDS文件。这个程序包括逐行读出ASCII码文本文件,编辑关于MDS输出文件的适当的段落并产生互相参考的列表去快速搜索。因为某些符号在被定义之前就可以使用,对话程序必须两次通过这个文件。在第一次通过过程中,所有行都被读入,被转换成MDS文件块,而它们的符号被存在一个表中。在第一次通过过程中,符号被它们的实际的块名称代替。当然,可以使用其它编辑方法。
在脚本被编辑后,这个脚本的设计者检测这个脚本,去确定它是否如计划的那样工作。如果不是,那么例如脚本的设计者可以调整症状/问题的加权值、仔细推敲用于问题节点的词语和段落、和修改任何逻辑和医疗的错误。然后脚本设计者将重新编辑和运行这个脚本,直到它如计划的那样运行。
参见图5,现在将说明脚本的编辑器292。以电子文本格式,如ASCII码,存在的DSQ列表通过使用脚本数据开发工具被收集,然后被脚本编辑器292处理。从起始状态420开始,脚本编辑器为脚本的完整性、一致性和统一性而处理这个源脚本。在这个状态中识别语法错误。在纠正了所有问题后,编辑器进行到状态424,并把这个脚本从源格式转换成被储存的二进制的文件格式。继续到状态426,脚本编辑器292扩展这个脚本,用于存取在图2中已显示的各种MDATA数据库和MDATA基础机构或支持系统。脚本编辑器在返回状态428完成。
五.脚本运行详情概述当病人为诊断进入MDATA系统100时,该系统管理与病人接触的初始数据、识别这个病人、决定病人需要什么服务、选择正确的MDS文件和开始运行脚本引擎。脚本引擎装入这个MDS文件并开始服从它的已编码的一个接着一个的命令。服从已编码的命令的结果是与病人的一次查询。在查询的最后,脚本命令脚本引擎执行适当的终端行为(更新数据库、关闭文件、记录这段对话)并最终把计算机的控制权还给MDATA系统100。
下面将说明使用MDS文件驱动脚本引擎去进行一个联机查询。为存取数据库文件、输出信息给病人、输入病人的回答和打印报告结果所需的这个支持操作由脚本引擎程序运行的基础操作系统执行。
基于列表的处理方法的运行时间模式产生一个面向列表的MDS文件。这意味着在每个步骤必须搜索疾病、症状和问题列表去决定下一个问题和脚本的动作。脚本引擎使用基于列表的方法比使用基于分支的方法要做更多的工作。
该MDS文件必须是一本关于人类疾病的医疗百科全书,它以从高级到低级的顺序存储从高级的疾病列表到用于引出某种疾病的一种症状的某个方面的单个问题。为了运行这样一种数据结构,作为一个脚本需要“转换”该结构,例如象给病人的有次序的问题串那样。为了在运行时间模式中做这工作,脚本引擎首先搜索MDS文件的主疾病列表去选择下一个将被考虑的疾病。然后脚本引擎搜索被选的疾病的症状的列表去选择下一个要提问的症状。然后脚本引擎搜索为被选的症状设置的问题去选择下一个被提问的问题。脚本引擎向病人提问题、获得回答、更新各种已加权的列表、并重复这个程序直到得到一个诊断或查完所有的疾病。所有的效果是产生脚本和病人之间的诊断对话,结论是一个诊断。
当脚本运行时,脚本维持病人的症状组象一个暂时的动态列表,被叫做“暂时”列表。每个新症状被记录在这个组中,并用作更新正在考虑的疾病的列表。病人的回答建立起一个健康状况的轮廓文件,被用作去选择下一个疾病和症状和问题。这个轮廓文件有许多用途·它用作更新所有正被考虑的疾病,去帮助选择下一个疾病;·它可以用作情形的静态比较;·它允许MDATA系统根据特殊病人的健康状况动态地选择问题串;·它允许MDATA系统中断一个脚本,以后再继续它,通过储存这个轮廓文件和在以后的时间重新装载它去继续这个脚本。
当脚本引擎开始时,它被供给一个联机病人和一个脚本(例如一个MDS脚本)。这个脚本引擎打开MDS文件去建立存取已编码的疾病、症状和问题的列表。它还打开病人的记录去获得病人的医疗历史和过去对话的结果,如果有的话。从这里开始,MDS文件在脚本引擎的命令下驱动这个查询到下一个查询步骤。在查询的最后,脚本命令脚本引擎去执行适当的终端行为(更新数据库、关闭文件和记录这段对话)并最终把计算机的控制权还给MDATA系统。
对基于列表的处理的说明感兴趣的方面是用于提问病人和建立一组对应一个诊断的症状的算法。这个算法由一个用于分析和更新病人的症状组的主循环构成,直到达到每种条件才终止这个循环。主循环包括以下一般步骤·分析病人的症状组,·选择下一个将被考虑的疾病,·选择下一个将被考虑的症状,·选择下一个将提出的问题,·提供给病人问题并处理回答,·根据回答更新症状组,·执行关于症状组的后响应处理,·循环分析病人的症状组。继续这个主循环直到由于某些结束动作如形成一个诊断、给出治疗建议或把病人转给另一个脚本,才终止这个脚本。
现在参见图6a,将说明用于操作诊断脚本引擎190的MDATA系统的普通构成。诊断脚本引擎190与MDATA支持系统440对接去获得与MDATA系统的许多数据库442和有与医疗界中的许多实体进行通信的能力。MDATA支持系统440包括在图2中显示的程序,包括注册程序210、登记程序212和诊断程序220。包括在MDATA支持系统440中的还有用于执行输入和输出的程序,给和从医生444、病人114和健康机构446如一个健康维护机构(HMO)输入和输出。MDATA支持系统440使用通信网102,前面已在图1a和1b中显示。已在图6a中显示的数据库442包括前面已在图2中显示的数据库和其它数据库,例如关于人类疾病的、药剂和药剂关系的、人类解剖学的、一种管理表的和疾病出现的地理分布的频率的数据库。该管理表是一种关于管理和法定“规则”的表,它让系统知道有多少信息可以为病人展示。
现在参见图6b,将说明在诊断脚本引擎的操作过程中使用的结构和输入和输出。根据从用户460的输入、从病人医疗历史的数据库254的记录和其它从MDATA中心数据库442中能获得的信息,MDS 296被从MDS数据库300中选出。另一方面,如果诊断脚本引擎190在病人的个人电脑上运行,那么当地用户的数据存储器184可以被接通,来代替存在中心数据库中的MDATA数据库。然而,实际上多数情况是把病人的医疗历史存在中心数据库中,原因如下记录的安全性;世界上任何地方的健康维护提供者,象需要分析、比较诊断那样,获取任何新的治疗方法,使得通过该系统病人能很快被告知,等等。
MDS 296被制作成能为诊断脚本引擎190得到,它执行病人的查询。诊断脚本引擎190可以把在病人的查询中接收到的信息写给病人医疗历史中心数据库254和当地用户的数据存储器184。在当前脚本的结论部分,或如果另外的脚本在运行,那么可以产生医疗诊断或建议462。这个诊断或建议最好报告给医生464、输出给用户466和存在MDATA中心数据库或当地用户的数据存储器184中。如果需要可以产生其它报告468。如下面将说明的,有这样的情况,诊断不必直接报告给用户,而为了以后进一步报告给用户,可以先发送给医生。
参见图7,下面将说明用于用户在与MDATA系统100的对话中的一般的最高级的程序480。程序480从起始状态481开始并移到状态482去识别一种急救情形。一组初始的(硬盘编码的)屏幕显示的问题被用来识别该急救情形。如果确定了一种急救情形,那么提供给用户适当的建议,如呼叫911。状态482和随后的状态484、486和488大体上在申请人共同申请的题为“计算机医疗诊断和治疗建议系统”的美国专利号08/176041中作说明。如果程序480确定没有急救情形,那么这个程序在状态484继续并安全地确认这个用户。象在申请人共同申请的专利中说明的那样,用户可以是一个病人或服务于这个病人的一个助手。口令、身份证号码、声音记录或其它类型的身份识别方法可能被使用。如果病人已正确地录入了该系统,那么程序480继续到状态486去执行任何需要的管理任务。进行到状态488,程序480存取MDATA医疗数据库(图2)和系统文件和软件。进行到状态490,进行与用户的联机查询。该联机查询最好由诊断脚本引擎程序490执行。然而,可以使用执行联机查询的其它方法,如运行一个程序或执行一个脚本。这个用户程序480在结束状态492完成。
现在参见8a,将说明诊断脚本引擎程序490。从起始状态492开始,诊断脚本引擎程序490进行到状态494去执行脚本路由功能。根据这样的输入参数病人的主要疾病的症状、从症状开始到现在的时间、病人的过去医疗历史、从任何其它脚本来的结果、或从当前脚本系列中较早时间的脚本来的结果,该脚本路程选择一个合适的DSQ脚本。病人的主要疾病的识别算法。主要疾病能被分成以下种类涉及解剖系统、病人的问题的起因,如外伤或感染、按字母顺序排列的主要疾病的列表、对应他们的疾病的ICD-9号码、或他们的主要疾病的MDATA目录号。在选出合适的DSQ脚本后,程序490继续到状态496去从脚本数据库300(图6b)取回被选中的脚本。在这时,诊断脚本引擎程序490要求DSQ列表脚本引擎500在执行与病人的查询过程中去使用DSQ列表。结合图9和11将进一步说明该DSQ列表脚本引擎500。
诊断脚本引擎程序490后处理DSQ脚本引擎在状态502的结果。各种类型的处理在状态502执行,如下面通过状态506到526的示范说明。可能在状态502执行的一个动作包括确定在界内疾病列表和界外疾病列表中的疾病的可信程度。在界内和界外疾病列表中的某些或所有诊断的可信程度可以报告给病人和/或医生。从界内和界外疾病列表中的诊断和相关的可信程度被编辑成一种差别诊断列表。确定诊断的可信程度的各种方法包括,例如查看表或敏感因子组的可信程度。敏感因子已在以前的申请人发布的专利,美国专利号5594638,中作了说明,题为“计算机医疗诊断系统包括重入功能和敏感因子”。由程序490执行的下一个动作根据在决定状态504确定的结果的类型而定。现在将说明各种示范的结果类型。在状态506,诊断脚本引擎程序490把病人委托给另一个脚本,如前面已说明的那样这个脚本是在状态494选出的。在状态508,程序490产生适当的医疗诊断或建议。移到功能510,这个建议被分配到适当的部分。结合图8将进一步说明功能510。在建议被分配后程序490在状态512结束。
在状态514,程序490执行一个特定的中间分析。诊断脚本引擎去研究在一种给定的疾病中一种特定的症状是如何随着时间变化或生成的。在状态516,程序490储存在脚本进入病人的记录的过程中收集的结果。在状态518,程序490使病人进入一个医疗信息库,它是MDATA系统100中的一部分。在状态520,程序490去排定暂时停止的脚本的以后的继续。典型地,当病人在对话中不能完成整个脚本时该情况会发生。在一种没有疾病达到界内阈值的情形中,诊断脚本引擎可能会把在不断减少的可能性中加权最大的一组疾病列表提供给病人。在这个情形中,在状态522,程序490可能排定一个重入对话去允许延迟一段时间并看看过一会是否会有诊断产生。该重入特征将在申请人共同申请的题为“计算机医疗诊断和治疗建议系统”中作说明。在状态524,程序490请求病人去完成测试和重新查询该系统。这个测试可以包括自检行为、图像形式测试(258,图2)或化验室测试(260,图2)。在状态526,程序490提供任何紧急结果给健康维护的提供者作为立即动作。程序490在状态512结束。
参见图8b,现在将说明该分配诊断或建议功能510。从起始状态511开始,功能510进行到状态512,那里根据一个或多个疾病或诊断达到阈值的情况收集到各种列表的结果。进行到状态515,功能510检查治疗表的适当程度和由该系统作出的该诊断的当前的治疗方法。进行到状态517,功能510确定谁是该诊断或建议的接受者。这部分通过查询管理齿形表519实现。根据各种因子,如病人住在什么国家,管理齿形表确定能告诉病人的信息的类型。作为查询管理齿形表519的结果,建议或诊断传送给病人114、医生444、管理维护机构446或其它可以正式存取或有必要知道这些医疗信息的实体521。有很多信息可以与病人共享并必须与病人的医生共享。例如,什么在界内和什么在界外,和什么是病人的特定的差别诊断?即在病人回答所有问题后,可以为所有不同疾病的分数分等级。这对于医生来说是很有帮助的。该管理齿形表519使用在病人的记录中能获得的信息,如病人的邮码或电话区号,去识别他们的住址。
参见图9,现在将说明DSQ脚本引擎程序500。从起始状态530开始,程序500进行到状态532去存取被选中的由诊断脚本引擎传给它的DSQ文件。进行到状态534,程序500初始化被脚本引擎使用的暂时列表。暂时参见图10,程序500初始化症状暂时列表522把它清除,并初始化疾病暂时列表550使它有主疾病列表324中的所有疾病。在这时,程序500选择疾病中的其中一个被处理,然后选择被认定是这个疾病中的一个症状。为了确定病人中这个症状的存在与否,程序500继续到状态536去选择症状的第一个要问病人的问题。在状态538,程序500向病人提出问题。移到状态540,程序500接收病人的回答并根据这个提出的问题检查他们的回答的正确性。然后在状态542病人的回答被用来更新这个DSQ暂时列表。
进行到决定状态544,程序500确定是否达到了脚本的诊断或结束。如果还没有,程序500进行到状态546不是去选择在当前的症状中的下一个问题,就是去处理用于当前疾病的下一个症状,如果用于当前症状的所有问题已被提问了的话。程序500在状态538到546之间循环直到脚本达到结束、获得一个诊断、用户请求脚本被终止或脚本引擎确定这个脚本必须结束。当达到这个诊断或结束时,程序500不是在状态541返回这个诊断、在状态543把病人委托给不同的脚本、在状态545推迟当前的脚本,就是在状态547结束当前的脚本。程序500在返回状态548结束。
现在参见图10,将说明在DSQ列表脚本引擎500的运行操作过程中使用的列表的一部分。根据用户的输入460和从症状开始到现在的时间,这个诊断脚本引擎490的脚本路程494(图8a)确定一个脚本,把它传送给DSQ列表脚本引擎500。从病人的医疗历史254来的当前病人的记录也被脚本路程494使用。使用从这个脚本路程接收到的医疗诊断脚本,DSQ列表脚本引擎500存取主疾病列表324。主疾病列表中的疾病被复制到疾病暂时列表550。在DSQ列表脚本引擎500的操作过程中的适当的时间,从当前疾病的主症状列表326来的症状被有选择地复制到症状暂时列表552,将结合图12作说明。当在病人的查询过程中症状被确认时,症状的加权值和/或用于症状的问题的加权值将被加到在疾病暂时列表550中的当前疾病的分数上。当一种特殊疾病的分数达到界内阈值时,该疾病被移到界内疾病列表554中。另一方面,如果当前疾病的分数达到界外疾病阈值,那么该疾病被移到界外疾病列表556中。被确认的症状、界内的疾病、界外的疾病和既不在界内也不在界外的疾病都可以被存在病人的医疗历史254中。在一个脚本完成时或在一个终点时或在脚本过程中的检查点时,剩在疾病暂时列表550中的疾病也可以被写到病人的医疗历史254中。另一方面,病人的症状和疾病信息可以被写到当地用户的数据存储器184(图6b)中,代替中枢病人医疗历史254。
现在参见图11,下面将说明DSQ列表脚本引擎500。这个说明将提供比结合图9提供的脚本引擎程序概述更详细的内容。从起始状态580开始,脚本引擎程序500进行到状态582,那里从脚本主疾病列表324(图10)初始化疾病暂时列表550。移到状态584,这个脚本引擎程序从当前的和/或以前的病人对话中存取病人的数据。脚本引擎程序500使用MDATA支持系统440(图6a)和数据库442去获得病人的数据和任何其它需要的数据。另一方面,病人的数据可以从当地用户数据的存储器184(图6b)中取回。
进行到状态586,脚本引擎程序500选择将被考虑的疾病。可以使用各种方法去选择被考虑的疾病的顺序。例如,最紧急的疾病可以首先被考虑,跟着是严重的疾病,然后是一般疾病。另一方面,或者结合该紧急/严重模式,将被考虑的第一种疾病可以是病人所在的人口中最普遍的疾病。该脚本引擎程序可以使用电话号码、邮区号码或病人的历史记录中的住址信息的其它来源,去确定这个人口群或病人所在的地址。一旦这个程序已经开始,另一种选择疾病次序的方法采用有最高的症状加权值的该疾病,例如该最接近于被诊断的疾病。这个脚本的调度员最好把用于当前脚本的疾病安排成它们将被考虑的顺序。在确定了当前将被考虑的疾病后,脚本引擎程序500进行到“选择将被考虑的症状”程序588。程序588为当前的疾病确定将被考虑的这个症状,将结合图12作进一步说明。
脚本引擎程序500在决定状态590去查看被选中的症状是否空标志,它可能是在程序588的运行过程中设置的。如果这个对应当前疾病的被选中的症状是空标志,那么程序500前进到决定状态616,去确定是否有要考虑的其它疾病。然而,如果这个被选中的症状不是空标志,那么脚本引擎程序500进行到状态592去选择问题流程,把它提供给病人。与每个症状相关的是一个问题逻辑流程,它引出症状。一个逻辑流程可以当作一个“复杂的问题”,例如,一个问题由多个问题构成并能产生多个回答中的其中一个。最好选择这样的问题流程,例如,它能产生一个回答,并包含有当前有最高的可能划进正在考虑中的疾病中去的症状。前进到状态594,脚本引擎程序500然后执行当前流程的节点。进行到状态596,脚本引擎程序500把流程节点的问题部分提供给用户。每个问题最好包含有一组信息文本、命令文本和一个问题。为了提出问题,这个脚本首先把信息文本输出给病人,然后是命令文本,最后是问题文本。问题文本向病人指明在这时期望一个回答。
继续进行到处理回答程序598,这个脚本引擎处理从用户来的回答。下面将结合图13进一步说明程序598。该流程节点最好是下面三种类型中的其中一种症状、问题或程序。脚本引擎程序500在决定状态600确定流程节点的类型。如果节点类型是问题或程序,那么脚本引擎程序500移到状态594(问题循环Q)去执行下一个流程节点。然而,如果流程节点类型是症状类型,那么程序500进行到状态602,根据从病人那里接收到的回答,去更新症状暂时列表552(图10)。根据这个回答,为每种症状分配一个加权值。另一方面,如果当前症状使用多个问题,它们的某些问题有相关的加权值,那么对应当前问题的加权值(如果有)是对应当前症状的累积值。
当DSQ脚本获得一个症状时,它更新所有有症状的疾病。即,从病人来的单个回答会改变正在被考虑的所有疾病的症状的加权。这“促进”一个或多个疾病更加接近这个诊断的阈值。
进行到功能604,脚本引擎程序500执行后响应处理,去进一步更新症状暂时列表552。后响应处理的范例包括如果-那么关系、同时关系、次序关系和其它相似类型的关系。例如,如果症状严重性的值是9,那么加权值75可以被加到胆绞痛的诊断上,并且阑尾炎的诊断上减去加权值50。其它的后响应关系前面已结合图4b(获取疾病知识)作了讨论。在完成后响应处理后,脚本引擎程序500进行到更新疾病列表程序606。在程序606,脚本引擎根据已更新的症状暂时列表552更新疾病暂时列表中的分数并消去界内和界外的疾病。将结合图14进一步说明更新疾病列表程序606。
在程序606完成时,某些疾病被划进界内或划出界外,这样减少疾病暂时列表550(图10)的长度。然而,如果一种疾病既没达到界内阈值也没达到界外阈值,那么不从疾病暂时列表中移去该疾病。这样,在状态608,一个已更新的疾病列表和一个已更新的症状列表被剩下为检查对应疾病的症状的下一次迭代服务。移到决定状态610,脚本引擎程序500确定在症状暂时列表552中是否还有其它对应当前疾病的症状。如果还有,那么脚本引擎程序500根据与状态612相关的绝对值,选择有最大加权值的这个症状,并进行到状态592(症状循环S)去选择对应这个新症状的问题流程。然而,如果在症状暂时列表552中没有另外的症状,象在决定状态610确定的那样,那么脚本引擎程序500进行到状态614从疾病暂时列表550中删掉当前疾病。
进行到决定状态616,脚本引擎程序500确定对应当前脚本的疾病暂时列表550是否已空。如果不空,那么脚本引擎程序500移到状态586(疾病循环D)去考虑脚本中的下一个疾病。如果对应当前脚本的疾病暂时列表550是空了,那么脚本引擎程序500进行到决定状态618去确定脚本的结果的类型。在状态620,一种可能的结果是一个或多个疾病已被划进界内或已被划出界外。在状态622,另一种结果的类型是脚本引擎已决定委托另一个脚本或另一个业务。脚本引擎程序500在返回状态624结束并回到诊断程序490(图8a)。
参见图12,现在将说明这个在图11中提到过的选择症状程序588。从起始状态640开始,选择症状程序588进行到状态642去清除症状暂时列表552(图10)。进行到状态644,选择症状程序588存取在脚本主疾病列表324(图10)中的当前疾病。前进到状态646,程序588确定当前疾病的下一个症状。继续前进到决定状态648,程序588确定这个症状的问题流程以前是否已为这个病人运行过。例如,这个症状已在另一个疾病中或甚至在这个病人的另一个脚本中确定过。如果这个问题流程以前没有被运行过,那么程序588进行到状态650并把这个症状添加到症状暂时列表中。在把这个症状添加到症状暂时列表中后,或如果这个症状的问题流程以前被运行过,那么程序588移到决定状态652。在决定状态652,程序588确定是否还有其它对应当前疾病的症状。如果还有,那么程序588移回到状态646去确定当前疾病的下一个症状。
如果已不再有其它对应当前疾病的症状,并在状态652已确定,那么程序588继续进行,在决定状态654去确定症状暂时列表552是否已空。如果已空,那么选择症状处理程序588移到状态656从疾病暂时列表550中删除当前疾病。例如,如果对应这个疾病的所有症状以前在这个和那个脚本中已被考虑过,那么就发生该情形。在该情形中,选择症状处理程序588在状态658返回一个空的症状标志。回到决定状态654,如果选择症状处理程序588确定症状暂时列表不空,那么继续在状态660运行,那里症状暂时列表根据加权值的绝对值被分类。进行到状态662,程序588选择加权值的绝对值最大的这个症状。选择症状处理程序588在状态664带着这个被选中的症状回到程序500(图11)。
参见图13,现在将说明这个在图11中提到过的处理回答程序598。从状态690开始,程序598进行到状态692去检查用户回答的有效性。进行到决定状态694,程序598确定这个回答是否有效。如果回答无效,那么程序598进行到状态696把问题文本重复地输出给用户,然后移回到状态692去检查这个用户回答的有效性。在处理回答程序598的运行过程中发生一个时间用完情形的检查。评估时间用完是要去看看它是否意味着可能失去知觉或智力状况的改变。如果是,那么例如,进入一个智力状况子程序或呼叫急救医疗人员。
如果在决定状态694回答被确定为有效,程序598进行到决定状态698去确定当前正在被DSQ脚本引擎500处理的节点的类型。如果节点类型是症状节点,那么程序598进行到状态700去选择与当前流程节点相关的症状值。症状节点象对复杂问题的回答那样返回这个症状。然后在状态702症状值被返回给症状脚本引擎程序500(图11)。如果节点类型是一个问题节点,程序598进行到状态704把回答转换为路径数字。前进到状态706,程序598在当前流程节点路径名上添加路径数字。状态704和706用作确定将被执行的下一个问题节点。回到决定状态698,如果已确定节点的类型是程序节点,那么程序598进行到状态710。在状态710,程序598执行被当前节点指定的程序并获得一个返回数字。继续到状态712,程序598在当前流程节点路径名上添加返回数字。使用状态710和712去确定将被执行的下一个问题。在状态710被执行的程序可以是一个子脚本或其它功能或用于从病人引出其它医疗信息的子程序。在状态706和712完成时,程序598在返回状态708返回到DSQ脚本引擎程序500(图11)。
参见图14,现在将说明这个在图11中提到过的更新疾病列表程序606。从起始状态730开始,程序606进行到状态732去存取疾病暂时列表550(图10)。继续到决定状态734,程序606确定在疾病暂时列表550中是否还有其它疾病。如果没有,程序606在返回状态736返回到DSQ脚本引擎程序500(图11)。然而,如果在暂时列表中有其它疾病,那么程序606进行到状态738去存取在这个疾病暂时列表550中的下一个疾病。进行到决定状态740,程序606确定当前疾病是否包含有刚刚被病人回答的症状或任何它的后响应处理的症状,如在功能604被确定的(图11)。如果有,那么程序606移到状态742并把刚回答的症状或后响应处理症状的加权值加到当前疾病的分数上。如果有多个后响应处理症状,该情形典型地会发生。如果是这样,那么程序606移回到状态742把这些其它症状的加权值加到这个疾病分数上。如果不再有其它症状需要处理,象在状态744确定的那样,那么程序606进行到决定状态746。
在决定状态746,程序606确定疾病的分数是否已达到或超过界内阈值。这个界内阈值的值最好是1000,但是可以使用其它界内阈值的分数。如果是,程序606进行到状态748把当前疾病添加到界内疾病列表554(图10)中。移到状态750,程序606从疾病暂时列表550(图10)中消除这个当前疾病,然后移回到决定状态734去确定在这个暂时列表550中是否还有其它疾病。
回到决定状态746,如果已确定分数没达到或超过界内阈值,那么程序606进行到决定状态752。在决定状态752,程序606确定疾病分数是否已达到或超过界外阈值。如果是,那么程序606移到状态754把当前疾病添加到界外疾病列表556(图10)中。前进到状态750,程序606从疾病暂时列表550(图10)中消除这个疾病,然后移回到决定状态734去确定在这个疾病暂时列表550中是否还有其它疾病。
回到决定状态752,如果疾病的分数不小于等于界外阈值,那么程序606移回到决定状态734去确定在这个暂时列表550中是否还有其它疾病。回到决定状态740,如果当前疾病不包含有刚刚回答的症状或任何它的后响应处理症状,那么程序606移回到决定状态734去确定在这个暂时列表550中是否还有其它疾病。
界内阈值和界外阈值的使用有如下的隐含意义·症状的加权值可以被给定为一个正数或负数;·为每种疾病保存了两个运行分数一个正数和一个负数;·正的加权值加到正的分数上,而负的加权值加到负的分数上;·加权值不被减少;·两个阈值被使用,一个正值(如1000或10000)把疾病划进界内,和一个负值(如-1000或-10000)把疾病划出界外;·当正分数达到或超过正阈值时,疾病被划进界内;·当负分数达到或超过负阈值时,疾病被划出界外;·如果疾病在脚本结束时两个阈值都没达到,那么它被留在一个疾病的“不确定”列表中,它可以被存在病人的医疗历史中。
参见图15,现在将说明一种应用基于分支脚本来产生医疗建议或诊断的替换型实施例。从起始状态782开始,基于分支脚本程序780进行到状态784去打开基于分支医疗脚本文件。进行到状态786,程序780从当前的和/或以前的与病人的对话建立这个病人的数据。脚本程序780进行到状态788开始脚本中的第一个问题。前进到状态790,脚本程序780把当前问题提供给用户。继续到状态792,脚本程序780等待一个有效的用户回答。移到状态794,脚本程序780记录用户的回答。在状态796,脚本程序780到与用户的回答相关的节点。继续到决定状态798,脚本程序780确定下一个节点是否一个退出节点。如果不是,那么程序780继续到状态790并把下一个问题提供给用户。脚本程序780根据预定的脚本节点的次序在状态790直到798上循环,直到达到一个退出节点。当达到退出节点时,脚本程序780移到决定状态800去确定脚本结果的类型。该基于分支脚本780在返回状态802返回一个诊断、在返回状态804返回建议、或在返回状态806返回涉及另一个脚本。
六.基于列表的处理的优点该基于列表的处理系统相对其它医疗诊断方法有快速、准确和完整的优点。特别地,该基于列表的处理方法有-把医疗知识组织成其它方法也能处理的列表;-提供能对它的准确性和完整性进行检查的诊断;-产生比人们可以应用基于分支的脚本写出的更好的脚本;-简化了更新脚本,在医疗知识有变化时;-允许被自动化方法测试;-能被用作一种从基于分支脚本的呼叫功能;-是计算机平台独立、媒介独立和语言独立;-允许把脚本更容易地翻译成其它人类语言;-反馈医生实际诊断的方法。
附录DSQ基于列表脚本的范例这个列表更加彻底地显示了一个ASCII码文件的例子,它包含有用作基于列表的处理的起始点的列表。这个列表仅用于显示格式和关系。它可能表达不了正确和完整的医疗信息。这个示范脚本的主要疾病是“身体不适”。
<pre listing-type="program-listing"><![CDATA[ MALARIA.TXTDEF H h_format 5 h_complaint s_malaiseEND HDEF Dd_falc "084.0""Falciparum Malaria" s_tropics 200 s_lethargic 100 s_fever 200 s_chills 200 s_nochills -100 s_sweats 200 s_nosweats -100 s_cfsinorder 200 s_cfsnotinorder 100 s_2bouts_other250 s_3bouts_other250s_pnotest 5 s_pnegative -700 s_pfalcip 700 s_pvivax -700 s_povale -700 s_pmalar -700 s_pmixed -700d_vivax "084.1""Vivax Malaria" s_tropics 200 s_lethargic 100 s_fever 200 s_chills 200 s_nochills -100 s_sweats 200 s_nosweats -100 s_cfsinorder 200 s_cfsnotinorder 100 s_2bouts_48 350 s_3bouts_48 450 s_pnotest 5 s_pnegative -700 s_pfalcip-700 s_pvivax 700 s_povale -700 s_pmalar -700s_pmixed -700d_quartan "084.2" "Quartan Malaria" s_tropics 200 s_lethargic100 s_fever200 s_chills 200 s_nochills-100 s_sweats 200 s_nosweats-100 s_cfsinorder 200 s_cfsnotinorder100 s_2bouts_72350 s_3bouts_72450 s_pnotest5 s_pnegative -700 s_pfalcip -700 s_pvivax -700 s_povale -700 s_pmalar 700 s_pmixed -700d_ovale "084.3""Ovale Malaria" s_tropics 200 s_lethargic100 s_fever200s_chills 200 s_nochills -100 s_sweats 200 s_nosweats -100 s_cfsinorder 200 s_cfsnotinorder 100 s_2bouts_other250 s_3bouts_other350 s_pnotest 5 s_pnegative -700 s_pfalcip-700 s_pvivax -700 s_povale 700 s_pmalar -700 s_pmixed -700d_mixed "084.5""Mixed Malaria" s_tropics 200 s_lethargic 100 s_fever 200 s_chills 200 s_nochills -100 s_sweats 200 s_nosweats -100 s_cfsinorder 200 s_cfsnotinorder 100s_1bout_23days 200 s_1bout_other 200 s_2bouts_other 200 s_3bouts_other 300 s_pnotest5 s_pnegative -700 s_pfalcip -700 s_pvivax -700 s_povale -700 s_pmalar -700 s_pmixed 700d_unspec "084.6""Malaria,unspec" s_tropics 200 s_lethargic100 s_fever200 s_chills 200 s_nochills-100 s_sweats 200 s_nosweats-100 s_cfsinorder 200 s_cfsnotinorder100 s_pnotest 100d_notmal "-""Not Malaria" s_nofever 100s_nochills300 s_nosweats300 s_nocfs 700 s_cfsnotinorder 300 s_pnegative 1000 s_pfalcip-600 s_pvivax -600 s_povale -600 s_pmalar 600 s_pmixed -600END DDEF S s_malaise 0"general ill feeling" s_tropics f_tropics"recently in tropics" s_nottropics f_tropics"not recently in tropics" s_lethargic f_lethargic "has been tired/lethargic″ s_notlethargicf_lethargic "not tired/lethargic" s_fever f_fever "has fever" s_nofever f_fever "has no fever" s_chills f_chills "has chills" s_nochillsf_chills "has no chills" s_sweats f_sweats "has sweating" s_nosweatsf_sweats "has no sweating" s_nocfs f_cfs"did not have CFS" s_cfsinorder f_cfs"had CFS"s_cfsnotinorderf_cfs"had CFS,but not in order" s_pnotest f_ptest "not tested for Plasmodia" s_pnegativef_ptest "plasm test negative" s_pfalcip f_ptest "test+ for P.falciparum" s_pvivax f_ptest "test+ for P.vivax" s_povale f_ptest "test+ for P.ovale" s_pmalar f_ptest "test+ for P.malariae" s_pmixed f_ptest "test+ for mixed Plasmodia" s_1bout_1day f_cfs"1 CFS bout lasting 1 day" s_1bout_23days f_cfs"1 CFS bout lasting 2-3 days" s_1bout_other f_cfs"1 cfs bout of unk duration" s_2bouts_48f_cfs"2 CFS bouts,48h apart" s_2bouts_72f_cfs"2 CFS bouts,72h apart" s_2bouts other f_cfs"2 CFS bouts;unknown interval" s_3bouts_48f_cfs"3+ CFS bouts every 48 hours" s_3bouts_72f_cfs"3+ CFS bouts every 72 hours" s_3bouts other f_cfs"3+ CFS bouts of unk interval"END SDEF I s_nochills s_nocfs s_nofever s_nocfs s_nosweats s_nocfs s_chills s_fever s_sweats s_cfsEND IDEF Ff_tropics "1" q_tropics "11" s_tropics "12" s_nottropicsf_lethargic "1" q_lethargic "11" s_lethargic "12" s_notlethargicf_fever "1" q_fever "11" s_fever "12" s_nofeverf_chills "1" q_chills "11" s_chills "12" s_nochillsf_sweats "1" q_sweats "11" s_sweats "12" s_nosweatsf_cfs "1" q_cfs "12"s_nocfg "11"q_cfsorder "112" s_cfsnotinorder"111"q_cfsbouts "1110" s_nocfs "1111" q_d1bout "11111" s_1bout_1day "11112" s_1bout_23days "11113" s_1bout_other "1112" q_d2bouts "11121" s_2bouts_48 "11122" s_2bouts_72 "11123" s_2bouts_other "1113" q_d3bouts "11131" s_3bouts_48 "11132" s_3bouts_72 "11133" s_3bouts_otherf_ptest "1"q_ptest "12" s_pnotest "11" q_pfound "110" s_pnegative "111" s_pfalcip "112" s_pvivax "113" s_povale "114" s_pmalar "115" s_pmixedEND FDEF Q q_tropics 0 t_qtropics 12t_kyest_kno q_lethargic 0 t_qlethargic 12t_kyest_kno q_fever 0 t_qfever 12t_kyest_kno q_chills0 t_qchills12t_kyest_kno q_sweats0 t_qsweats12t_kyest_kno q_cfs 0 t_qcfs 12t_kyest_kno q_cfsorder 0 t_qcfsorder 12t_kyest_kno q_ptest 0 t_qptest 12t_kyest_kno q_pfound 0 t_qpfound 012345 t_knone t_falc t_viv t_ov t_mal t_mix q_cfsbouts 0 t_qcfsbouts 0123 t_knonet_kone t_ktwo t_k3plus q_d1bout0 t_qd1bout 123 t_kup1day t_k23days t_kother q_d2bouts 0 t_qd2bouts 123 t_k48hours t_k72hours t_kother q_d3bouts 0 t_qd3bouts 123 t_k48hours t_k72hours t_kotherEND QDEF T t_falc FALCIPARUM t_malMALARIAE t_mixMIXED t_ov OVALE t_vivVIVAX t_k23days2-3 DAYS t_k3plus THREE+ t_k48hours 48 HOURSt_k72hours72 HOURS t_kno NO t_knone NONE t_koneONE t_kother OTHER t_ktwoTWO t_kup1day UP TO ONE DAY t_kyesYES t_qcfsDid you have Chills,Fever,and Sweating? t_qcfsbouts How many bouts of C-F-S did you have? t_qcfsorder Did you have C-F-S in that order? t_qchills Do you have chills? t_qd1bout How long did that 1 bout last? t_qd2boutsWhat was the time between those 2 bouts? t_qd3boutsHow far apart were these bouts? t_qfever Do you have fever? t_qlethargic Have you been tired or lethargic? t_qpfound What Plasmodia were found in blood? t_qptest Did you have a blood test for Plasmodia? t_qsweats Do you have sweating? t_qtropicsHave you been in the tropics recently?END T]]></pre>
权利要求
1.一种计算机诊断方法包括以下步骤提供给计算机一组疾病列表,每种疾病与一组症状列表相关,并且每种症状与一组问题列表相关;不断提出问题去引出回答,这些回答构成症状,每种构成的症状给一种疾病提供一个加权值;以及确定对应一种疾病的累积加权值是否达到或超过一个阈值,以确定一个诊断结果。
2.根据权利要求1的方法,其特征在于症状是根据一个或更多其它症状的存在或不存在而构成的。
3.根据权利要求1的方法,其特征在于一组被选中的症状的存在为一个诊断增加额外的加权值。
4.根据权利要求1的方法,其特征在于被诊断程序第一次选择时选中的症状的加权值与第二次选择时选中的症状的加权值不同。
5.根据权利要求1的方法,其特征在于在第一次严重程度报告中的症状的加权值与第二次严重程度报告中的症状的加权值不同。
6.根据权利要求1的方法,其特征在于以一种特定的时间次序发生的一组被选中的症状提供给该诊断的累积加权值与不是以一种特定的次序发生的一组被选中的症状所提供的不同。
7.根据权利要求1的方法,其特征在于以一组被选中的症状的开始或结束次序提供给诊断的累积加权值与单独被选中的这些症状所提供的不同。
8.根据权利要求1的方法,其特征在于根据该累积加权值,把该疾病划入界内用于进一步诊断查询。
9.根据权利要求1的方法,其特征在于根据该累积加权值,把该疾病划出界外用于进一步诊断查询。
10.根据权利要求1的方法,其特征在于在为非急诊疾病提出问题之前,先提问关于急诊疾病的问题。
11.根据权利要求1的方法,还包括这个步骤确定对应一种疾病的累积加权值是否小于界外阈值,目的是排除一种可能的诊断。
12.根据权利要求8的方法,其特征在于提供把该疾病划入界内的确定程度。
13.根据权利要求9的方法,其特征在于提供把该疾病划出界外的确定程度。
14.根据权利要求1的方法,其特征在于分别有各自的确定程度的多个诊断被汇集成一个差别诊断列表。
全文摘要
一种用于提供自动化的知识基础的医疗诊断设备的系统和方法。该医疗设备通过网络,如可以使用电话的电话网络或可以使用因特网存取设备的因特网,提供给普通公民。另一方面,该医疗设备可以通过使用电脑以一种独立的方式提供给病人。本发明使用一种产生和执行诊断脚本的基于列表的处理方法,为了诊断病人的健康问题,把医疗知识组织成一种将被考虑的疾病的列表。该疾病列表中的每种疾病包括一组从病人中检查到的症状列表。然后这组症状列表中的每种症状被进一步描述成对一个或多个向病人提问的关于该症状的问题的列表的回答。通过适当的数据结构转换形式把该三重嵌套的列表结构转换成一个将被存储的脚本。在病人请求诊断时,这个脚本象一串问题那样被回放。病人的回答被分析和转换成症状。把这些症状汇集成疾病。最终这些疾病被选中并作为一个诊断结果那样被报告。
文档编号G06F19/00GK1246942SQ97197872
公开日2000年3月8日 申请日期1997年7月11日 优先权日1996年7月12日
发明者埃德温·C·伊利夫 申请人:第一咨询公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1