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