import gradio as gr from transformers import pipeline model_name = "ZombitX64/MultiSent-E5" nlp = pipeline("sentiment-analysis", model=model_name) label_map = { "LABEL_0": 0, "LABEL_1": 1, "LABEL_2": 2, "LABEL_3": 3 } label_name_map = { "LABEL_0": "question", "LABEL_1": "negative", "LABEL_2": "neutral", "LABEL_3": "positive" } def analyze_text(text): # แยกประโยคโดยใช้ \n หรือจุด import re sentences = [s.strip() for s in re.split(r'[.\n]', text) if s.strip()] if not sentences: return "❗ กรุณาใส่ข้อความที่ต้องการวิเคราะห์" # สีและไอคอนสำหรับแต่ละ sentiment sentiment_style = { "positive": {"emoji": "😊", "color": "#4CAF50", "bg": "#E8F5E8"}, "negative": {"emoji": "😔", "color": "#F44336", "bg": "#FFEBEE"}, "neutral": {"emoji": "😐", "color": "#FF9800", "bg": "#FFF3E0"}, "question": {"emoji": "❓", "color": "#2196F3", "bg": "#E3F2FD"} } results = [] results.append("📊 **ผลการวิเคราะห์ความรู้สึก**\n" + "="*50 + "\n") for i, sentence in enumerate(sentences, 1): result = nlp(sentence)[0] label = result['label'] score = result['score'] code = label_map.get(label, -1) label_name = label_name_map.get(label, label) # ดึงสไตล์ตาม sentiment style = sentiment_style.get(label_name, {"emoji": "🔍", "color": "#666666", "bg": "#F5F5F5"}) # สร้าง progress bar สำหรับความมั่นใจ bar_length = int(score * 20) # 20 คือความยาวของ progress bar progress_bar = "█" * bar_length + "░" * (20 - bar_length) result_text = f""" 🔸 **ประโยคที่ {i}:** "{sentence}" {style['emoji']} **ผลวิเคราะห์:** {label_name.upper()} (รหัส: {code}) 📈 **ความมั่นใจ:** {score:.2f} ({score*100:.1f}%) {progress_bar} {score:.2f} {'─' * 60} """ results.append(result_text) # เพิ่มสรุปผลรวม total_sentences = len(sentences) results.append(f"\n📋 **สรุป:** วิเคราะห์ทั้งหมด {total_sentences} ประโยค") return "\n".join(results) demo = gr.Interface( fn=analyze_text, inputs=gr.Textbox( lines=6, placeholder="💬 พิมพ์ข้อความหลายประโยคที่นี่...\n\n✨ คำแนะนำ:\n• แยกแต่ละประโยคด้วยจุด (.) หรือขึ้นบรรทัดใหม่\n• สามารถใส่ได้หลายประโยคพร้อมกัน\n• รองรับข้อความภาษาไทย", label="📝 ข้อความที่ต้องการวิเคราะห์" ), outputs=gr.Textbox( label="📊 ผลการวิเคราะห์ความรู้สึก", lines=15, show_copy_button=True ), title="🧠 AI วิเคราะห์ความรู้สึกภาษาไทย", description="""
วิเคราะห์ความรู้สึกในข้อความภาษาไทยด้วย AI | รองรับการวิเคราะห์หลายประโยคพร้อมกัน