用 AI 读懂网友的健康情绪:搭建你自己的舆情分析助手
摘要
公共健康话题在社交媒体上随时都有“爆点”,但靠人工去追踪这些动态实在太慢了。有没有可能用 AI 来帮我们盯着这些内容,自动分析情绪、提取话题,还能画趋势图看看“热”在哪儿?这篇文章就来带你一步步用 LangChain + OpenAI(或 DeepSeek)搭建一个“AI 舆情雷达”,快速识别微博、公众号等平台上的健康相关话题,感知情绪走向,还能自动可视化趋势变化。
引言
做公益或者公共服务类项目时,常常会需要了解群众对某个健康议题的看法,比如“疫苗副作用”、“心理健康问题”、“癌症治疗骗局”等等。但是想要快速分析这些话题,不但需要收集数据,还要分析这些评论到底是正向的、负向的,甚至要判断有没有造谣、偏激言论。
这时候 AI 就可以派上大用场了,我们可以用自然语言处理模型加一点点逻辑和脚本,让它像个小助手一样,帮我们扫清这些杂乱无章的舆情信息。
整体方案设计
我们要实现的目标是:
- 自动抓取社交媒体上的健康话题内容(可用模拟文本或调用平台 API)
- 用大模型做话题提取、情感分析
- 整理分析结果并用图表可视化
- 最终输出一份“健康舆情简报”
我们会使用的技术栈包括:
- Python 3.10+
- LangChain
- OpenAI 或 DeepSeek(API 接入)
- Matplotlib(数据可视化)
- Pandas(数据处理)
- Streamlit(可选,用来快速部署成 Web 页面)
搭建项目环境
安装依赖
代码语言:bash复制pip install langchain openai pandas matplotlib streamlit
如果你用的是 DeepSeek,可以替换 openai
部分,接入它的 API 即可。
核心功能实现
模拟数据抓取(或调用真实微博/公众号 API)
代码语言:python代码运行次数:0运行复制# mock_social_posts.py
mock_posts = [
"今天看到一个关于疫苗后遗症的帖子,好担心!",
"我觉得现在的心理咨询机构有点坑人……",
"最近频繁看到关于HPV疫苗的宣传,有点反感了",
"刚做完体检,医生说要注意高血压问题,吓到我了",
"癌症防治宣传周感觉还挺有意义的,希望大家重视"
]
调用大模型提取话题+情感
代码语言:python代码运行次数:0运行复制# ai_analysis.py
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from mock_social_posts import mock_posts
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo") # 或 deepseek-chat
template = """
你是一名公共健康舆情分析专家。请帮我从下面的社交媒体内容中:
1\. 提取出提到的“健康话题”;
2\. 判断整体情感(积极、中立、消极);
3\. 简要说明理由。
内容如下:{content}
"""
prompt = ChatPromptTemplate.from_template(template)
def analyze_post(content):
chain = prompt | llm
result = chain.invoke({"content": content})
return result.content
批量处理并结构化结果
代码语言:python代码运行次数:0运行复制# batch_analysis.py
import pandas as pd
from ai_analysis import analyze_post
from mock_social_posts import mock_posts
results = []
for post in mock_posts:
output = analyze_post(post)
print("原文:", post)
print("AI分析结果:", output)
results.append({"原文": post, "AI分析": output})
df = pd.DataFrame(results)
df.to_csv("舆情分析结果.csv", index=False)
情感趋势图表可视化
代码语言:python代码运行次数:0运行复制# visualize.py
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("舆情分析结果.csv")
# 简单根据关键词判断情绪(实际可用 LLM 输出结果分类)
def get_sentiment(text):
if "积极" in text:
return "Positive"
elif "消极" in text:
return "Negative"
else:
return "Neutral"
df["情绪倾向"] = df["AI分析"].apply(get_sentiment)
sentiment_counts = df["情绪倾向"].value_counts()
sentiment_counts.plot(kind="bar", title="健康话题情感分布")
plt.xlabel("情感类别")
plt.ylabel("帖子数量")
plt.tight_layout()
plt.savefig("sentiment_chart.png")
plt.show()
可视化部署(可选)
用 Streamlit 可以把整个过程变成一个在线小工具,几行代码就能搞定:
代码语言:python代码运行次数:0运行复制# app.py
import streamlit as st
import pandas as pd
df = pd.read_csv("舆情分析结果.csv")
st.title("AI 健康舆情分析小工具")
st.write(df)
st.image("sentiment_chart.png", caption="情感趋势图")
运行命令:
代码语言:bash复制streamlit run app.py
QA 环节
Q:可以接入真实微博 API 吗?
A:当然可以!可以使用 新浪微博开放平台 或爬虫抓取,文章中用的是模拟数据主要是为了简单演示逻辑。
Q:大模型调用会不会很慢?
A:如果只分析几十条内容是没问题的,超过几百条建议异步处理或批量发送。如果你是用 DeepSeek,也支持并发请求。
Q:怎么让分析更准确?
A:可以把 prompt 拆成两个阶段:先提话题,再提情绪;或者加 few-shot 示例让模型学得更好。
总结
这篇文章咱们从最初的“社交平台太吵,信息抓不住”,一步步搭出了一个 AI 帮忙做舆情分析的小工具,能分析情绪、提取话题,还能画趋势图。虽然只是一个小项目,但它的可扩展性很强,不管是要做公益传播、媒体监控、公共健康响应,它都能派上用场。
参考资料
- LangChain 官方文档
- OpenAI API
- DeepSeek
发布评论