carisackc commited on
Commit
ee8b1e3
1 Parent(s): bc39b6c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -39
app.py CHANGED
@@ -5,11 +5,11 @@ from math import ceil
5
  from collections import Counter
6
  from string import punctuation
7
  import spacy
 
8
  from spacy import displacy
9
  from spacy.lang.en import English
10
  from spacy.matcher import PhraseMatcher
11
  from spacy.tokens import Span
12
- from negspacy.negation import Negex
13
  #import en_ner_bc5cdr_md
14
  import re
15
 
@@ -63,6 +63,12 @@ del df2
63
  # Remove decimal point from Admission ID
64
  df['HADM_ID'] = df['HADM_ID'].astype(str).apply(lambda x: x.replace('.0',''))
65
  df3['HADM_ID'] = df3['HADM_ID'].astype(str).apply(lambda x: x.replace('.0',''))
 
 
 
 
 
 
66
 
67
  #Renaming column
68
  df.rename(columns={'SUBJECT_ID':'Patient_ID',
@@ -70,7 +76,8 @@ df.rename(columns={'SUBJECT_ID':'Patient_ID',
70
  'hpi_input_text':'Original_Text',
71
  'hpi_reference_summary':'Reference_text'}, inplace = True)
72
  df3.rename(columns={'SUBJECT_ID':'Patient_ID',
73
- 'HADM_ID':'Admission_ID'}, inplace = True)
 
74
 
75
  #Filter selection
76
  st.sidebar.header("Search for Patient:")
@@ -79,8 +86,8 @@ st.sidebar.header("Search for Patient:")
79
  patientid = df['Patient_ID']
80
  patient = st.sidebar.selectbox('Select Patient ID:', patientid) #Filter Patient
81
  admissionid = df['Admission_ID'].loc[df['Patient_ID'] == patient] #Filter available Admission id for patient
82
- HospitalAdmission = st.sidebar.selectbox(' ', admissionid)
83
- pastHistoryEpid = df3['Admission_ID'].loc[df3['Patient_ID'] == patient] #Filter list of available Past History (for History tab)
84
 
85
 
86
  # List of Model available
@@ -108,7 +115,7 @@ reference_text = original_text['Reference_text'].values
108
  ##========= Buttons to the 5 tabs ======== Temp disabled Discharge Plan and Social Notes
109
  ##col1, col2, col3, col4, col5 = st.columns([1,1,1,1,1]) -- to uncomment and comment below line to include discharge plan and social notes
110
  col1, col2, col5 = st.columns([1,1,1])
111
- col6, col7, col8 =st.columns([2,2,2])
112
  with st.container():
113
  with col1:
114
  btnAdmission = st.button("🏥 Admission")
@@ -133,41 +140,53 @@ with st.container():
133
  inputNote = "Input History records"
134
 
135
  ##========= on Past History Tab =========
136
- if btnPastHistory:
137
- st.text_area('Past History','Date of discharge: xxxxxxxxx')
138
-
139
- else:
140
- runtext =st.text_area(inputNote, str(original_text2), height=300)
141
-
142
-
143
  with st.container():
144
  if btnPastHistory:
145
  with col6:
146
  st.markdown('**No. of admission past 6 months: xx**')
147
- with col7:
148
- st.text_area('Discharge Disposition:',' ', height=8) #to replace with dropdown list if data is available
149
- with col8:
150
  #st.date_input('Select Admission Date') # To replace with a dropdown filter instead
151
  #st.selectbox('Past Episodes',pastHistoryEp)
152
- pastHistory = st.selectbox(' ', pastHistoryEpid)
153
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
 
155
 
156
  ##========= END on Past History Tab =========
157
 
158
-
159
  # Extract words associated with each entity
160
- def genEntities(ann, entity):
161
- # entity colour dict
162
- #ent_col = {'DISEASE':'#B42D1B', 'CHEMICAL':'#F06292'}
163
- ent_col = {'DISEASE':'pink', 'CHEMICAL':'orange'}
164
- # separate into the different entities
165
- entities = trans_df['Class'].unique()
166
-
167
- if entity in entities:
168
- ent = list(trans_df[trans_df['Class']==entity]['Entity'].unique())
169
- entlist = ",".join(ent)
170
- st.markdown(f'<p style="background-color:{ent_col[entity]};color:#080808;font-size:16px;">{entlist}</p>', unsafe_allow_html=True)
171
 
172
 
173
  ##======================== Start of NER Tagging ========================
@@ -304,12 +323,11 @@ with col1:
304
  st.text_area('Reference text', str(reference_text), height=150)
305
  else:
306
  with st.expander('Full Discharge Summary'):
307
- historyAdmission = df3.query(
308
- "Patient_ID == @patient & Admission_ID == @pastHistory"
309
- )
310
- fulldischargesummary = historyAdmission['TEXT'].values
311
- st.write( str(fulldischargesummary))
312
- ##====== Storing the Diseases/Text
313
  # table= {"Entity":[], "Class":[]}
314
  # ent_bc = {}
315
  # for x in doc.ents:
@@ -319,20 +337,23 @@ with col1:
319
  # table["Class"].append(ent_bc[key])
320
  # trans_df = pd.DataFrame(table)
321
 
 
322
  problem_entities = list(dedupe([t for t in doc0.ents if t.label_ == 'DISEASE']))
323
  medication_entities = list(dedupe([t for t in doc0.ents if t.label_ == 'CHEMICAL']))
324
 
325
  with col2:
326
  st.button('NER')
327
  st.markdown('**CHIEF COMPLAINT:**')
328
- st.write(str(AdmissionChiefCom))
329
  st.markdown('**ADMISSION DIAGNOSIS:**')
330
- st.markdown(str(diagnosis))
331
  st.markdown('**PROBLEM/ISSUE**')
332
  #st.markdown(problem_entities)
333
- genEntities(trans_df, 'DISEASE')
 
334
  st.markdown('**MEDICATION**')
335
- genEntities(trans_df, 'CHEMICAL')
 
336
  #st.table(trans_df)
337
  st.markdown('**NER**')
338
  with st.expander("See NER Details"):
 
5
  from collections import Counter
6
  from string import punctuation
7
  import spacy
8
+ from negspacy.negation import Negex
9
  from spacy import displacy
10
  from spacy.lang.en import English
11
  from spacy.matcher import PhraseMatcher
12
  from spacy.tokens import Span
 
13
  #import en_ner_bc5cdr_md
14
  import re
15
 
 
63
  # Remove decimal point from Admission ID
64
  df['HADM_ID'] = df['HADM_ID'].astype(str).apply(lambda x: x.replace('.0',''))
65
  df3['HADM_ID'] = df3['HADM_ID'].astype(str).apply(lambda x: x.replace('.0',''))
66
+ df3['INDEX_HADM_ID'] = df3['INDEX_HADM_ID'].astype(str).apply(lambda x: x.replace('.0',''))
67
+ df3["CHARTDATE_HADM_ID"] = df3["CHARTDATE"].astype(str) +' - '+ df3["HADM_ID"]
68
+ df3["DIAGNOSIS"] = df3["DIAGNOSIS"].str.capitalize()
69
+
70
+ df3["TEXT"] =df3["TEXT"].replace(r'\n',' \n ', regex=True)
71
+
72
 
73
  #Renaming column
74
  df.rename(columns={'SUBJECT_ID':'Patient_ID',
 
76
  'hpi_input_text':'Original_Text',
77
  'hpi_reference_summary':'Reference_text'}, inplace = True)
78
  df3.rename(columns={'SUBJECT_ID':'Patient_ID',
79
+ 'HADM_ID':'PAST_Admission_ID',
80
+ 'INDEX_HADM_ID':'Admission_ID'}, inplace = True)
81
 
82
  #Filter selection
83
  st.sidebar.header("Search for Patient:")
 
86
  patientid = df['Patient_ID']
87
  patient = st.sidebar.selectbox('Select Patient ID:', patientid) #Filter Patient
88
  admissionid = df['Admission_ID'].loc[df['Patient_ID'] == patient] #Filter available Admission id for patient
89
+ HospitalAdmission = st.sidebar.selectbox(' ', admissionid)
90
+ pastHistoryEpDate = df3['CHARTDATE_HADM_ID'].loc[(df3['Patient_ID'] == patient) & (df3['Admission_ID']== HospitalAdmission)]
91
 
92
 
93
  # List of Model available
 
115
  ##========= Buttons to the 5 tabs ======== Temp disabled Discharge Plan and Social Notes
116
  ##col1, col2, col3, col4, col5 = st.columns([1,1,1,1,1]) -- to uncomment and comment below line to include discharge plan and social notes
117
  col1, col2, col5 = st.columns([1,1,1])
118
+ col6, col7 =st.columns([2,2])
119
  with st.container():
120
  with col1:
121
  btnAdmission = st.button("🏥 Admission")
 
140
  inputNote = "Input History records"
141
 
142
  ##========= on Past History Tab =========
143
+
 
 
 
 
 
 
144
  with st.container():
145
  if btnPastHistory:
146
  with col6:
147
  st.markdown('**No. of admission past 6 months: xx**')
148
+
149
+ with col7:
 
150
  #st.date_input('Select Admission Date') # To replace with a dropdown filter instead
151
  #st.selectbox('Past Episodes',pastHistoryEp)
152
+ pastHistory = st.selectbox(' ', pastHistoryEpDate,on_change=None,)
153
+
154
+ if btnPastHistory:
155
+ st.write('Past History')
156
+ historyAdmission = df3.query(
157
+ "Patient_ID == @patient & CHARTDATE_HADM_ID == @pastHistory"
158
+ )
159
+ st.markdown('Admission Date: ' + historyAdmission['ADMITTIME'].values[0])
160
+ st.markdown('Date of Discharge: ' + historyAdmission['DISCHTIME'].values[0])
161
+ st.markdown('Days from current admission: ' + str(historyAdmission['days_from_index'].values[0]) +' days')
162
+ st.markdown('Summary: ')
163
+ if model == "BertSummarizer":
164
+ st.markdown(str(historyAdmission['BertSummarizer'].values[0]))
165
+ elif model == "t5seq2eq":
166
+ st.markdown(str(historyAdmission['t5seq2eq'].values[0]))
167
+ st.markdown('Diagnosis: ' + str(historyAdmission['DIAGNOSIS'].values[0]))
168
+ st.markdown('Discharge Disposition: ' + str(historyAdmission['DISCHARGE_LOCATION'].values[0]))
169
+ else:
170
+ runtext =st.text_area(inputNote, str(original_text2), height=300)
171
+
172
+
173
 
174
 
175
  ##========= END on Past History Tab =========
176
 
177
+ ## ===== Commented out as no longer in use =====
178
  # Extract words associated with each entity
179
+ #def genEntities(ann, entity):
180
+ # # entity colour dict
181
+ # #ent_col = {'DISEASE':'#B42D1B', 'CHEMICAL':'#F06292'}
182
+ # ent_col = {'DISEASE':'pink', 'CHEMICAL':'orange'}
183
+ # # separate into the different entities
184
+ # entities = trans_df['Class'].unique()
185
+ #
186
+ # if entity in entities:
187
+ # ent = list(trans_df[trans_df['Class']==entity]['Entity'].unique())
188
+ # entlist = ",".join(ent)
189
+ # st.markdown(f'<p style="background-color:{ent_col[entity]};color:#080808;font-size:16px;">{entlist}</p>', #unsafe_allow_html=True)
190
 
191
 
192
  ##======================== Start of NER Tagging ========================
 
323
  st.text_area('Reference text', str(reference_text), height=150)
324
  else:
325
  with st.expander('Full Discharge Summary'):
326
+ #st.write("line 1 \n line 2 \n line 3")
327
+ fulldischargesummary = historyAdmission['TEXT'].values[0]
328
+ st.write(fulldischargesummary)
329
+
330
+ ##====== Storing the Diseases/Text -No longer in use
 
331
  # table= {"Entity":[], "Class":[]}
332
  # ent_bc = {}
333
  # for x in doc.ents:
 
337
  # table["Class"].append(ent_bc[key])
338
  # trans_df = pd.DataFrame(table)
339
 
340
+ # ===== Adding the Disease/Chemical into a list =====
341
  problem_entities = list(dedupe([t for t in doc0.ents if t.label_ == 'DISEASE']))
342
  medication_entities = list(dedupe([t for t in doc0.ents if t.label_ == 'CHEMICAL']))
343
 
344
  with col2:
345
  st.button('NER')
346
  st.markdown('**CHIEF COMPLAINT:**')
347
+ st.write(str(AdmissionChiefCom)[1:-1])
348
  st.markdown('**ADMISSION DIAGNOSIS:**')
349
+ st.markdown(str(diagnosis)[1:-1])
350
  st.markdown('**PROBLEM/ISSUE**')
351
  #st.markdown(problem_entities)
352
+ st.markdown(f'<p style="background-color:PINK;color:#080808;font-size:16px;">{str(problem_entities)[1:-1]}</p>', unsafe_allow_html=True)
353
+ #genEntities(trans_df, 'DISEASE')
354
  st.markdown('**MEDICATION**')
355
+ st.markdown(f'<p style="background-color:orange;color:#080808;font-size:16px;">{str(medication_entities)[1:-1]}</p>', unsafe_allow_html=True)
356
+ #genEntities(trans_df, 'CHEMICAL')
357
  #st.table(trans_df)
358
  st.markdown('**NER**')
359
  with st.expander("See NER Details"):