互聯網+智慧醫療:基於Python打造智慧醫院項目之智能分診

智慧醫療英文簡稱WIT120,是最近興起的專有醫療名詞,通過打造健康檔案區域醫療信息平臺,利用最先進的物聯網技術,實現患者與醫務人員、醫療機構、醫療設備之間的互動,逐步達到信息化。

隨着計算機科學技術的飛速發展,現已有非常多的 AI 方法手段應用於醫療服務行業,進而讓患者享受安全、便利、優質的診療服務!

本文將從大數據+爬蟲技術出發,運用Python語言打造優質、便捷、高效的診療服務平臺,讓患者不用爲不知掛號哪個診室而苦惱。

目錄

1 項目簡介

1.1 項目概述

1.2 前期準備

2 項目分析

2.1 代碼詳解

2.2 總觀代碼

2.3 項目運行結果

3 總結展望


1 項目簡介

1.1 項目概述

本項目主要是基於Python語言打造智慧醫院項目之智能分診,旨在讓患者輕鬆、便捷地瞭解其病情的就診科室,進而實現“人人健康,健康人人”的項目初衷。具體而言,本項目實現過程用到了Python爬蟲基礎以及正則表達式等相關內容,最後達到的效果是患者輸入自己的疾病症狀,隨即給出疾病對應的就診科室。
總之,本項目產品是一個比較便捷高效的智能分診系統;接下來將詳細闡述項目產品的創造過程。

1.2 前期準備

因爲需要提前瞭解到各個病情所對應的就診科室,所以運用了Python爬蟲技術獲取各種各樣的病情對應的科室等信息。

也就是說,需要提前找好一個網站,從這個網站中獲取我們想要的信息

在這裏,我找到的是一個名爲尋醫問藥的網站,接下來的操作都是基於它來實現的

智能分診系統的打造用到python語言及部分第三方庫

在這裏:
Python環境:3.8.2

python編譯器:JetBrains PyCharm 2018.1.2 x64

第三方庫及模塊:requests、re模塊、Pyinstaller庫

 因爲本文大量用到了正則表達式,實際上是比較複雜的,之前做過一篇關於正則表達式的文章,這裏給出鏈接:
https://blog.csdn.net/IT_charge/article/details/105977578

2 項目分析

2.1 代碼詳解

導入用到的模塊及第三方庫

import requests
import re

 獲取到目標網頁並做正則表達式處理

def get_data(url):
    # 請求網頁
    resp = requests.get(url)
    # 對於獲取到的 HTML 二進制文件進行 'gb2312' 轉碼成字符串文件
    html = resp.content.decode('gb2312')
    # 正則表達式獲取期望字符串
    tag_div = re.findall(r'<div class="illness-ks clearfix">.*?(.*?)<ul class="mod-ill-list pt5">', html, re.S | re.I)[0]
    tag_a = re.findall(r'<a.*?</a>', tag_div)

url = 'http://zzk.xywy.com/'
get_data(url)

 在這裏實際上已經將搜索範圍減到了很小,但爲了更精確獲取我們想要的信息,運用否循環我們先來看一下(提前分析HTML源代碼得到該網站的信息條數爲392,故這裏循環392次)

    for i in range(392):
        print(i)
        chapter_url = re.findall(r'>(.*?)</a>', tag_a[i])  # [0]
        print(chapter_url)

通過此運行結果我們得到,比如下標爲0的數據、下標爲9的數據……都是科室名稱而其他都是科室對應的接診症狀

也就是說,接下來我們利用兩次for循環將目標鎖定到每一具體科室及其接診症狀

