中文字幕无码日韩视频无码三区

應用基于列表的處理的計算機醫療診斷系統的制作方法

文檔序號:6413069閱讀(du):219來源:國(guo)知局
專利名稱:應用基于列表的處理的計算機醫療診斷系統的制作方法
技術領域
本發明涉及一種計算機醫療診斷系統。更特別地,本發明的目的是一種通過對病人疾病的基于時間的診斷中應用動態數據結構的計算機系統。
當前,健康維護的費用花費了相當大比例的美國國民生產總值,且與任何其它消費品價格指數的其他成分相比正在快速上升。更嚴重的是,因為付不起醫療服務費,許多人得不到甚至最基本的醫療維護和信息。
許多人因為付費、時間限制或不方便等原因,而延誤或未能獲得醫療服務。如果公眾有全面的、不受限制的、且容易獲取的醫療信息,那么就能防止許多疾病。同樣,對于許多疾病的早期檢查和治療就可以防止許多疾病發展到危險的階段,對于我們國家的健康維護系統來說,這些治療費占了財政負擔的重要部分。顯然,美國正在面對與健康相關的重大問題,且當前的解決方法是不健全的。
以前針對健康維護問題的試探性工作已涉及各種形式的自動化。其中一些試探性工作已形成一種回答醫療問題的電話撥入程序庫。其它的試探性工作已把目標針對于在給病人檢查時為醫生提供計算機輔助支持。這些方法涉及到靜態過程和算法。而人們所希望的是一種能快速、有效和準確地提供病人醫療建議和診斷自動化的方法。這樣一種醫療建議系統必須是允許為新型的醫療問題和檢查方法擴展的標準組件。
一種進行病人查詢的方法包括醫療診斷腳本。需要的是一種以腳本的形式代表在各專業方面的專家的醫療知識的有效方法。腳本必須應用動態結構,得以快速和有效地實現病人的診斷。
基于列表的處理是一種診斷疾病的方法,它把疾病、癥狀和問題組成一組互相嵌套的疾病、癥狀和問題(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·伊利夫 申請人:第一咨詢公司
網友詢問留言(yan) 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1