import gradio as gr import matplotlib.pyplot as plt from transformers import pipeline import langdetect # Laad de modellen translator = pipeline("translation", model="Helsinki-NLP/opus-mt-mul-en") classifier = pipeline("sentiment-analysis", model="cardiffnlp/twitter-roberta-base-sentiment") # Functie om meerdere zinnen te vertalen en analyseren def analyze_multilingual_sentences(text): if not text.strip(): return "

โš ๏ธ Enter some text to analyze.

", None # Splits de input op nieuwe regels (elke regel is een aparte zin) sentences = [s.strip() for s in text.split("\n") if s.strip()] # Detecteer de taal van de eerste zin als referentie detected_lang = langdetect.detect(sentences[0]) if sentences else "en" # Vertaal alleen als de tekst NIET in het Engels is if detected_lang != "en": translated_sentences = [translator(sentence)[0]['translation_text'] for sentence in sentences] else: translated_sentences = sentences # Voer sentimentanalyse uit op de (vertaalde) tekst results = classifier(translated_sentences) # Tel het aantal positieve, negatieve en neutrale resultaten positive_count = sum(1 for r in results if r['label'] == "LABEL_2") # POSITIVE negative_count = sum(1 for r in results if r['label'] == "LABEL_0") # NEGATIVE neutral_count = len(results) - (positive_count + negative_count) # NEUTRAL # Maak een overzichtelijke output met aangepaste teksten output = "

๐ŸŒ Sentiment Analysis Results:


" for original, translated, result in zip(sentences, translated_sentences, results): sentiment_label = result['label'] score = result['score'] # Aangepaste tekst per sentiment if sentiment_label == "LABEL_2": sentiment = "WOW! Couldn't feel better." color = "green" elif sentiment_label == "LABEL_0": sentiment = "So sorry ... What could make you feel better?" color = "red" else: sentiment = "Just neutral today." color = "blue" output += f"

๐Ÿ“Œ '{original}'

" if detected_lang != "en": # Alleen vertaling tonen als invoer niet in het Engels is output += f"

๐Ÿ”„ Translation: {translated}

" output += f"

๐Ÿ“Š {sentiment} ({score:.2f})


" # Maak een grafiek met de sentimentverdeling labels = ["Positive", "Neutral", "Negative"] values = [positive_count, neutral_count, negative_count] colors = ["#FFA500", "#2196F3", "#F44336"] # Oranje, Blauw, Rood fig, ax = plt.subplots() ax.pie(values, labels=labels, autopct='%1.1f%%', startangle=90, colors=colors) ax.axis("equal") # Gelijke assen voor een ronde taartdiagram return output, fig # Voorbeeldzinnen example_sentences_top = [ "I just won the lottery!", "My phone battery died in the middle of an important call.", "This weather is so boring." ] example_sentences_bottom = [ "I woke up at 5 AM and went for a run.", "This is the worst movie I have ever seen.", "Just got a puppy, and I'm in love!", "The internet is so slow today.", "I spilled coffee on my laptop, disaster!", "I finally finished my project, time to celebrate!" ] # Functie om een voorbeeldzin toe te voegen aan het invoerveld zonder te overschrijven def add_example_text(current_text, example): if current_text.strip(): return f"{current_text}\n{example}" return example # Gradio-interface met duidelijke instructies en styling with gr.Blocks(css=".orange-btn {background-color: #FFA500 !important; color: black !important; font-weight: bold; font-size: 16px; padding: 10px 20px; border-radius: 8px; border: none; cursor: pointer;} .orange-btn:hover {background-color: #FF8C00 !important;}") as demo: gr.Markdown( """
Enter sentences in any language, one per line. This AI-powered app translates, analyzes the vibe, and shows the results in a cool summary & chart.
""" ) input_box = gr.Textbox( lines=5, placeholder="Hey there! Drop some sentences (one per line) and get instant sentiment vibesโ€”positive, neutral, or negative...", label="Enter your own sentences" ) # Voorbeeldzinnen bovenaan (toevoegen aan invoerveld) gr.Markdown("

๐Ÿ’ก Or try these sentences:

") with gr.Row(): for example in example_sentences_top: gr.Button(example).click(add_example_text, inputs=[input_box, gr.Textbox(value=example, visible=False)], outputs=input_box, queue=False) # Oranje knop voor sentimentanalyse (correct toegepast) analyze_button = gr.Button("Tell me how I feel", elem_classes="orange-btn") output_box = gr.HTML(label="Results") plot_box = gr.Plot(label="Sentiment Distribution") analyze_button.click(analyze_multilingual_sentences, inputs=input_box, outputs=[output_box, plot_box]) # Voorbeeldzinnen onderaan (toevoegen aan invoerveld) gr.Markdown("

๐Ÿ’ก Or try more sentences:

") with gr.Row(): for example in example_sentences_bottom: gr.Button(example).click(add_example_text, inputs=[input_box, gr.Textbox(value=example, visible=False)], outputs=input_box, queue=False) # Start de app demo.launch(share=True)