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()