程 彪
(中國科學技術大學附屬第一醫院西區(安徽省腫瘤醫院),合肥 230000)
我院HIS系統目前使用的數據庫為Caché數據庫,在多年的信息化建設中Caché數據庫有其獨特的優勢,同時也存在弊端[1]。經過多年的信息化建設,Caché數據庫使用了很多的其他第三方語言,并通過第三方的語言開發了很多應用系統,如:使用Ext Js和.Net框架開發了護理病歷系統;使用Java虛擬機(jdk1.6)開發了智能報表系統;使用C Sharp開發語言和.Net框架開發了醫囑單打印系統等等。
隨著人工智能和大數據的快速發展,我院使用InterSystems公司的集成平臺建成了數據中心。另一方面,Python語言有著強大的科學計算、數據處理、數據分析等功能,能夠適應人工智能和大數據方面的發展。因此,本文嘗試從Python語言的角度,連接Caché等數據庫,并對醫療數據進行分析和應用。
Python是一個有條理的、強大的面向對象的程序設計語言,類似于Java、Perl等語言,目前Python最高的版本為V3.7.0,本文中使用V3.5.4版本進行研究。Python語言可以應用于系統編程、圖形處理、數學處理、文本處理、數據庫編程、網絡編程、Web編程、多媒體應用等,它可以支持相當多的標準庫,如:Tkinter(默認的圖形界面接口)、Numpy(Python科學計算的基礎包)、Pandas(基于NumPy的一種工具,該工具是為了解決數據分析任務而創建的),MatplotLib(繪制數據圖表的Python庫)、Scipy(解決科學運算中各種標準問題域的包的集合)、Tensorflow(機器學習庫)等。
Caché數據庫是InterSystems公司產品,屬于后關系型數據庫(Post Relational database),主要應用于醫療衛生管理信息系統,被醫療界公認為首選數據庫。Caché數據庫有如下的特點:速度快、使用簡單、接口容易、支持遠程映射和鏡像、支持WEB開發。
本文的研究目的是用Python語言分析我院醫療數據,首先我們對Python語言和Caché數據庫交互性做出研究。
步驟如下:
第一、安裝Python3.5.4;
第二、安裝Caché數據庫;
第三、安裝Microsoft visual C++ 14.0組件;
第四、設置環境變量能夠使用C/C++編譯器;
第五、在Python開發環境下編譯驅動程序,命令為“python setup.py install”或者“python setup3.py install”,本文使用的是Python V3.5.4,因此使用“python setup3.py install”命令;
第六、安裝PyCharm,同時下載相應支持庫;
第七、連接Caché數據庫,與數據庫進行交互,并處理相關數據。
以下為示例代碼:
import sys,intersys.pythonbind3 //導入數據庫驅動
.......
url = host + "[" + port + "]:SAMPLES" //host為服務器地址,port為端口號
conn = intersys.pythonbind3.connection()
conn.connect_now(url,user,password,None)
database = intersys.pythonbind3.database(conn)
cq = intersys.pythonbind3.query(database)
sqlcode = 0
cq.prepare_class("web.XXXXX",FunName)
cq.set_par(1,query)
cq.execute() //執行Caché數據庫方法
.......
通過和Caché數據庫的互聯,我們能實現從醫囑、電子病歷等系統抽取數據[2],將數據通過Python語言實現自然語言處理[3]和臨床決策支持的研究。本文采取Django2.0架構實現相關研究。主要處理研究目標有:
(1)通過病歷,分析某一類疾病治療效果。針對肺癌病人的日常病程錄、出院小結等病歷內容分析,研究不同治療方式的治療效果。
(2)通過關鍵詞找到相似病歷,用于輔助診斷、科研、借鑒治療。輸入肺癌、化療、放療等關鍵詞,檢索到相似病歷,可用于科研或者借鑒治療。
(3)對患者病歷進行整理,建立可視化模塊。對患者數據以及病歷質量分析等建立可視化模塊,用于醫院精細化管理。
(4)對患者電子病歷進行分類。建立深度學習模型,進行機器學習,對患者病歷進行分類劃分。例如肺癌病人化療和放療的病歷分類,給出量化結果。
3.2.1 醫學語言處理知識庫建立[4]
目的:對病歷文本數據分析更加準確。
途徑:建立維護程序,將臨床專業術語維護到知識庫。
試驗:“患者2018.8因“發熱伴咳嗽咳痰”就診我科”。
正常分詞結果(Fool-NLTK):
[['患者 ','2018.8','因 ','“','發熱伴 ','咳嗽 ','咳 ','痰 ','”','就診 ','我科 ','。']]
增加“咳痰”、“發熱”專業術語到知識庫后分詞結果:
[['患者 ','2018.8','因 ','“','發熱 ','伴 ','咳嗽 ','咳痰 ','”','就診 ','我科 ','。']]3.2.2 特征向量提取
方法:一是將文本分詞并向量化,便于程序處理;二是考慮去停用詞、詞跟還原與詞形還原,降低特征向量維度;三是TFIDF(詞頻-逆文本頻率)。
目的:用詞特征向量作為文本的特征。
3.2.3 分類、聚類分析以及檢索
方法:利用深度學習算法,如:支持向量機(SVM)、卷積神經網絡、遞歸神經網絡(LSTM-長短期記憶網絡)等。
目的:建立起分類、聚類、檢索的模型[5]。
3.2.4 建立決策支持系統
方法:建立起Python語言和Caché數據庫以及其他數據庫的實時連接,利用Django2.0平臺技術建立臨床決策支持系統。
目的:建立起病歷智能檢索、病歷輔助診斷和病歷智能分類等功能的系統。
本文實現了Python語言和Caché數據庫之間的互通,實時抽取Caché數據庫的醫囑數據,同時對電子病歷系統中的非結構化文本進行分析和研究,利用Django2.0平臺技術實現自然語言處理和臨床決策支持。