| """ |
| Gradio App for Multilingual Sentiment Analysis |
| """ |
|
|
| import gradio as gr |
| from sentiment_analyzer import MultilingualSentimentAnalyzer |
|
|
| def analyze_sentiment(text, language, method): |
| """Analyze sentiment and return formatted results""" |
| if not text or not text.strip(): |
| return "Please enter some text to analyze." |
| |
| try: |
| analyzer = MultilingualSentimentAnalyzer(language=language, method=method) |
| result = analyzer.analyze(text) |
| |
| |
| output = f""" |
| ## Sentiment Analysis Results |
| |
| **Polarity:** {result['polarity'].upper()} |
| **Confidence:** {result['confidence']*100:.1f}% |
| |
| **Scores:** |
| - Positive: {result['positive_score']:.2f} |
| - Negative: {result['negative_score']:.2f} |
| |
| **Details:** |
| - Method: {result['method']} |
| - Language: {result['language']} |
| - Words analyzed: {result.get('word_count', 0)} |
| """ |
| |
| return output |
| except Exception as e: |
| return f"Error: {str(e)}" |
|
|
| def batch_analyze(texts, language, method): |
| """Analyze multiple texts""" |
| if not texts: |
| return "Please enter texts to analyze (one per line)." |
| |
| text_list = [t.strip() for t in texts.split('\n') if t.strip()] |
| if not text_list: |
| return "No valid texts found." |
| |
| try: |
| analyzer = MultilingualSentimentAnalyzer(language=language, method=method) |
| results = analyzer.analyze_batch(text_list) |
| stats = analyzer.get_statistics(text_list) |
| |
| output = f""" |
| ## Batch Analysis Results |
| |
| **Statistics:** |
| - Total texts: {stats['total_texts']} |
| - Average confidence: {stats['average_confidence']*100:.1f}% |
| |
| **Polarity Distribution:** |
| """ |
| for polarity, percentage in stats['polarity_percentages'].items(): |
| output += f"- {polarity.capitalize()}: {percentage}%\n" |
| |
| output += "\n**Individual Results:**\n" |
| for i, (text, result) in enumerate(zip(text_list, results), 1): |
| output += f"\n{i}. \"{text[:50]}...\" → {result['polarity']} ({result['confidence']*100:.1f}%)\n" |
| |
| return output |
| except Exception as e: |
| return f"Error: {str(e)}" |
|
|
| |
| with gr.Blocks(title="Multilingual Sentiment Analysis", theme=gr.themes.Soft()) as demo: |
| gr.Markdown(""" |
| # 🌍 Multilingual Sentiment Analysis Tool |
| |
| Analyze sentiment in **English**, **Turkish**, and **Persian** text using non-deep-learning approaches. |
| |
| This tool uses lexicon-based, rule-based, and hybrid methods for interpretable sentiment analysis. |
| """) |
| |
| with gr.Tabs(): |
| with gr.TabItem("Single Text Analysis"): |
| with gr.Row(): |
| with gr.Column(): |
| text_input = gr.Textbox( |
| label="Enter Text", |
| placeholder="Type your text here...", |
| lines=5 |
| ) |
| language = gr.Dropdown( |
| choices=["english", "turkish", "persian"], |
| value="english", |
| label="Language" |
| ) |
| method = gr.Dropdown( |
| choices=["lexicon", "rule", "hybrid"], |
| value="hybrid", |
| label="Analysis Method" |
| ) |
| analyze_btn = gr.Button("Analyze Sentiment", variant="primary") |
| |
| with gr.Column(): |
| output = gr.Markdown(label="Results") |
| |
| analyze_btn.click( |
| fn=analyze_sentiment, |
| inputs=[text_input, language, method], |
| outputs=output |
| ) |
| |
| with gr.TabItem("Batch Analysis"): |
| with gr.Row(): |
| with gr.Column(): |
| batch_texts = gr.Textbox( |
| label="Enter Texts (one per line)", |
| placeholder="Enter multiple texts, one per line...", |
| lines=10 |
| ) |
| batch_language = gr.Dropdown( |
| choices=["english", "turkish", "persian"], |
| value="english", |
| label="Language" |
| ) |
| batch_method = gr.Dropdown( |
| choices=["lexicon", "rule", "hybrid"], |
| value="hybrid", |
| label="Analysis Method" |
| ) |
| batch_btn = gr.Button("Analyze Batch", variant="primary") |
| |
| with gr.Column(): |
| batch_output = gr.Markdown(label="Batch Results") |
| |
| batch_btn.click( |
| fn=batch_analyze, |
| inputs=[batch_texts, batch_language, batch_method], |
| outputs=batch_output |
| ) |
| |
| with gr.TabItem("Examples"): |
| gr.Markdown(""" |
| ### Example Texts to Try: |
| |
| **English:** |
| - "I love this product! It's absolutely amazing!!! 😊" |
| - "This is terrible. I hate it." |
| - "Not bad, actually it's quite good!" |
| |
| **Turkish:** |
| - "Bu ürünü çok seviyorum! Harika!" |
| - "Berbat bir deneyim. Hiç beğenmedim." |
| |
| **Persian:** |
| - "این محصول عالی است!" |
| - "خیلی بد بود" |
| """) |
| |
| gr.Markdown(""" |
| --- |
| **About:** This tool uses lexicon-based, rule-based, and hybrid approaches (without deep learning) |
| for interpretable sentiment analysis. Supports English, Turkish, and Persian languages. |
| """) |
|
|
| if __name__ == "__main__": |
| demo.launch() |
|
|