Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import spacy | |
| from spacy_streamlit import visualize_ner | |
| from support_functions import HealthseaPipe | |
| import operator | |
| def visualize_pipeline(): | |
| healthsea_pipe = HealthseaPipe() | |
| color_code = { | |
| "POSITIVE": ("#3C9E58", "#1B7735"), | |
| "NEGATIVE": ("#FF166A", "#C0094B"), | |
| "NEUTRAL": ("#7E7E7E", "#4E4747"), | |
| "ANAMNESIS": ("#E49A55", "#AD6B2D"), | |
| } | |
| example_reviews = [ | |
| "This is great for joint pain.", | |
| "This help joint pain but causes rashes", | |
| "I'm diagnosed with gastritis. This product helped!", | |
| "Made my insomnia worse", | |
| "Didn't help my energy levels", | |
| ] | |
| # Functions | |
| def kpi(n, text): | |
| html = f""" | |
| <div class='kpi'> | |
| <h1>{n}</h1> | |
| <span>{text}</span> | |
| </div> | |
| """ | |
| return html | |
| def central_text(text): | |
| html = f"""<h2 class='central_text'>{text}</h2>""" | |
| return html | |
| def format_clause(text, meta, pred): | |
| html = f""" | |
| <div> | |
| <div class="clause" style="background-color:{color_code[pred][0]} ; box-shadow: 0px 5px {color_code[pred][1]}; border-color:{color_code[pred][1]};"> | |
| <div class="clause_text">{text}</div> | |
| </div> | |
| <div class="clause_meta"> | |
| <div>{meta}</div> | |
| </div> | |
| </div>""" | |
| return html | |
| def format_effect(text, pred): | |
| html = f""" | |
| <div> | |
| <div class="clause" style="background-color:{color_code[pred][0]} ; box-shadow: 0px 5px {color_code[pred][1]}; border-color:{color_code[pred][1]};"> | |
| <div class="clause_text">{text}</div> | |
| </div> | |
| </div>""" | |
| return html | |
| load_state = st.markdown ("#### Loading...") | |
| # Load model | |
| try: | |
| load_state.markdown ("#### Loading model...") | |
| nlp = spacy.load("en_healthsea") | |
| # Download model | |
| except LookupError: | |
| import nltk | |
| import benepar | |
| load_state.markdown ("#### Downloading model...") | |
| benepar.download('benepar_en3') | |
| load_state.markdown ("#### Loading done!") | |
| # Pipeline | |
| st.markdown("""---""") | |
| st.markdown(central_text("โ๏ธ Pipeline"), unsafe_allow_html=True) | |
| check = st.checkbox("Use predefined examples") | |
| if not check: | |
| text = st.text_input(label="Write a review", value="This is great for joint pain!") | |
| else: | |
| text = st.selectbox("Predefined example reviews", example_reviews) | |
| doc = nlp(text) | |
| # NER | |
| visualize_ner( | |
| doc, | |
| labels=nlp.get_pipe("ner").labels, | |
| show_table=False, | |
| title="โจ Named Entity Recognition", | |
| colors={"CONDITION": "#FF4B76", "BENEFIT": "#629B68"}, | |
| ) | |
| st.markdown("""---""") | |
| # Segmentation, Blinding, Classification | |
| st.markdown("## ๐ฎ Segmentation, Blinding, Classification") | |
| clauses = healthsea_pipe.get_clauses(doc) | |
| for doc_clause, clause in zip(clauses, doc._.clauses): | |
| classification = max(clause["cats"].items(), key=operator.itemgetter(1))[0] | |
| percentage = round(float(clause["cats"][classification]) * 100, 2) | |
| meta = f"{clause['ent_name']} ({classification} {percentage}%)" | |
| st.markdown( | |
| format_clause(doc_clause.text, meta, classification), unsafe_allow_html=True | |
| ) | |
| st.markdown("\n") | |
| st.markdown("""---""") | |
| # Aggregation | |
| st.markdown("## ๐ Aggregation") | |
| for effect in doc._.health_effects: | |
| st.markdown( | |
| format_effect( | |
| f"{doc._.health_effects[effect]['effect']} effect on {effect}", | |
| doc._.health_effects[effect]["effect"], | |
| ), | |
| unsafe_allow_html=True, | |
| ) | |
| st.markdown("\n") | |
| st.markdown("""---""") | |
| # Indepth | |
| st.markdown("## ๐ง Pipeline attributes") | |
| clauses_col, effect_col = st.columns(2) | |
| clauses_col.markdown("### doc._.clauses") | |
| for clause in doc._.clauses: | |
| clauses_col.json(clause) | |
| effect_col.markdown("### doc._.health_effects") | |
| effect_col.json(doc._.health_effects) | |