Team Ai
Apppublic

shujath000/stack_overflow

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
streamlit_app.py125 linesDownload Raw Back to src
1import os2import streamlit as st3import pandas as pd4import joblib5import numpy as np6import string7import nltk8from nltk.corpus import stopwords as stp9from nltk import pos_tag, word_tokenize as w, sent_tokenize as s10from nltk.stem import WordNetLemmatizer as wl11NLTK_DATA_PATH = "/app/nltk_data"12os.makedirs(NLTK_DATA_PATH, exist_ok=True)13os.environ["NLTK_DATA"] = NLTK_DATA_PATH14nltk.download('punkt_tab', quiet=True)15nltk.download('punkt_tab', download_dir=NLTK_DATA_PATH, quiet=True)16nltk.download('punkt', download_dir=NLTK_DATA_PATH, quiet=True)17nltk.download('averaged_perceptron_tagger', download_dir=NLTK_DATA_PATH, quiet=True)18nltk.download('wordnet', download_dir=NLTK_DATA_PATH, quiet=True)19nltk.download('stopwords', download_dir=NLTK_DATA_PATH, quiet=True)20# Download necessary NLTK data21#nltk.download('punkt', quiet=True)22#nltk.download('averaged_perceptron_tagger', quiet=True)23#nltk.download('wordnet', quiet=True)24#nltk.download('stopwords', quiet=True)25nltk.download('punkt', download_dir=NLTK_DATA_PATH, quiet=True)26nltk.download('averaged_perceptron_tagger_eng', download_dir=NLTK_DATA_PATH, quiet=True)27nltk.download('wordnet', download_dir=NLTK_DATA_PATH, quiet=True)28nltk.download('stopwords', download_dir=NLTK_DATA_PATH, quiet=True)29 30# === Cleaning Function ===31def sahi_karneka_function(x):32    nouns=[]33    li=[]34    lem=wl()35    l=s(x) 36    for i in l:37        d=w(i.lower())38        for k in d:39            li.append(k)40    lw=len(li)41    j=042    while j<lw:43        if li[j] in string.punctuation:44            li.remove(li[j])45            lw=len(li)46            j=047        elif li[j] in stp.words("english"):48            li.remove(li[j])49            lw=len(li)50            j=051        else:52            j=j+153    tags=pos_tag(li)54    for word,tag in tags:55        if tag.startswith("NN") or tag.startswith("V"):56            nouns.append(word)57    semi_final_words=[lem.lemmatize(m,pos="n") if tagg.startswith("NN") else lem.lemmatize(m,pos="v") for m,tagg in pos_tag(nouns)]58    final_sentence=" ".join(semi_final_words)59    return final_sentence60 61# === Load Data and Models ===62df = pd.read_csv(r"src/c_d.csv")63model = joblib.load("src/logistic_models.pkl")64tfidf = joblib.load("src/tfidf.pkl")65ml = joblib.load("src/multilabels.pkl")66 67# === Streamlit UI ===68st.title("๐Ÿง  Multi-Label Question Tag Predictor")69 70# --- Select a URL for context ---71selected_url = st.selectbox("Select a question URL (for context):", df['questions_url'])72st.markdown(f"๐Ÿ”— [Open selected question]({selected_url})")73 74# --- Session State ---75if "user_input" not in st.session_state:76    st.session_state["user_input"] = ""77if "clear_input" not in st.session_state:78    st.session_state["clear_input"] = False79 80# --- Clear input if flagged (AFTER rerun) ---81if st.session_state.clear_input:82    st.session_state.user_input = ""83    st.session_state.clear_input = False84 85# --- Input box ---86st.text_area("โœ๏ธ Type your question here:", key="user_input", height=150)87 88# --- Predict button ---89if st.button("Predict Tags"):90    final_question = st.session_state.user_input.strip()91 92    if not final_question:93        st.warning("โš ๏ธ Please enter a question.")94    else:95        with st.spinner("๐Ÿ” Predicting tags..."):96            # Step 1: Clean input97            cleaned = sahi_karneka_function(final_question)98 99            # Step 2: TF-IDF100            f=[]101            f.append(cleaned)102            x_tfidf = tfidf.transform(f)103 104            # Step 3: Predict105            y_probs = model.predict_proba(x_tfidf)106            threshold = 0.55107            y_predd=model.predict(x_tfidf)108            probs_column1 = np.array([i[:, 1] for i in y_probs]).T109            y_pred = (probs_column1 >= threshold).astype(int)110 111            # Step 4: Decode112            predicted_tags = ml.inverse_transform(y_predd)113 114            # Step 5: Display results115            st.success("โœ… Predicted Tags:")116            if predicted_tags and predicted_tags[0]:117                for tag in predicted_tags[0]:118                    st.markdown(f"๐Ÿ”น **`{tag}`**")119            else:120                st.info("No tags matched the threshold.")121 122        # Step 6: Show a "Clear" button123        if st.button("Clear Input"):124            st.session_state.user_input = ""125