# 📚 Gerekli Kütüphaneler (Libraries) import re import string import gradio as gr import matplotlib.pyplot as plt import pandas as pd from langdetect import detect # Dil tespiti için from transformers import AutoTokenizer, AutoModelForSequenceClassification, TextClassificationPipeline finbert_model_name = "yiyanghkust/finbert-tone" finbert_tokenizer = AutoTokenizer.from_pretrained(finbert_model_name) finbert_model = AutoModelForSequenceClassification.from_pretrained(finbert_model_name) finbert_classifier = TextClassificationPipeline(model=finbert_model, tokenizer=finbert_tokenizer, top_k=None) xlm_model_name = "cardiffnlp/twitter-xlm-roberta-base-sentiment" xlm_tokenizer = AutoTokenizer.from_pretrained(xlm_model_name) xlm_model = AutoModelForSequenceClassification.from_pretrained(xlm_model_name) xlm_classifier = TextClassificationPipeline(model=xlm_model, tokenizer=xlm_tokenizer, top_k=None) def clean_text(text): text = text.lower() text = re.sub(r'\n', ' ', text) text = re.sub(r'\s+', ' ', text).strip() text = re.sub(r'[%s]' % re.escape(string.punctuation), '', text) return text def smart_batch_classify(user_inputs): texts = user_inputs.split('\n') # Her satır bir haber texts = [t for t in texts if t.strip() != ''] # Boşları çıkar results = [] for text in texts: original_text = text cleaned_text = clean_text(text) try: lang = detect(cleaned_text) except: lang = "unknown" if lang == "en": outputs = finbert_classifier(cleaned_text)[0] else: outputs = xlm_classifier(cleaned_text)[0] labels_scores = {out['label'].lower(): out['score'] for out in outputs} best_label = max(labels_scores, key=labels_scores.get) best_confidence = labels_scores[best_label] positive_score = labels_scores.get("positive", 0) * 100 negative_score = labels_scores.get("negative", 0) * 100 neutral_score = labels_scores.get("neutral", 0) * 100 if best_label == "positive": auto_tag = "📈 Opportunity (Fırsat)" elif best_label == "negative": auto_tag = "⚠️ Risk Alert (Risk Uyarısı)" elif best_label == "neutral": auto_tag = "ℹ️ Informational (Bilgilendirme)" else: auto_tag = "🤔 Unclassified (Sınıflandırılamadı)" results.append(( original_text, lang, best_label, best_confidence * 100, positive_score, negative_score, neutral_score, auto_tag )) df_results = pd.DataFrame(results, columns=[ "Original Text (Orijinal Metin)", "Detected Language (Tespit Edilen Dil)", "Predicted Sentiment (Tahmin Edilen Duygu)", "Best Confidence (%) (En Yüksek Güven %)", "Positive (%) (Pozitif %)", "Negative (%) (Negatif %)", "Neutral (%) (Nötr %)", "Auto Tag (Otomatik Etiket)" ]) return df_results def smart_analyze_and_filter(user_inputs, selected_sentiment): df_results = smart_batch_classify(user_inputs) if selected_sentiment != "All": df_results = df_results[df_results["Predicted Sentiment (Tahmin Edilen Duygu)"] == selected_sentiment] fig, ax = plt.subplots(figsize=(10,6)) sentiment_colors = { "positive": "green", "negative": "red", "neutral": "blue" } color_list = [sentiment_colors.get(sent, "gray") for sent in df_results["Predicted Sentiment (Tahmin Edilen Duygu)"].str.lower()] ax.bar(range(len(df_results)), df_results["Best Confidence (%) (En Yüksek Güven %)"], color=color_list) ax.set_xticks(range(len(df_results))) ax.set_xticklabels([f"News {i+1}" for i in range(len(df_results))], rotation=45) ax.set_ylabel("Best Confidence (%) (En Yüksek Güven %)") ax.set_title(f"Sentiment Confidence Trend ({selected_sentiment}) (Duygu Güveni Trend)") plt.tight_layout() return df_results, fig with gr.Blocks() as demo: # 🟩 Başlığı yeşil yaptık gr.Markdown("