File size: 1,990 Bytes
8ca7cd0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer
from transformers import pipeline

# πŸ”§ Must be first Streamlit command
st.set_page_config(page_title="Keyword & Summary Bot", page_icon="🧠")

# πŸ“¦ Load models only once
@st.cache_resource
def load_models():
    kw_model = KeyBERT(SentenceTransformer('all-MiniLM-L6-v2'))
    summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
    return kw_model, summarizer

kw_model, summarizer = load_models()

# 🧠 UI
st.title("πŸ€– NLP Assistant: Keyword Extractor & Summarizer")
st.write("Welcome! Select a task below and enter your text to get smart results.")

# 🧭 Task Selection
task = st.selectbox("Choose your task:", ["Select task", "Keyword Extraction", "Text Summarization"])

# ✏️ User Input
user_input = st.text_area("Enter your text here:")

# πŸš€ Submit Button
if st.button("Submit") and user_input.strip():

    # πŸ”‘ Keyword Extraction
    if task == "Keyword Extraction":
        keywords = kw_model.extract_keywords(
            user_input,
            keyphrase_ngram_range=(1, 2),
            stop_words='english',
            top_n=5
        )
        keyword_list = [kw[0] for kw in keywords]
        st.success(f"πŸ”‘ Keywords: {', '.join(keyword_list)}")

    # πŸ“ƒ Text Summarization
    elif task == "Text Summarization":
        if len(user_input.split()) < 50:
            st.warning("⚠️ Enter a longer paragraph (at least 50 words) for better summarization.")
        elif len(user_input.split()) > 500:
            st.warning("⚠️ Your input is too long. Try to shorten it below 500 words.")
        else:
            summary = summarizer(
                user_input,
                max_length=100,
                min_length=30,
                do_sample=False
            )
            st.success(f"πŸ“ƒ Summary: {summary[0]['summary_text']}")

    else:
        st.warning("⚠️ Please select a task to perform.")