BasitAliii's picture
Update app.py
3ec6a10 verified
Raw
History Blame Contribute Delete
6.02 kB
import re
import gradio as gr
import spaces
# ============================================================
# RULE-BASED SENTIMENT WORDS
# ============================================================
POSITIVE_WORDS = {
"good",
"great",
"excellent",
"amazing",
"awesome",
"happy",
"love",
"like",
"wonderful",
"fantastic",
"best",
"beautiful",
"perfect",
"nice",
"enjoy",
"enjoyed",
"helpful",
"successful",
"success",
"brilliant",
"positive",
"thank",
"thanks"
}
NEGATIVE_WORDS = {
"bad",
"terrible",
"awful",
"horrible",
"sad",
"hate",
"dislike",
"worst",
"poor",
"ugly",
"wrong",
"disappointing",
"disappointed",
"failure",
"fail",
"failed",
"negative",
"angry",
"boring",
"problem",
"problems",
"difficult",
"useless",
"slow",
"broken"
}
# ============================================================
# SENTIMENT ANALYZER
# ============================================================
# ZeroGPU requires a @spaces.GPU function to be registered
# with the Gradio event system.
#
# This application does NOT actually perform GPU computation.
# The decorator is only required because this Space is using
# ZeroGPU hardware.
# ============================================================
@spaces.GPU(duration=1)
def sentiment_analyzer(text):
# --------------------------------------------------------
# Check empty input
# --------------------------------------------------------
if not text or not text.strip():
return "⚠️ Please enter a sentence."
# --------------------------------------------------------
# Convert text to lowercase
# --------------------------------------------------------
text = text.lower()
# --------------------------------------------------------
# Extract words
# --------------------------------------------------------
words = re.findall(r"\b\w+\b", text)
# --------------------------------------------------------
# Find positive words
# --------------------------------------------------------
positive_matches = [
word
for word in words
if word in POSITIVE_WORDS
]
# --------------------------------------------------------
# Find negative words
# --------------------------------------------------------
negative_matches = [
word
for word in words
if word in NEGATIVE_WORDS
]
# --------------------------------------------------------
# Count sentiment words
# --------------------------------------------------------
positive_count = len(positive_matches)
negative_count = len(negative_matches)
# --------------------------------------------------------
# Sentiment decision
# --------------------------------------------------------
if positive_count > negative_count:
sentiment = "😊 Positive"
elif negative_count > positive_count:
sentiment = "😞 Negative"
else:
sentiment = "😐 Neutral"
# --------------------------------------------------------
# Create result
# --------------------------------------------------------
result = f"""
Sentiment: {sentiment}
Positive words detected: {positive_count}
Negative words detected: {negative_count}
Positive matches:
{", ".join(positive_matches) if positive_matches else "None"}
Negative matches:
{", ".join(negative_matches) if negative_matches else "None"}
"""
return result
# ============================================================
# GRADIO INTERFACE
# ============================================================
with gr.Blocks(
title="Rule-Based Sentiment Analysis"
) as app:
# --------------------------------------------------------
# Header
# --------------------------------------------------------
gr.Markdown(
"""
# πŸ“ Rule-Based Sentiment Analysis
Analyze the sentiment of a sentence using
**manually defined rules and keywords**.
### Sentiment Categories
😊 **Positive**
😞 **Negative**
😐 **Neutral**
---
**How it works**
The application checks the words in your sentence
against predefined positive and negative word lists.
**No AI model β€’ No API β€’ No Machine Learning**
"""
)
# --------------------------------------------------------
# Text input
# --------------------------------------------------------
text_input = gr.Textbox(
label="Enter your sentence",
placeholder="Example: I really love this application!",
lines=4
)
# --------------------------------------------------------
# Analyze button
# --------------------------------------------------------
analyze_button = gr.Button(
"Analyze Sentiment",
variant="primary"
)
# --------------------------------------------------------
# Output
# --------------------------------------------------------
output = gr.Textbox(
label="Analysis Result",
lines=10,
interactive=False
)
# --------------------------------------------------------
# Button event
# --------------------------------------------------------
analyze_button.click(
fn=sentiment_analyzer,
inputs=text_input,
outputs=output
)
# --------------------------------------------------------
# Clear button
# --------------------------------------------------------
gr.ClearButton(
components=[
text_input,
output
],
value="Clear"
)
# ============================================================
# LAUNCH
# ============================================================
if __name__ == "__main__":
app.launch()