這裏以呼吸科爲例,其科室及症狀對應下標爲0~9之間,在得到的chapter_url1字符串中再運用正則表達式提取信息

    for huxi in range(9):                # 呼吸科
        chapter_url1 = re.findall(r'>(.*?)</a>', tag_a[huxi])
        for huxia in chapter_url1:
            print(huxia)
            if '' == huxia:
                huxiKS = re.findall(r'>(.*?)</a>', tag_a[0])[0]
                print('建議您的就診科室爲:',huxiKS)

 同理,鎖定每一科室及其接診症狀的下標範圍,比如消化內科(9,18)、心內科(18,28)……

    for xiaohua in range(9,18):          # 消化內科
        chapter_url2 = re.findall(r'>(.*?)</a>', tag_a[xiaohua])
        for xiaohuaa in chapter_url2:
            if symptom == xiaohuaa:
                xiaohuaKS = re.findall(r'>(.*?)</a>', tag_a[9])[0]
                print('建議您的就診科室爲:', xiaohuaKS)
    for xinnei in range(18,28):            # 心內科
        chapter_url3 = re.findall(r'>(.*?)</a>', tag_a[xinnei])
        for l in chapter_url3:
            if symptom == l:
                xinneiKS = re.findall(r'>(.*?)</a>', tag_a[18])[0]
                print('建議您的就診科室爲:',xinneiKS)

 按照這一思路將網站內涉及到的26個科室全部寫出來,最後再通過用戶輸入症狀得出對應的結果

symptom = input("請輸入您的症狀:")

2.2 總觀代碼

import requests
import re

