File size: 10,247 Bytes
43fda8b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
import os
import streamlit as st
import pandas as pd
from datasets import load_from_disk
from transformers import AutoTokenizer, TFAutoModel
from dotenv import load_dotenv
load_dotenv()
# Drugs = os.getenv('DRUGS')
Drugs = ['Amitriptyline', 'Ambien', 'Aripiprazole', 'Actos', 'Aubra',
'Amphetamine / dextroamphetamine', 'Afrezza',
'Aluminum chloride hexahydrate', 'Acetaminophen / hydrocodone',
'Aviane', 'Aldesleukin', 'Acamprosate', 'Azathioprine',
'Adapalene / benzoyl peroxide',
'Acetaminophen / butalbital / caffeine', 'Accutane',
'Ayr Saline Nasal', 'Asenapine', 'Adipex-P', 'Augmentin', 'Apri',
'Alesse', 'Aspirin / carisoprodol', 'Azelaic acid', 'Azithromycin',
'Alpha 1-proteinase inhibitor', 'Abilify', 'Amlodipine',
'Arimidex', 'Acetaminophen / codeine', 'Advair Diskus',
'Alprazolam', 'Alcaftadine',
'Acetaminophen / dexbrompheniramine / pseudoephedrine', 'AndroGel',
'Avinza', 'Ativan', 'Atomoxetine', 'Alphagan P', 'Apremilast',
'Advair HFA', 'Anastrozole', 'Azor', 'Azelastine / fluticasone',
'Amerge', 'Avonex Pen', 'Acetaminophen / oxycodone',
'Abacavir / dolutegravir / lamivudine', 'Adderall', 'Atorvastatin',
'Aptensio XR',
'Acetaminophen / dichloralphenazone / isometheptene mucate',
'Acyclovir', 'Armodafinil', 'Adderall XR',
'Antipyrine / benzocaine', 'Aczone', 'Amoxicillin / clavulanate',
'Adalimumab', 'Aranesp', 'Ammonium lactate / halobetasol',
'Atenolol', 'Avelox', 'Azithromycin Dose Pack', 'Adapalene',
'Amoxicillin', 'Acetaminophen / aspirin / caffeine', 'Azelastine',
'Albuterol', 'Amethyst', 'Asacol', 'Aleve', 'Alprostadil',
'Astelin', 'Atropine / hyoscyamine / phenobarbital / scopolamine','Ascorbic acid', 'Asthmanefrin', 'Allegra-D 12 Hour', 'Amikacin',
'Arixtra', 'Apokyn', 'AbobotulinumtoxinA', 'Axid', 'Accolate',
'Adoxa', 'Aspirin / caffeine', 'Aliskiren / hydrochlorothiazide',
'Afinitor', 'Acetaminophen / phenylephrine', 'Atacand',
'Allergy DN PE','Bactrim', 'Belviq', 'Blisovi Fe 1 / 20',
'Benzoyl peroxide / clindamycin', 'BuSpar', 'Bupropion',
'Bacitracin / neomycin / polymyxin b', 'Brisdelle', 'Beyaz',
'Buprenorphine / naloxone', 'Benzonatate', 'Bisacodyl', 'Buprenex',
'Benzoyl peroxide / erythromycin', 'Budeprion SR',
'Bupropion / naltrexone', 'Belsomra', 'Bevacizumab',
'Barium sulfate', 'Bismuth subsalicylate', 'Brovana', 'Buspirone',
'Bronkaid', 'Benzocaine', 'Butrans', 'Bunavail', 'Benicar',
'Benadryl Allergy', 'Benadryl', 'Biotin', 'Bromfed DM',
'Breo Ellipta', 'Biaxin', 'Botox', 'Buprenorphine',
'Benzoic acid / salicylic acid', 'Brimonidine / timolol',
'Beclomethasone', 'Bydureon', 'Bonine', 'Brilinta', 'Bactrim DS',
'Brexpiprazole', 'Baclofen', 'Benazepril', 'Biaxin XL', 'Basaglar',
'Bismuth subcitrate potassium / metronidazole / tetracycline',
'Belbuca', 'Bromocriptine', 'Budesonide / formoterol',
'Blisovi 24 Fe', 'Bystolic', 'Banzel', 'Balacet', 'Balsalazide',
'Benlysta', 'Belimumab', 'Byetta',
'Bisoprolol / hydrochlorothiazide', 'Butorphanol', 'Boniva',
'Briviact', 'Brimonidine', 'Biafine', 'Betaseron',
'Benazepril / hydrochlorothiazide', 'Benzoyl peroxide / sulfur',
'Bisacodyl / polyethylene glycol 3350 / potassium chloride / sodium bicarbonate / sodium chloride',
'Balsam peru / castor oil / trypsin',
'Betamethasone / calcipotriene', 'Budeprion XL', 'Benicar HCT',
'Bepotastine', 'Bentyl', 'Brompheniramine', 'Benzaclin',
'Bisoprolol', 'Budesonide', 'Bontril Slow Release', 'Bepreve','Berinert', 'Benzoyl peroxide', 'Belladonna / opium',
'Butabarbital', 'Bioflavonoids / zinc glycinate', 'Brodalumab',
'Bicillin L-A', 'Bimatoprost', 'Benztropine', 'Bethanechol',
'Bupivacaine', 'Bosutinib', 'Bismuth subgallate', 'BenzEFoam',
'Brivaracetam', 'Blistex','Contrave', 'Cyclafem 1 / 35', 'Copper', 'Chantix',
'Ciprofloxacin', 'Cyclosporine', 'Clonazepam', 'Ciclopirox',
'Campral', 'Cryselle', 'Clindamycin', 'Clonidine', 'Celecoxib',
'Caffeine', 'Clarithromycin', 'Clomiphene', 'Clotrimazole',
'Celexa', 'Codeine / guaifenesin', 'Cefuroxime', 'Cymbalta',
'Canagliflozin', 'Citalopram', 'Corticotropin', 'Cefdinir',
'Carvedilol', 'Chlordiazepoxide', 'CellCept',
'Cobicistat / elvitegravir / emtricitabine / tenofovir alafenamide',
'Chateal', 'Cyclobenzaprine', 'Cialis', 'Cholestyramine', 'Cozaar',
'Catapres', 'Carbidopa / levodopa', 'Carisoprodol',
'Citric acid / magnesium oxide / sodium picosulfate', 'Cetirizine',
'Cambia', 'Clindamycin / tretinoin', 'Crestor', 'Copaxone',
'Chlorpheniramine / hydrocodone / pseudoephedrine',
'Cobicistat / elvitegravir / emtricitabine / tenofovir',
'Cogentin', 'Cosentyx', 'Cipro', 'Cytomel', 'Camrese', 'Clomid',
'Celebrex', 'Colesevelam', 'Clozapine', 'Cutivate', 'Cyred',
'Concerta', 'Chlorpheniramine / hydrocodone', 'Claravis',
'Cyanocobalamin', 'Clopidogrel', 'Cyproheptadine',
'Chlordiazepoxide / clidinium', 'Carbamazepine', 'Crisaborole',
'Colchicine', 'Ciprofloxacin / dexamethasone', 'Clomipramine',
'Cabergoline', 'Carac', 'Cephalexin', 'Cariprazine', 'Correctol',
'Celestone', 'Creon', 'Clobetasol', 'Colazal', 'Chlorzoxazone',
'Cenestin', 'Casodex', 'Cinryze', 'Claritin-D', 'Chlorhexidine',
'Complera', 'Cervidil', 'Cefixime', 'Coreg', 'Camila',
'Clorazepate', 'Cevimeline', 'Cosopt', 'Chondroitin / glucosamine','Citrate of Magnesia', 'Coricidin HBP Cold & Flu', 'Cefditoren',
'Ceftibuten', 'Cyclessa', 'Cortef', 'Calcium acetate', 'Cyclizine',
'Coagulation factor ix', 'Colace', 'Carmol 20', 'Calan SR',
'Cyklokapron', 'Coal tar', 'Cobicistat / darunavir', 'Calamine',
'CoQ10','Duloxetine', 'Depakote', 'Drospirenone / estradiol',
'Depo-Provera', 'Desyrel', 'Desvenlafaxine',
'Drospirenone / ethinyl estradiol', 'Doxylamine / pyridoxine',
'Demerol', 'Dextromethorphan', 'Diazepam', 'Diphenhydramine',
'Denosumab', 'Dulaglutide', 'Drysol', 'Divalproex sodium',
'Doxycycline', 'Desogestrel / ethinyl estradiol', 'Duofilm',
'Dicyclomine', 'Dexmethylphenidate', 'Diltiazem', 'Dapsone',
'Dalfampridine', 'Dilantin', 'Dienogest / estradiol', 'Diclofenac',
'Donnatal', 'Depakote ER', 'Donepezil', 'Dulcolax', 'Dulera',
'Dapagliflozin', 'Duexis', 'Differin', 'Doxepin', 'Docosanol',
'Diclegis', 'Desloratadine',
'Drospirenone / ethinyl estradiol / levomefolate calcium', 'Duac',
'Deplin', 'Doryx', 'Dilaudid', 'Dimenhydrinate', 'Delsym',
'Denavir', 'D.H.E. 45', 'Disulfiram', 'Droperidol', 'Dasatinib',
'Dextrostat', 'Dymista', 'Dextroamphetamine', 'DDAVP Rhinal Tube',
'Dabigatran', 'Dasabuvir / ombitasvir / paritaprevir / ritonavir',
'Dextromethorphan / guaifenesin', 'Diflucan', 'Debrox',
'Diphenhydramine / naproxen', 'Daklinza', 'Daliresp',
'Dihydroergotamine', 'Dinoprostone', 'Dermal filler', 'Doxylamine',
'Daytrana', 'Diprivan', 'Dexlansoprazole', 'Dovonex', 'Doral',
'Desquam-X Wash', 'Dexilant', 'Dofetilide', 'Diovan HCT', 'Detrol',
"Dimetapp Children's Cold & Cough", 'Delatestryl', 'Desipramine',
'Daclatasvir', 'Depo-Testosterone', 'Dulcolax Laxative',
'Dexamethasone', 'Dimethyl fumarate', 'Dronabinol', 'Duragesic',
'Dexedrine', 'Dupixent', 'Dramamine','Daypro', 'Dyazide', 'Deltasone', 'Depo-Medrol',
'Dapagliflozin / metformin', 'Dilaudid-HP', 'Doxorubicin',
'Deoxycholic acid',
'Dextromethorphan / phenylephrine / pyrilamine',
'Diphenhydramine / ibuprofen', 'Divigel', 'Dermatop']
model_ckpt = "sentence-transformers/multi-qa-mpnet-base-dot-v1"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
model = TFAutoModel.from_pretrained(model_ckpt, from_pt=True)
def cls_pooling(model_output):
return model_output.last_hidden_state[:, 0]
def get_embeddings(text_list):
encoded_input = tokenizer(
text_list, padding=True, truncation=True, return_tensors="tf"
)
encoded_input = {k: v for k, v in encoded_input.items()}
model_output = model(**encoded_input)
return cls_pooling(model_output)
embeddings_dataset = load_from_disk("data")
embeddings_dataset.add_faiss_index(column="embeddings")
def recommendations(question):
question_embedding = get_embeddings([question]).numpy()
scores, samples = embeddings_dataset.get_nearest_examples(
"embeddings", question_embedding, k=5
)
samples_df = pd.DataFrame.from_dict(samples)
samples_df["scores"] = scores
samples_df.sort_values("scores", ascending=False, inplace=True,ignore_index=True)
return samples_df[['drugName', 'review', 'scores']]
# Create Streamlit app
st.title("Drug Recommendation System")
st.markdown(
"""
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
</style>
""",
unsafe_allow_html=True
)
# Allow users to select a default question or input their own
st.sidebar.title("Choose or Enter a Question:")
selection_type = st.sidebar.radio("Select type:", ("Select Default", "Enter Custom"))
if selection_type == "Select Default":
selected_question = st.sidebar.selectbox("Select a question", Drugs)
if st.sidebar.button("Show Recommendations"):
recommendation_result = recommendations(selected_question)
st.header(f"Top 5 Recommended Drugs for '{selected_question}':")
st.table(recommendation_result)
else:
default_question = "I've acne problem"
custom_question = st.sidebar.text_input("Enter your question:", default_question)
if st.sidebar.button("Get Recommendations"):
if custom_question:
custom_recommendation_result = recommendations(custom_question)
st.header("Top 5 Recommended Drugs for Your Question:")
st.table(custom_recommendation_result)
else:
st.warning("Please enter a question to get recommendations.") |