KYTHY commited on
Commit
f83555e
·
verified ·
1 Parent(s): 06006a5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -22
app.py CHANGED
@@ -73,28 +73,47 @@ def analyze_text(text):
73
  return float(score)
74
 
75
  def summarize_texts(news_texts):
76
- """สรุปข่าวแต่ละข่าว 1 พารากราฟ"""
77
  summaries = []
78
- for text in news_texts:
 
 
 
 
79
  if not text.strip():
80
  summaries.append("")
81
- continue
82
- try:
83
- summary = summarizer(text, max_length=100, min_length=30, do_sample=False)[0]["summary_text"]
84
- summaries.append(summary)
85
- except:
86
- summaries.append(text) # fallback ถ้าโมเดลล้ม
 
 
 
 
87
  return summaries
88
 
89
  def summarize_themes(news_texts):
90
- """สรุปธีมข่าวด้วย Zero-shot classification"""
91
  themes = []
92
- for text in news_texts:
 
 
 
 
93
  if not text.strip():
94
  themes.append("Unknown")
95
- continue
96
- result = theme_classifier(text, candidate_labels)
97
- themes.append(result["labels"][0])
 
 
 
 
 
 
 
98
  return themes
99
 
100
  # --------------------------
@@ -219,10 +238,14 @@ def main():
219
  news_df["sentiment"] = news_df["text"].apply(analyze_text)
220
  news_df["date"] = pd.to_datetime(news_df["date"])
221
 
222
- # สรุปข่าวเป็น 1 พารากราฟ
223
  st.info("กำลังสรุปเนื้อหาข่าว...")
224
  news_df["text"] = summarize_texts(news_df["text"].tolist())
225
 
 
 
 
 
226
  # Metrics
227
  avg_sentiment = news_df["sentiment"].mean()
228
  pos_pct = (news_df["sentiment"] > 0.1).mean() * 100
@@ -233,14 +256,6 @@ def main():
233
  col2.metric("ข่าวเชิงบวก", f"{pos_pct:.1f}%")
234
  col3.metric("ข่าวเชิงลบ", f"{neg_pct:.1f}%")
235
 
236
- # ธีมข่าว
237
- st.subheader("📰 ธีมข่าว (Top Theme per Article)")
238
- news_df["theme"] = summarize_themes(news_df["text"].tolist())
239
- theme_counts = news_df["theme"].value_counts()
240
- st.bar_chart(theme_counts)
241
-
242
- # ... ส่วนกราฟ Sentiment & Price เหมือนเดิม (ข้ามตรงนี้เพื่อไม่ให้ยาวเกินไป) ...
243
-
244
  # แสดงรายการข่าว
245
  st.subheader("📰 รายการข่าวทั้งหมด")
246
  st.dataframe(news_df[["date", "source", "text", "sentiment", "theme", "url"]], use_container_width=True)
 
73
  return float(score)
74
 
75
  def summarize_texts(news_texts):
76
+ """สรุปข่าวแต่ละข่าว 1 พารากราฟ พร้อม progress bar"""
77
  summaries = []
78
+ progress_text = st.empty()
79
+ progress_bar = st.progress(0)
80
+ total = len(news_texts)
81
+
82
+ for i, text in enumerate(news_texts):
83
  if not text.strip():
84
  summaries.append("")
85
+ else:
86
+ try:
87
+ summary = summarizer(text, max_length=100, min_length=30, do_sample=False)[0]["summary_text"]
88
+ summaries.append(summary)
89
+ except:
90
+ summaries.append(text)
91
+ progress_text.text(f"กำลังสรุปข่าว {i+1}/{total}")
92
+ progress_bar.progress((i+1)/total)
93
+ progress_bar.empty()
94
+ progress_text.empty()
95
  return summaries
96
 
97
  def summarize_themes(news_texts):
98
+ """สรุปธีมข่าวแต่ละข่าว พร้อม progress bar"""
99
  themes = []
100
+ progress_text = st.empty()
101
+ progress_bar = st.progress(0)
102
+ total = len(news_texts)
103
+
104
+ for i, text in enumerate(news_texts):
105
  if not text.strip():
106
  themes.append("Unknown")
107
+ else:
108
+ try:
109
+ result = theme_classifier(text, candidate_labels)
110
+ themes.append(result["labels"][0])
111
+ except:
112
+ themes.append("Unknown")
113
+ progress_text.text(f"กำลังสรุปธีมข่าว {i+1}/{total}")
114
+ progress_bar.progress((i+1)/total)
115
+ progress_bar.empty()
116
+ progress_text.empty()
117
  return themes
118
 
119
  # --------------------------
 
238
  news_df["sentiment"] = news_df["text"].apply(analyze_text)
239
  news_df["date"] = pd.to_datetime(news_df["date"])
240
 
241
+ # สรุปข่าวเป็น 1 พารากราฟ พร้อม progress bar
242
  st.info("กำลังสรุปเนื้อหาข่าว...")
243
  news_df["text"] = summarize_texts(news_df["text"].tolist())
244
 
245
+ # สรุปธีมข่าวพร้อม progress bar
246
+ st.info("กำลังสรุปธีมข่าว...")
247
+ news_df["theme"] = summarize_themes(news_df["text"].tolist())
248
+
249
  # Metrics
250
  avg_sentiment = news_df["sentiment"].mean()
251
  pos_pct = (news_df["sentiment"] > 0.1).mean() * 100
 
256
  col2.metric("ข่าวเชิงบวก", f"{pos_pct:.1f}%")
257
  col3.metric("ข่าวเชิงลบ", f"{neg_pct:.1f}%")
258
 
 
 
 
 
 
 
 
 
259
  # แสดงรายการข่าว
260
  st.subheader("📰 รายการข่าวทั้งหมด")
261
  st.dataframe(news_df[["date", "source", "text", "sentiment", "theme", "url"]], use_container_width=True)