def get_data(url):
    # 請求網頁
    resp = requests.get(url)
    # 對於獲取到的 HTML 二進制文件進行 'gb2312' 轉碼成字符串文件
    html = resp.content.decode('gb2312')
    # 正則表達式獲取期望字符串
    tag_div = re.findall(r'<div class="illness-ks clearfix">.*?(.*?)<ul class="mod-ill-list pt5">', html, re.S | re.I)[0]
    tag_a = re.findall(r'<a.*?</a>', tag_div)
    # print(tag_a)
    # for i in range(392):
    #     print(i)
    #     chapter_url = re.findall(r'>(.*?)</a>', tag_a[i])  # [0]
    #     print(chapter_url)

    # print(tag_a)
    symptom = input("請輸入您的症狀:")
    for huxi in range(9):                # 呼吸科
        chapter_url1 = re.findall(r'>(.*?)</a>', tag_a[huxi])
        for huxia in chapter_url1:
            # print(huxia)
            if symptom == huxia:
                huxiKS = re.findall(r'>(.*?)</a>', tag_a[0])[0]
                print('建議您的就診科室爲:',huxiKS)
    for xiaohua in range(9,18):          # 消化內科
        chapter_url2 = re.findall(r'>(.*?)</a>', tag_a[xiaohua])
        for xiaohuaa in chapter_url2:
            if symptom == xiaohuaa:
                xiaohuaKS = re.findall(r'>(.*?)</a>', tag_a[9])[0]
                print('建議您的就診科室爲:', xiaohuaKS)
    for xinnei in range(18,28):            # 心內科
        chapter_url3 = re.findall(r'>(.*?)</a>', tag_a[xinnei])
        for l in chapter_url3:
            if symptom == l:
                xinneiKS = re.findall(r'>(.*?)</a>', tag_a[18])[0]
                print('建議您的就診科室爲:',xinneiKS)
    for xueye in range(28,36):               # 血液科
        chapter_url4 = re.findall(r'>(.*?)</a>', tag_a[xueye])
        for xueyea in chapter_url4:
            # print(l)
            if symptom == xueyea:
                xueyeKS = re.findall(r'>(.*?)</a>', tag_a[28])[0]
                print('建議您的就診科室爲:',xueyeKS)
    for neifenmi in range(36,44):            # 內分泌科
        chapter_url5 = re.findall(r'>(.*?)</a>', tag_a[neifenmi])
        for neifenmia in chapter_url5:
            if symptom == neifenmia:
                neifenmiKS = re.findall(r'>(.*?)</a>', tag_a[36])[0]
                print('建議您的就診科室爲:',neifenmiKS)
    for shenjingnei in range(44,53):           #  神經內科
        chapter_url6 = re.findall(r'>(.*?)</a>', tag_a[shenjingnei])
        for shenjingneia in chapter_url6:
            if symptom == shenjingneia:
                shenjingneiKS = re.findall(r'>(.*?)</a>', tag_a[44])[0]
                print('建議您的就診科室爲:',shenjingneiKS)
    for shennei in range(53,61):           # 腎內科
        chapter_url7 = re.findall(r'>(.*?)</a>', tag_a[shennei])
        for shenneia in chapter_url7:
            if symptom == shenneia:
                shenneiKS = re.findall(r'>(.*?)</a>', tag_a[53])[0]
                print('建議您的就診科室爲:',shenneiKS)
    for yichuanbing in range(61,77):       # 遺傳病科
        chapter_url8 = re.findall(r'>(.*?)</a>', tag_a[yichuanbing])
        for yichuanbinga in chapter_url8:
            if symptom == yichuanbinga:
                yichuanbingKS = re.findall(r'>(.*?)</a>', tag_a[61])[0]
                print('建議您的就診科室爲:',yichuanbingKS)
    for waike in range(77,87):                # 外科
        chapter_url9 = re.findall(r'>(.*?)</a>', tag_a[waike])
        for waikea in chapter_url9:
            if symptom == waikea:
                waikeKS = re.findall(r'>(.*?)</a>', tag_a[77])[0]
                print('建議您的就診科室爲:',waikeKS)
    for guke in range(87,95):                # 骨外科
        chapter_url10 = re.findall(r'>(.*?)</a>', tag_a[guke])
        for gukea in chapter_url10:
            if symptom == gukea:
                gukeKS = re.findall(r'>(.*?)</a>', tag_a[87])[0]
                print('建議您的就診科室爲:',gukeKS)
    for shenjingwai in range(95,104):                 # 神經外科
        chapter_url11 = re.findall(r'>(.*?)</a>', tag_a[shenjingwai])
        for shenjingwaia in chapter_url11:
            if symptom == shenjingwaia:
                shenjingwaiKS = re.findall(r'>(.*?)</a>', tag_a[95])[0]
                print('建議您的就診科室爲:',shenjingwaiKS)
    for xinxiongwai in range(104,112):                 # 心胸外科
        chapter_url12 = re.findall(r'>(.*?)</a>', tag_a[xinxiongwai])
        for xinxiongwaia in chapter_url12:
            if symptom == xinxiongwaia:
                xinxiongwaiKS = re.findall(r'>(.*?)</a>', tag_a[104])[0]
                print('建議您的就診科室爲:',xinxiongwaiKS)
    for gandanwai in range(112,120):                 # 肝膽外科
        chapter_url13 = re.findall(r'>(.*?)</a>', tag_a[gandanwai])
        for gandanwaia in chapter_url13:
            if symptom == gandanwaia:
                gandanwaiKS = re.findall(r'>(.*?)</a>', tag_a[112])[0]
                print('建議您的就診科室爲:',gandanwaiKS)
    for miniao in range(120,129):                 # 泌尿外科
        chapter_url14 = re.findall(r'>(.*?)</a>', tag_a[miniao])
        for miniaoa in chapter_url14:
            if symptom == miniaoa:
                miniaoKS = re.findall(r'>(.*?)</a>', tag_a[120])[0]
                print('建議您的就診科室爲:',miniaoKS)
    for gangchang in range(129,138):                 # 肛腸科
        chapter_url15 = re.findall(r'>(.*?)</a>', tag_a[gangchang])
        for gangchanga in chapter_url15:
            if symptom == gangchanga:
                gangchangKS = re.findall(r'>(.*?)</a>', tag_a[129])[0]
                print('建議您的就診科室爲:',gangchangKS)
    for zhengxing in range(138,147):                 # 整形科
        chapter_url16 = re.findall(r'>(.*?)</a>', tag_a[zhengxing])
        for zhengxinga in chapter_url16:
            if symptom == zhengxinga:
                zhengxingKS = re.findall(r'>(.*?)</a>', tag_a[138])[0]
                print('建議您的就診科室爲:',zhengxingKS)
    for er in range(147,156):                 # 兒科
        chapter_url17 = re.findall(r'>(.*?)</a>', tag_a[er])
        for era in chapter_url17:
            if symptom == era:
                erKS = re.findall(r'>(.*?)</a>', tag_a[148])[0]
                print('建議您的就診科室爲:',erKS)
    for fuchan in range(156,203):                 # 婦產科
        chapter_url18 = re.findall(r'>(.*?)</a>', tag_a[fuchan])
        for fuchana in chapter_url18:
            if symptom == fuchana:
                fuchanKS = re.findall(r'>(.*?)</a>', tag_a[156])[0]
                print('建議您的就診科室爲:',fuchanKS)
    for pifu in range(204, 221):  # 皮膚科
        chapter_url19 = re.findall(r'>(.*?)</a>', tag_a[pifu])
        for pifua in chapter_url19:
            if symptom == pifua:
                pifuKS = re.findall(r'>(.*?)</a>', tag_a[204])[0]
                print('建議您的就診科室爲:', pifuKS)
    for zhongyi in range(223, 247):  # 中醫科
        chapter_url20 = re.findall(r'>(.*?)</a>', tag_a[zhongyi])
        for zhongyia in chapter_url20:
            if symptom == zhongyia:
                zhongyiKS = re.findall(r'>(.*?)</a>', tag_a[223])[0]
                print('建議您的就診科室爲:', zhongyiKS)
    for wuguan in range(247, 274):  # 五官科
        chapter_url21 = re.findall(r'>(.*?)</a>', tag_a[wuguan])
        for wuguana in chapter_url21:
            if symptom == wuguana:
                wuguanKS = re.findall(r'>(.*?)</a>', tag_a[248])[0]
                print('建議您的就診科室爲:', wuguanKS)
    for nan in range(274, 292):  # 男科
        chapter_url22 = re.findall(r'>(.*?)</a>', tag_a[nan])
        for nana in chapter_url22:
            if symptom == nana:
                nanKS = re.findall(r'>(.*?)</a>', tag_a[274])[0]
                print('建議您的就診科室爲:', nanKS)
    for chuanran in range(292, 311):  # 傳染科
        chapter_url23 = re.findall(r'>(.*?)</a>', tag_a[chuanran])
        for chuanrana in chapter_url23:
            if symptom == chuanrana:
                chuanranKS = re.findall(r'>(.*?)</a>', tag_a[292])[0]
                print('建議您的就診科室爲:', chuanranKS)
    for jingshen in range(311, 327):  # 精神科
        chapter_url24 = re.findall(r'>(.*?)</a>', tag_a[jingshen])
        for jingshena in chapter_url24:
            if symptom == jingshena:
                jingshenKS = re.findall(r'>(.*?)</a>', tag_a[311])[0]
                print('建議您的就診科室爲:', jingshenKS)
    for jizhen in range(328, 342):  # 急診科
        chapter_url25 = re.findall(r'>(.*?)</a>', tag_a[jizhen])
        for jizhena in chapter_url25:
            if symptom == jizhena:
                jizhenKS = re.findall(r'>(.*?)</a>', tag_a[328])[0]
                print('建議您的就診科室爲:', jizhenKS)
    for zhongliu in range(343, 350):  # 腫瘤科
        chapter_url26 = re.findall(r'>(.*?)</a>', tag_a[zhongliu])
        for zhongliua in chapter_url26:
            if symptom == zhongliua:
                zhongliuKS = re.findall(r'>(.*?)</a>', tag_a[343])[0]
                print('建議您的就診科室爲:', zhongliuKS)

