File size: 2,313 Bytes
e56279f
 
 
fc959be
 
 
 
 
e56279f
fc959be
 
 
 
 
e56279f
fc959be
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from transformers import pipeline

# 1️⃣ Lazy‑load your pipelines
summarizer = None
sentiment  = None
classifier = None
ner        = None

def get_summarizer():
    global summarizer
    if summarizer is None:
        summarizer = pipeline("summarization", model="Curative/t5-summarizer-cnn")
    return summarizer

def get_sentiment():
    global sentiment
    if sentiment is None:
        sentiment = pipeline("sentiment-analysis", model="DT12the/distilbert-sentiment-analysis")
    return sentiment

def get_classifier():
    global classifier
    if classifier is None:
        classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")
    return classifier

def get_ner():
    global ner
    if ner is None:
        ner = pipeline("ner", model="dslim/bert-base-NER", aggregation_strategy="simple")
    return ner

# 2️⃣ Processing function
def process(text, features):
    """Run only the selected features on the input text."""
    results = {}
    if "Summarization" in features:
        summ = get_summarizer()(text, max_length=150, min_length=40, do_sample=False)[0]["summary_text"]
        results["summary"] = summ
    if "Sentiment" in features:
        sent = get_sentiment()(text)[0]
        results["sentiment"] = sent
    if "Classification" in features:
        cls = get_classifier()(text)[0]
        results["classification"] = cls
    if "Entities" in features:
        ents = get_ner()(text)
        # Format entities as list of dicts
        results["entities"] = [{"word": e["word"], "type": e["entity_group"]} for e in ents]
    return results

# 3️⃣ Build the Gradio Blocks UI
with gr.Blocks() as demo:
    gr.Markdown("## 📚 Multi‑Feature NLP Demo")
    text_input = gr.Textbox(lines=5, placeholder="Enter your text here…")
    feature_select = gr.CheckboxGroup(
        choices=["Summarization", "Sentiment", "Classification", "Entities"],
        label="Select features to run",
        info="You can pick one or more models to apply"
    )
    run_button = gr.Button("Run")
    output = gr.JSON(label="Results")

    run_button.click(
        fn=process,
        inputs=[text_input, feature_select],
        outputs=output
    )

# 4️⃣ Launch with API enabled
demo.queue(api_open=True).launch()