beyterburak's picture
Create app.py
808e015 verified
raw
history blame
3.34 kB
import gradio as gr
from transformers import pipeline
# Sentiment analysis model'ini yükle
sentiment_pipeline = pipeline(
"sentiment-analysis",
model="cardiffnlp/twitter-roberta-base-sentiment-latest",
top_k=None
)
def analyze_sentiment(text):
"""
Verilen metni analiz eder ve duygu sonucunu döner.
Args:
text (str): Analiz edilecek metin
Returns:
dict: Sentiment etiketi ve skorları
"""
if not text or text.strip() == "":
return {
"error": "Please provide a text to analyze",
"sentiment": "neutral",
"score": 0.5
}
try:
# Model'den tahmin al
results = sentiment_pipeline(text)[0]
# En yüksek skora sahip sentiment'i bul
top_result = max(results, key=lambda x: x['score'])
# Label'ı normalize et (positive, negative, neutral)
label = top_result['label'].lower()
score = top_result['score']
# Label mapping (model'e göre değişebilir)
sentiment_map = {
'positive': 'positive',
'pos': 'positive',
'negative': 'negative',
'neg': 'negative',
'neutral': 'neutral',
'neu': 'neutral'
}
sentiment = sentiment_map.get(label, 'neutral')
# Negative için score'u normalize et
if sentiment == 'negative':
score = 1.0 - score
return {
"sentiment": sentiment,
"score": round(score, 4),
"all_scores": results
}
except Exception as e:
return {
"error": str(e),
"sentiment": "neutral",
"score": 0.5
}
# Gradio arayüzü oluştur
def gradio_interface(text):
result = analyze_sentiment(text)
if "error" in result:
return f"⚠️ Error: {result['error']}\n\nDefault: {result['sentiment']} ({result['score']})"
sentiment = result['sentiment']
score = result['score']
# Emoji ekle
emoji_map = {
'positive': '😊',
'negative': '😞',
'neutral': '😐'
}
emoji = emoji_map.get(sentiment, '😐')
output = f"{emoji} **Sentiment:** {sentiment.upper()}\n"
output += f"📊 **Score:** {score}\n\n"
output += "**All Scores:**\n"
for item in result['all_scores']:
output += f"- {item['label']}: {item['score']:.4f}\n"
return output
# Gradio UI
demo = gr.Interface(
fn=gradio_interface,
inputs=gr.Textbox(
lines=3,
placeholder="Enter text to analyze sentiment...",
label="Input Text"
),
outputs=gr.Markdown(label="Sentiment Analysis Result"),
title="🤖 Sentiment Analysis API",
description="Real-time sentiment analysis using Hugging Face Transformers. Analyzes text and returns positive, negative, or neutral sentiment with confidence scores.",
examples=[
["This is amazing! I love it!"],
["I'm so sad and disappointed."],
["The weather is okay today."],
["Bu harika bir gün! Çok mutluyum."],
["Berbat bir deneyimdi, hiç beğenmedim."]
],
theme=gr.themes.Soft(),
api_name="analyze"
)
if __name__ == "__main__":
demo.launch()