url = 'http://zzk.xywy.com/'
get_data(url)

2.3 項目運行結果

 

 

 只要是輸入病情症狀,就會智能推薦就醫門診,是不是分快捷方便呢?

當然,我們還可以用Pyinstaller庫打包,讓這一便捷系統被更多人用到

回車運行 

 順着代碼提示的打包exe文件所在文件夾地址,找到它

雙擊運行,看一下結果是否一樣

 

至此,已全部探索完畢。

項目源碼及Pyinstaller庫打包後的exe文件已上傳至百度網盤
鏈接: https://pan.baidu.com/s/1dYPhbjYIyIun-6wmG_Irxw
提取碼: cwub 

3 總結展望

以上是簡單實現了患者病情症狀對應的就醫科室,當然可以改進的地方有很多:比如增加對應掛號科室的掛號費用、主任醫師等等。總之,在大數據背景下,人類的生活越來越數字化、信息化、現代化。

隨着計算機科學技術的發展,在不久的將來醫療行業將融入更多人工智慧、傳感技術等高科技,使醫療服務走向真正意義的智能化,推動醫療事業的繁榮發展。在中國新醫改的大背景下,智慧醫療正在走進尋常百姓的生活。

以上就是“互聯網+智慧醫療”在醫療服務方面的項目實現的全部內容。


版權聲明:本專欄全部爲CSDN博主「IT_change」的原創文章,遵循 CC 4.0 BY-SA 版權協議。
                  轉載請附上原文出處鏈接及本聲明。

感謝閱讀 ! 感謝支持 !  感謝關注 !

希望本文能對讀者學習和理解“互聯網+”技術有所幫助,並請讀者批評指正!

2020年5月底于山西大同

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章