xuanwsx commited on
Commit
e9b5389
·
verified ·
1 Parent(s): aa3a9bd

Upload 2 files

Browse files
Files changed (2) hide show
  1. newapp.py +83 -0
  2. requirement2.txt +6 -0
newapp.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import matplotlib.pyplot as plt
4
+ from datetime import datetime
5
+ import os
6
+
7
+ # CSV 檔案位置(HF Spaces 用 /tmp 保留 session 期間)
8
+ DATA_FILE = "/tmp/stress_data.csv"
9
+
10
+ # 模擬分析函數
11
+ def analyze(text):
12
+ # 假設這裡是你的 BERT 或 transformers 分析
13
+ import random
14
+ stress_score = random.randint(0, 100) # 模擬壓力值
15
+ result_text = f"文字分析結果:壓力指數 {stress_score}"
16
+
17
+ # 儲存資料
18
+ save_data(text, stress_score)
19
+
20
+ # 生成趨勢圖
21
+ fig = plot_trend()
22
+
23
+ return result_text, fig
24
+
25
+ # 儲存資料到 CSV
26
+ def save_data(text, score):
27
+ now = datetime.now()
28
+ df = pd.DataFrame([[now, text, score]], columns=["timestamp", "text", "stress"])
29
+ if os.path.exists(DATA_FILE):
30
+ df.to_csv(DATA_FILE, mode="a", header=False, index=False)
31
+ else:
32
+ df.to_csv(DATA_FILE, index=False)
33
+
34
+ # 畫心理壓力趨勢圖
35
+ def plot_trend():
36
+ fig, ax = plt.subplots(figsize=(6,3))
37
+ if not os.path.exists(DATA_FILE):
38
+ ax.text(0.5, 0.5, "暫無資料", ha='center', va='center')
39
+ ax.set_axis_off()
40
+ return fig
41
+
42
+ df = pd.read_csv(DATA_FILE)
43
+ df['timestamp'] = pd.to_datetime(df['timestamp'])
44
+ ax.plot(df['timestamp'], df['stress'], marker='o', linestyle='-')
45
+ ax.set_title("心理壓力趨勢")
46
+ ax.set_xlabel("時間")
47
+ ax.set_ylabel("壓力指數")
48
+ ax.grid(True)
49
+ plt.xticks(rotation=30)
50
+ return fig
51
+
52
+ # 清除資料功能
53
+ def reset_data():
54
+ if os.path.exists(DATA_FILE):
55
+ os.remove(DATA_FILE)
56
+ fig, ax = plt.subplots()
57
+ ax.text(0.5, 0.5, "資料已重置", ha='center', va='center')
58
+ ax.set_axis_off()
59
+ return "資料已重置", fig
60
+
61
+ # Gradio 介面
62
+ with gr.Blocks() as demo:
63
+ gr.Markdown("# 中文心理壓力分析器")
64
+ gr.Markdown("BERT + 關鍵詞分析總壓力值。輸入你的心情,查看文字分析與心理壓力趨勢。")
65
+
66
+ with gr.Row():
67
+ text_input = gr.Textbox(
68
+ label="和我聊聊吧",
69
+ placeholder="說說今天的心情或煩惱...",
70
+ lines=5
71
+ )
72
+ with gr.Row():
73
+ submit_btn = gr.Button("分析")
74
+ reset_btn = gr.Button("重置資料")
75
+
76
+ result_text = gr.Textbox(label="分析結果")
77
+ trend_plot = gr.Plot(label="心理壓力趨勢")
78
+
79
+ # 按鈕觸發事件
80
+ submit_btn.click(analyze, inputs=text_input, outputs=[result_text, trend_plot])
81
+ reset_btn.click(reset_data, inputs=None, outputs=[result_text, trend_plot])
82
+
83
+ demo.launch()
requirement2.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ gradio==6.8.0
2
+ pandas>=2.0
3
+ matplotlib>=3.7
4
+ transformers>=4.35
5
+ torch>=2.1 # transformers 通常需要 torch 支援
6
+ datasets>=2.14 # 如果後續要用 huggingface datasets