File size: 9,540 Bytes
3c20deb 9cbc5d1 3c20deb 9cbc5d1 3c20deb 9cbc5d1 3c20deb 9cbc5d1 3c20deb 9cbc5d1 3c20deb 9cbc5d1 3c20deb 9cbc5d1 3c20deb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
import gradio as gr
from transformers import pipeline
# 创建分类器
classifier = pipeline("text-classification", model="WJL110/emotion-classifier")
# 标签映射
label_map = {
"LABEL_0": "快乐",
"LABEL_1": "愤怒",
"LABEL_2": "悲伤"
}
def analyze_emotion(text):
"""
对输入文本进行情感分析
"""
if not text.strip():
return "请输入要分析的文本", None, None
result = classifier(text)[0] # 获取第一个(也是唯一的)结果
emotion = label_map[result['label']]
confidence = result['score']
# 根据情感类型返回不同的颜色
if emotion == "快乐":
color = "#4CAF50" # 绿色
elif emotion == "愤怒":
color = "#F44336" # 红色
else: # 悲伤
color = "#2196F3" # 蓝色
return f"预测情感: {emotion}", f"置信度: {confidence:.2%}", color
def analyze_emotion_with_history(text, history):
"""
带有历史记录的情感分析函数
"""
result_text, confidence_text, color = analyze_emotion(text)
# 更新历史记录
history.append((text, f"{result_text}\n{confidence_text}"))
return history, history
# 创建Gradio界面
with gr.Blocks(title="情感分析应用", theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🎭 情感分析应用")
gr.Markdown("输入文本,AI将分析其情感倾向(快乐、愤怒或悲伤)")
with gr.Row():
with gr.Column(scale=2):
# 输入区域
text_input = gr.Textbox(
label="输入要分析的文本",
placeholder="请输入您想要分析情感的文本...",
lines=4,
max_lines=10
)
# 按钮
with gr.Row():
analyze_btn = gr.Button("🔍 分析情感", variant="primary")
clear_btn = gr.Button("🗑️ 清空", variant="secondary")
with gr.Column(scale=2):
# 输出区域
result_text = gr.Textbox(
label="分析结果",
lines=2,
interactive=False
)
# 情感标签显示
sentiment_label = gr.Label(
label="情感分类",
value=[{"label": "请输入文本并点击分析按钮", "confidence": 0}]
)
# 历史记录
gr.Markdown("### 📜 历史记录")
chatbot = gr.Chatbot(
label="分析历史",
height=300
)
# 示例文本
gr.Markdown("### 📝 示例文本")
# 创建示例分类标签页
with gr.Tabs():
# 基础示例
with gr.TabItem("基础示例"):
basic_examples = gr.Examples(
examples=(
"今天真是太开心了!",
"这件事让我很生气。",
"听到这个消息很难过。",
"我收到了一份意外的礼物,感到非常惊喜和快乐!",
"排队排了这么久,服务还这么差,真是令人愤怒!",
"我的宠物离开了我,我感到非常悲伤和孤独。"
),
inputs=text_input,
cache_examples=False
)
# 复杂示例 - 快乐
with gr.TabItem("复杂示例 - 快乐"):
happy_examples = gr.Examples(
examples=(
"当我看到女儿在毕业典礼上作为优秀毕业生代表发言时,她的声音虽然有些颤抖但坚定有力,我的眼眶不由自主地湿润了。十八年的养育,从蹒跚学步到如今亭亭玉立,所有的辛苦在这一刻都化作了无法言喻的欣慰与自豪。",
"当我收到大学录取通知书时,激动得跳了起来,但随即又感到一丝不安。我知道这意味着我将离开家人,独自面对陌生的环境和挑战。这种既期待又恐惧的心情让我彻夜难眠。",
"刚开始看到他忘记了我们的纪念日,我感到有些失落。但当他晚上给我一个惊喜的烛光晚餐,并拿出准备已久的礼物时,那份失落感瞬间被巨大的幸福感所取代,我甚至感动得流下了眼泪。",
"经过三年的努力,我们终于还清了所有债务。今天,当我把最后一张支票寄出去时,看着窗外明媚的阳光,我深深地吸了一口气,感觉肩上的重担终于卸了下来。"
),
inputs=text_input,
cache_examples=False
)
# 复杂示例 - 愤怒
with gr.TabItem("复杂示例 - 愤怒"):
angry_examples = gr.Examples(
examples=(
"当我发现自己精心准备了三个月的项目方案被同事占为己有,并且在领导面前装作是他自己的创意时,一股难以遏制的怒火从心底喷涌而出。这种背叛比项目失败本身更让我感到愤怒和失望。",
"公司宣布裁员名单时,我既感到愤怒又有些庆幸。愤怒的是公司如此无情地对待为其效力多年的员工,庆幸的是自己不在裁员名单中。这种矛盾的心情让我感到既内疚又不安。",
"会议开始时,我还能保持冷静地听取不同意见。但当有人开始质疑我的专业能力,并歪曲我的观点时,我感到血液逐渐涌上头顶,从最初的不悦逐渐升级为无法控制的愤怒。",
"真是太好了!我的笔记本电脑在我准备提交重要项目的前一天突然崩溃了,所有的数据都没有备份。看来我这个月的努力又要白费了,这真是太棒了!"
),
inputs=text_input,
cache_examples=False
)
# 复杂示例 - 悲伤
with gr.TabItem("复杂示例 - 悲伤"):
sad_examples = gr.Examples(
examples=(
"整理母亲遗物时,我发现了一本她的日记,里面记录着她对我们子女的牵挂和担忧,即使在她病重的最后日子里,字里行间依然充满了对生活的热爱。看着那些熟悉的字迹,我仿佛又听到了她温柔的叮嘱,泪水无声地滑落。",
"得知多年未见的好友突然去世的消息,我愣住了。我们曾经一起度过了人生中最美好的青春岁月,那些欢声笑语仿佛还在耳边回响。虽然知道人终有一死,但当这一刻真的来临时,心中还是充满了无法言说的悲伤和遗憾。",
"接到医院电话时,我只是有些担心。但当医生告诉我检查结果,说情况比预想的要严重得多时,我的心一下子沉了下去,从担忧变成了深深的恐惧和绝望。",
"今天路过那家我们曾经经常光顾的咖啡馆,看到熟悉的靠窗座位空着,我不由自主地停下了脚步。物是人非,那些曾经的美好时光如今只剩下回忆,心中涌起一股难以言喻的酸楚。"
),
inputs=text_input,
cache_examples=False
)
# 极高复杂度示例
with gr.TabItem("极高复杂度示例"):
extreme_examples = gr.Examples(
examples=(
"在父亲的葬礼上,我看到他生前最爱的向日葵开得正盛,那是他亲手种下的。阳光透过教堂的彩色玻璃窗洒进来,照亮了他微笑的遗像。我感到一阵难以言喻的悲伤,却又在这悲伤中感受到一丝温暖和力量。",
"当我得知自己获得了梦寐以求的职位时,激动得几乎要哭出来。但想到要离开现在的团队和熟悉的环境,心中又涌起一股莫名的伤感。这种既兴奋又不舍的心情让我百感交集。",
"看到他对我撒谎的证据,我感到一阵眩晕。愤怒、失望、背叛感、还有一丝难以置信,这些情绪在我心中交织,让我几乎无法呼吸。我想大声质问他,却又感到一种深深的无力感。",
"她只是淡淡地说了一句'祝你幸福',然后转身离开。我看着她渐行渐远的背影,心里空落落的,好像失去了什么重要的东西,却又说不清楚具体是什么。"
),
inputs=text_input,
cache_examples=False
)
# 绑定事件
analyze_btn.click(
fn=analyze_emotion,
inputs=text_input,
outputs=[result_text, sentiment_label]
)
# 清空按钮事件
clear_btn.click(
fn=lambda: ("", [{"label": "请输入文本并点击分析按钮", "confidence": 0}], []),
outputs=[text_input, sentiment_label, chatbot]
)
# 回车键触发分析
text_input.submit(
fn=analyze_emotion,
inputs=text_input,
outputs=[result_text, sentiment_label]
)
# 历史记录更新
analyze_btn.click(
fn=analyze_emotion_with_history,
inputs=[text_input, chatbot],
outputs=[chatbot, chatbot]
)
text_input.submit(
fn=analyze_emotion_with_history,
inputs=[text_input, chatbot],
outputs=[chatbot, chatbot]
)
if __name__ == "__main__":
demo.launch()
|