import argparse import os import pandas as pd import json from tree_search_icd import get_icd_codes from tqdm import tqdm import csv import streamlit as st import tempfile from pathlib import Path from io import StringIO # def process_medical_notes(file_path,model_name): # def process_medical_notes(input_dir, output_file, model_name): # code_map = {} # if not os.path.isdir(input_dir): # raise ValueError("The specified input directory does not exist.") # # Process each file in the input directory # for files in tqdm(os.listdir(input_dir)): # file_path = os.path.join(input_dir, files) # print(file_path) # with open(file_path, "r", encoding="utf-8") as file: # medical_note = file.read() # if not os.path.isfile(file_path): # print(f"File does not exist: {file_path}") # return None # # if os.path.isfile(file_path): # # st.write(f"File exists: {file_path}") # # try: # # with open(file_path, "r",encoding="utf-8") as txtfile: # # st.write(file_path) # # medical_note = txtfile.read() # # st.write(f"Content of the file: {medical_note[:1000]}") # Print the first 1000 characters # # except Exception as e: # # print(f"Error reading file: {e}") # # return None # # print(f"File read successfully. Content length: {len(medical_note)}") # #print(medical_note) # icd_codes = get_icd_codes(medical_note, model_name) # print(icd_codes) # # return icd_codes # # print(icd_codes) # # code_map[files] = icd_codes # with open(output_file, "w") as f: # json.dump(code_map, f, indent=4) # if __name__ == "__main__": # parser = argparse.ArgumentParser(description="Process medical notes to extract ICD codes using a specified model.") # parser.add_argument("--input_dir", help="Directory containing the medical text files") # parser.add_argument("--output_file", help="File to save the extracted ICD codes in JSON format") # parser.add_argument("--model_name", default="llama3-70b-8192", help="Model name to use for ICD code extraction") # args = parser.parse_args() # process_medical_notes(args.input_dir, args.output_file, args.model_name) def process_medical_notes(filepath, model_name): try: for txtfile in filepath: with open(filepath, "r",encoding="utf-8") as txtfile: medical_note = txtfile.read() except Exception as e: # print(f"Error reading file: {e}") return None icd_codes = get_icd_codes(medical_note, model_name) return icd_codes def add_custom_css(): st.markdown( """ """, unsafe_allow_html=True, ) def main(): st.set_page_config(layout="wide",page_icon='🔎',page_title='ICD Identifier') add_custom_css() st.title("ICD Code Identifier From Medical Notes") col1, col2 = st.columns([1, 5]) with col2: file_uploads=st.file_uploader('Choose Medical Note File',type='txt', accept_multiple_files=True) submit = st.button("Submit") with col1: model_name = st.selectbox( "Select Model", ["llama3-70b-8192", "mixtral-8x7b-32768"], index=0 # Default model selected ) if submit : for file_input in file_uploads: file_name = Path(file_input.name).name with tempfile.NamedTemporaryFile(delete=False, suffix='.txt') as temp_file: temp_file.write(file_input.getbuffer()) temp_file.flush() file_paths = temp_file.name response=process_medical_notes(file_paths, model_name) res_data=pd.DataFrame(response,columns=['ICD Code','Code Description','Evidence From Notes']) with col2: # st.markdown(f""" #
#

Case Id: {file_name}

#
# {res_data.to_html(classes='table-wrapper', index=False)} #
#
# """, unsafe_allow_html=True) st.markdown(f"""
Case Id: {file_name}
""", unsafe_allow_html=True) st.markdown(res_data.style.hide(axis="index").to_html(), unsafe_allow_html=True) # st.write(response) if __name__=="__main__": main()