File size: 4,187 Bytes
bcd23f4 31c8877 bcd23f4 e02998b 31c8877 bcd23f4 e02998b 31c8877 e02998b | 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 | from pathlib import Path
import sys
from types import SimpleNamespace
import gradio as gr
try:
import spaces
except ImportError:
def _gpu_decorator(fn=None, *args, **kwargs):
def decorator(func):
return func
if fn is None:
return decorator
if callable(fn):
return fn
return decorator
spaces = SimpleNamespace(GPU=_gpu_decorator)
sys.path.insert(0, str(Path(__file__).resolve().parent / "src"))
from multilingual_sentiment_analysis.infer import predict, predict_batch
@spaces.GPU
def analyze_single(text: str):
if not text or not text.strip():
return "β οΈ Please enter some text", ""
try:
result = predict(text.strip())
emoji = {"positive": "π’", "neutral": "π‘", "negative": "π΄"}.get(result["label"], "βͺ")
return f"{emoji} {result['label'].upper()}", f"{result['confidence'] * 100:.1f}%"
except Exception as error:
return f"β Error: {error}", ""
def analyze_batch(batch_text: str):
if not batch_text or not batch_text.strip():
return "β οΈ Please enter texts (one per line)", []
texts = [line.strip() for line in batch_text.splitlines() if line.strip()]
if not texts:
return "β οΈ Please enter at least one text", []
try:
results = predict_batch(texts)
emojis = {"positive": "π’", "neutral": "π‘", "negative": "π΄"}
rows = [
[text[:70] + "..." if len(text) > 70 else text,
f"{emojis.get(result['label'], 'βͺ')} {result['label'].upper()}",
f"{result['confidence'] * 100:.1f}%"]
for text, result in zip(texts, results)
]
sentiments = [result["label"] for result in results]
summary = (
f"β
Analyzed {len(texts)} texts | π Positive: {sentiments.count('positive')} | "
f"π Neutral: {sentiments.count('neutral')} | π Negative: {sentiments.count('negative')}"
)
return summary, rows
except Exception as error:
return f"β Error: {error}", []
custom_theme = gr.themes.Base(primary_hue="cyan", secondary_hue="slate").set(
body_background_fill="#000000", body_text_color="#00FFFF",
button_primary_background_fill="#00FFFF", button_primary_text_color="#000000",
button_primary_background_fill_hover="#00DDDD", block_title_text_color="#00FFFF",
block_label_text_color="#00FFFF", input_background_fill="#111111",
input_border_color="#00FFFF", input_placeholder_color="#666666", border_color_primary="#00FFFF",
)
with gr.Blocks(title="π Multilingual Sentiment Analysis", theme=custom_theme) as demo:
gr.Markdown("# π Multilingual Sentiment Analysis")
gr.Markdown("Analyze sentiment using a fine-tuned XLM-RoBERTa model.")
with gr.Tabs():
with gr.TabItem("π Single Text"):
with gr.Row():
with gr.Column(scale=3):
text_input = gr.Textbox(label="Enter text to analyze", placeholder="Type something to analyze...", lines=4)
with gr.Column(scale=1):
analyze_btn = gr.Button("π Analyze", size="lg", variant="primary")
with gr.Row():
sentiment_output = gr.Textbox(label="Sentiment", interactive=False)
confidence_output = gr.Textbox(label="Confidence", interactive=False)
analyze_btn.click(analyze_single, inputs=text_input, outputs=[sentiment_output, confidence_output])
with gr.TabItem("π Batch Analysis"):
batch_input = gr.Textbox(label="Enter multiple texts (one per line)", placeholder="Text 1...\nText 2...", lines=8)
batch_btn = gr.Button("π Batch Analyze", size="lg", variant="primary")
batch_summary = gr.Textbox(label="Summary", interactive=False)
batch_results = gr.Dataframe(headers=["Text", "Sentiment", "Confidence"], label="Results", interactive=False)
batch_btn.click(analyze_batch, inputs=batch_input, outputs=[batch_summary, batch_results])
gr.Markdown("---\nBuilt with β€οΈ using Gradio β’ XLM-RoBERTa")
if __name__ == "__main__":
demo.launch()
|