戒酒的李白

Front-end style optimization.

Too many changes to show.

To preserve performance only 14 of 14+ files are displayed.

@@ -96,7 +96,7 @@ class GeminiLLM(BaseLLM): @@ -96,7 +96,7 @@ class GeminiLLM(BaseLLM):
96 "model": self.default_model, 96 "model": self.default_model,
97 "messages": messages, 97 "messages": messages,
98 "temperature": kwargs.get("temperature", 0.7), 98 "temperature": kwargs.get("temperature", 0.7),
99 - "max_tokens": kwargs.get("max_tokens", 8000), 99 + "max_tokens": kwargs.get("max_tokens", 50000), # 增加到50000以支持20000字输出
100 "stream": False 100 "stream": False
101 } 101 }
102 102
@@ -270,7 +270,7 @@ class HTMLGenerationNode(StateMutationNode): @@ -270,7 +270,7 @@ class HTMLGenerationNode(StateMutationNode):
270 270
271 {f'<h2>InsightEngine分析结果</h2><div class="section"><pre>{insight_report}</pre></div>' if insight_report else ''} 271 {f'<h2>InsightEngine分析结果</h2><div class="section"><pre>{insight_report}</pre></div>' if insight_report else ''}
272 272
273 - {f'<h2>论坛监控数据</h2><div class="section"><pre>{forum_logs[:2000]}{"..." if len(forum_logs) > 2000 else ""}</pre></div>' if forum_logs else ''} 273 + {f'<h2>论坛监控数据</h2><div class="section"><pre>{forum_logs}</pre></div>' if forum_logs else ''}
274 274
275 <h2>综合结论</h2> 275 <h2>综合结论</h2>
276 <div class="section"> 276 <div class="section">
@@ -19,7 +19,7 @@ class Config: @@ -19,7 +19,7 @@ class Config:
19 gemini_model: str = "gemini-2.5-pro" 19 gemini_model: str = "gemini-2.5-pro"
20 20
21 # 报告配置 21 # 报告配置
22 - max_content_length: int = 50000 22 + max_content_length: int = 500000 # 增加到500000字符以支持30000字输入和20000字输出
23 output_dir: str = "final_reports" 23 output_dir: str = "final_reports"
24 template_dir: str = "ReportEngine/report_template" 24 template_dir: str = "ReportEngine/report_template"
25 25
@@ -53,7 +53,7 @@ class Config: @@ -53,7 +53,7 @@ class Config:
53 gemini_api_key=getattr(config_module, "GEMINI_API_KEY", None), 53 gemini_api_key=getattr(config_module, "GEMINI_API_KEY", None),
54 default_llm_provider=getattr(config_module, "DEFAULT_LLM_PROVIDER", "gemini"), 54 default_llm_provider=getattr(config_module, "DEFAULT_LLM_PROVIDER", "gemini"),
55 gemini_model=getattr(config_module, "GEMINI_MODEL", "gemini-2.5-pro"), 55 gemini_model=getattr(config_module, "GEMINI_MODEL", "gemini-2.5-pro"),
56 - max_content_length=getattr(config_module, "MAX_CONTENT_LENGTH", 50000), 56 + max_content_length=getattr(config_module, "MAX_CONTENT_LENGTH", 500000),
57 output_dir=getattr(config_module, "REPORT_OUTPUT_DIR", "final_reports"), 57 output_dir=getattr(config_module, "REPORT_OUTPUT_DIR", "final_reports"),
58 template_dir=getattr(config_module, "TEMPLATE_DIR", "ReportEngine/report_template"), 58 template_dir=getattr(config_module, "TEMPLATE_DIR", "ReportEngine/report_template"),
59 log_file=getattr(config_module, "REPORT_LOG_FILE", "logs/report.log"), 59 log_file=getattr(config_module, "REPORT_LOG_FILE", "logs/report.log"),
@@ -76,7 +76,7 @@ class Config: @@ -76,7 +76,7 @@ class Config:
76 gemini_api_key=config_dict.get("GEMINI_API_KEY"), 76 gemini_api_key=config_dict.get("GEMINI_API_KEY"),
77 default_llm_provider=config_dict.get("DEFAULT_LLM_PROVIDER", "gemini"), 77 default_llm_provider=config_dict.get("DEFAULT_LLM_PROVIDER", "gemini"),
78 gemini_model=config_dict.get("GEMINI_MODEL", "gemini-2.5-pro"), 78 gemini_model=config_dict.get("GEMINI_MODEL", "gemini-2.5-pro"),
79 - max_content_length=int(config_dict.get("MAX_CONTENT_LENGTH", "50000")), 79 + max_content_length=int(config_dict.get("MAX_CONTENT_LENGTH", "500000")),
80 output_dir=config_dict.get("REPORT_OUTPUT_DIR", "final_reports"), 80 output_dir=config_dict.get("REPORT_OUTPUT_DIR", "final_reports"),
81 template_dir=config_dict.get("TEMPLATE_DIR", "ReportEngine/report_template"), 81 template_dir=config_dict.get("TEMPLATE_DIR", "ReportEngine/report_template"),
82 log_file=config_dict.get("REPORT_LOG_FILE", "logs/report.log"), 82 log_file=config_dict.get("REPORT_LOG_FILE", "logs/report.log"),
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>智能舆情分析报告 - 武汉大学</title>\n <script src=\"https://cdn.jsdelivr.net/npm/chart.js\"></script>\n <style>\n :root {\n --bg-color: #f4f7f9;\n --text-color: #333;\n --card-bg: #ffffff;\n --border-color: #e0e5eb;\n --primary-color: #2c3e50;\n --accent-color: #3498db;\n --positive-color: #27ae60;\n --negative-color: #c0392b;\n --neutral-color: #f39c12;\n --shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n --font-family: 'Helvetica Neue', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;\n }\n\n .dark-mode {\n --bg-color: #1a1a1a;\n --text-color: #e0e0e0;\n --card-bg: #2c2c2c;\n --border-color: #444;\n --primary-color: #ffffff;\n --accent-color: #5dade2;\n }\n\n body {\n font-family: var(--font-family);\n background-color: var(--bg-color);\n color: var(--text-color);\n margin: 0;\n padding: 0;\n line-height: 1.6;\n transition: background-color 0.3s, color 0.3s;\n }\n\n .container {\n display: flex;\n max-width: 1600px;\n margin: 0 auto;\n }\n\n .sidebar {\n width: 260px;\n background-color: var(--card-bg);\n border-right: 1px solid var(--border-color);\n padding: 20px;\n height: 100vh;\n position: sticky;\n top: 0;\n transition: background-color 0.3s, border-color 0.3s;\n overflow-y: auto;\n }\n\n .sidebar h2 {\n font-size: 1.5em;\n color: var(--primary-color);\n margin-bottom: 20px;\n border-bottom: 2px solid var(--accent-color);\n padding-bottom: 10px;\n }\n\n .sidebar ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n\n .sidebar li a {\n display: block;\n color: var(--text-color);\n text-decoration: none;\n padding: 10px 15px;\n border-radius: 6px;\n margin-bottom: 5px;\n transition: background-color 0.2s, color 0.2s;\n font-weight: 500;\n }\n\n .sidebar li a:hover, .sidebar li a.active {\n background-color: var(--accent-color);\n color: #fff;\n }\n\n .main-content {\n flex: 1;\n padding: 30px;\n overflow-y: auto;\n }\n\n header {\n text-align: center;\n margin-bottom: 40px;\n }\n\n header h1 {\n font-size: 2.8em;\n color: var(--primary-color);\n margin: 0;\n }\n\n header p {\n font-size: 1.1em;\n color: #7f8c8d;\n margin-top: 10px;\n }\n\n .card {\n background: var(--card-bg);\n border-radius: 12px;\n padding: 25px;\n margin-bottom: 30px;\n box-shadow: var(--shadow);\n border: 1px solid var(--border-color);\n transition: all 0.3s ease;\n }\n\n .card:hover {\n transform: translateY(-5px);\n box-shadow: 0 8px 20px rgba(0,0,0,0.1);\n }\n\n .card h3 {\n font-size: 1.6em;\n color: var(--primary-color);\n margin-top: 0;\n padding-bottom: 15px;\n border-bottom: 1px solid var(--border-color);\n }\n\n .grid-container {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 20px;\n }\n\n .metric-card {\n text-align: center;\n padding: 20px;\n }\n\n .metric-card .value {\n font-size: 2.5em;\n font-weight: bold;\n color: var(--accent-color);\n margin: 10px 0;\n }\n\n .metric-card .label {\n font-size: 1em;\n color: #7f8c8d;\n }\n\n .hot-topic-list li {\n padding: 10px;\n border-bottom: 1px dashed var(--border-color);\n list-style-position: inside;\n }\n .hot-topic-list li:last-child { border-bottom: none; }\n\n .timeline {\n position: relative;\n padding: 20px 0;\n }\n\n .timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--accent-color);\n border-radius: 2px;\n }\n\n .timeline-item {\n position: relative;\n margin-left: 50px;\n margin-bottom: 30px;\n padding-left: 20px;\n }\n\n .timeline-item::before {\n content: '';\n position: absolute;\n left: -39px;\n top: 5px;\n width: 20px;\n height: 20px;\n background: var(--card-bg);\n border: 4px solid var(--accent-color);\n border-radius: 50%;\n z-index: 1;\n }\n\n .timeline-item h4 {\n margin: 0 0 5px 0;\n color: var(--primary-color);\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n margin-top: 20px;\n }\n\n th, td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid var(--border-color);\n }\n\n th {\n background-color: var(--bg-color);\n font-weight: bold;\n color: var(--primary-color);\n }\n\n .risk-high { color: var(--negative-color); font-weight: bold; }\n .risk-medium { color: var(--neutral-color); font-weight: bold; }\n\n .controls {\n position: fixed;\n top: 20px;\n right: 30px;\n display: flex;\n gap: 10px;\n z-index: 1000;\n }\n\n .control-btn {\n background: var(--card-bg);\n border: 1px solid var(--border-color);\n padding: 8px 12px;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n box-shadow: var(--shadow);\n transition: all 0.2s;\n }\n .control-btn:hover { background-color: var(--bg-color); }\n\n details {\n border: 1px solid var(--border-color);\n border-radius: 8px;\n margin-bottom: 1rem;\n overflow: hidden;\n }\n\n summary {\n padding: 1rem;\n cursor: pointer;\n background-color: var(--bg-color);\n font-weight: bold;\n font-size: 1.1em;\n }\n summary:hover { background-color: var(--border-color); }\n\n .details-content {\n padding: 1rem;\n }\n \n .conclusion-table td:first-child { font-weight: bold; }\n\n @media (max-width: 1200px) {\n .container { flex-direction: column; }\n .sidebar { width: 100%; height: auto; position: static; border-right: none; border-bottom: 1px solid var(--border-color); }\n .main-content { padding: 20px; }\n .controls { position: absolute; }\n }\n\n @media (max-width: 768px) {\n header h1 { font-size: 2em; }\n .card h3 { font-size: 1.3em; }\n .grid-container { grid-template-columns: 1fr; }\n th, td { padding: 8px; }\n }\n\n @media print {\n .sidebar, .controls, header p { display: none; }\n body { background-color: #fff; color: #000; }\n .container { display: block; }\n .main-content { padding: 0; }\n .card { box-shadow: none; border: 1px solid #ccc; margin-bottom: 20px; page-break-inside: avoid; }\n header h1 { color: #000; }\n a { text-decoration: none; color: inherit; }\n }\n </style>\n</head>\n<body>\n\n <div class=\"controls\">\n <button id=\"theme-toggle\" class=\"control-btn\">🌙</button>\n <button id=\"print-btn\" class=\"control-btn\">🖨️ 打印/导出PDF</button>\n </div>\n\n <div class=\"container\">\n <nav class=\"sidebar\">\n <h2>报告导航</h2>\n <ul>\n <li><a href=\"#overview\">1.0 舆情概览</a></li>\n <li><a href=\"#trends\">2.0 关键数据趋势</a></li>\n <li><a href=\"#timeline\">3.0 舆情动态时间轴</a></li>\n <li><a href=\"#hot-topics\">4.0 热点话题追踪</a></li>\n <li><a href=\"#channels\">5.0 重点渠道表现</a></li>\n <li><a href=\"#risks\">6.0 负面与风险监测</a></li>\n <li><a href=\"#summary\">7.0 简报与关注点</a></li>\n <li><a href=\"#appendix\">附录:综合背景资料</a></li>\n </ul>\n </nav>\n\n <main class=\"main-content\">\n <header>\n <h1>智能舆情分析报告:武汉大学</h1>\n <p>数据周期:2024-03-01 至 2024-04-30</p>\n </header>\n\n <section id=\"overview\" class=\"card\">\n <h3>1.0 本期舆情概览</h3>\n \n <h4>1.1 核心数据看板</h4>\n <div class=\"grid-container\">\n <div class=\"metric-card\">\n <div class=\"value\">3.8亿+</div>\n <div class=\"label\">总阅读量</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"value\">420万+</div>\n <div class=\"label\">总互动量</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"value\">12个</div>\n <div class=\"label\">核心监测信源</div>\n </div>\n </div>\n <div style=\"height: 300px; margin-top: 20px;\"><canvas id=\"sentimentPieChart\"></canvas></div>\n\n <h4>1.2 本期舆情热度 TOP 3</h4>\n <ol class=\"hot-topic-list\">\n <li><b>樱花季的全民热议:</b>从“预约抢票”到“游客挤不进武大”,交织着浪漫期待与现实拥堵的复杂情绪。</li>\n <li><b>学科实力的双重叙事:</b>“世界第一”的学术自豪感与“毕业薪资”的现实焦虑感并存,尤以测绘、法学等专业为甚。</li>\n <li><b>百年校史的文化认同:</b>围绕建校时间、校友记忆、校园商业化等话题,展现出强烈的怀旧、自豪与吐槽情绪。</li>\n </ol>\n\n <h4>1.3 重点预警</h4>\n <p><span class=\"risk-high\">高风险:</span>部分优势学科毕业生对就业薪资的普遍焦虑(“工资条沉默”)可能影响未来招生吸引力。</p>\n <p><span class=\"risk-medium\">中风险:</span>校园过度商业化与游客管理问题(如樱花季)引发在校师生与本地市民的负面情绪,或损害“最美大学”的品牌形象。</p>\n </section>\n\n <section id=\"trends\" class=\"card\">\n <h3>2.0 关键数据趋势</h3>\n \n <h4>2.1 声量走势 (模拟)</h4>\n <p>本周期内,舆情声量在“樱花季”开始前后达到顶峰,随后在“毕业季招聘”相关话题讨论中出现次高峰。整体走势与公众关注的季节性事件高度相关。</p>\n <div style=\"height: 350px;\"><canvas id=\"volumeTrendChart\"></canvas></div>\n \n <h4>2.2 情感趋势</h4>\n <p>整体舆情情感复杂多元。“自豪/怀旧”构成情感基底,但“焦虑”情绪在特定议题(如就业、内卷)中显著上升。情感分布呈现“宏大叙事的骄傲”与“个体感受的焦虑”并存的特点。</p>\n <div style=\"height: 350px;\"><canvas id=\"sentimentTrendChart\"></canvas></div>\n </section>\n\n <section id=\"timeline\" class=\"card\">\n <h3>3.0 本周期舆情动态时间轴</h3>\n <div class=\"timeline\">\n <div class=\"timeline-item\">\n <h4>三月初:樱花季预热</h4>\n <p>微博#武大樱花预约#话题开始发酵,大量攻略、美图涌现,公众期待值拉满,形成首个声量高峰。</p>\n </div>\n <div class=\"timeline-item\">\n <h4>三月中旬:游客潮与争议</h4>\n <p>樱花盛开,#武汉人挤不进武大#等话题登上热搜,讨论焦点从“浪漫”转向“拥堵”与“管理”,负面情绪抬头。</p>\n </div>\n <div class=\"timeline-item\">\n <h4>四月初:学术与国际交流</h4>\n <p>B站及抖音出现京都大学学生在珞珈讲坛朗诵《将进酒》、诺奖得主返校演讲等视频,引发对文化交流和学术氛围的正面讨论。</p>\n </div>\n <div class=\"timeline-item\">\n <h4>四月下旬:春招与就业焦虑</h4>\n <p>知乎、贴吧等平台关于“测绘遥感硕士春招中位数7.2k”的讨论引爆,将“世界第一学科”与“现实薪酬”的矛盾推至前台,焦虑情绪显著增长。</p>\n </div>\n </div>\n </section>\n\n <section id=\"hot-topics\" class=\"card\">\n <h3>4.0 热点话题追踪</h3>\n \n <h4>4.1 本期热点事件/话题详情</h4>\n <details open>\n <summary>🔥 话题一:学科光环与现实薪酬的拉锯战</summary>\n <div class=\"details-content\">\n <p><b>高光叙事:</b>武汉大学拥有测绘遥感(世界第一)、法学(全国前三)、马克思主义理论等11个双一流学科,科研实力雄厚,在知乎等平台,“世界第一有多强”等讨论获得数万点赞,公众自豪感强烈。</p>\n <p><b>焦虑痛点:</b>与之形成鲜明对比的是,关于就业的讨论充满焦虑。例如“测绘硕士春招中位数7.2k,买不起武汉一平米”、“法学生红圈所实习5k不包宿”等帖子引发大量共鸣。这种“学科光芒”与“工资条沉默”的巨大反差,是本周期内最核心的矛盾点。</p>\n <table>\n <thead><tr><th>学科</th><th>高光叙事</th><th>焦虑痛点</th><th>情感走势</th></tr></thead>\n <tbody>\n <tr><td>测绘遥感</td><td>知乎“世界第一”4.5万赞</td><td>硕士春招中位数7.2k</td><td>自豪↓55%→51% / 焦虑↑17%→24%</td></tr>\n <tr><td>法学</td><td>省考“双第一”报喜</td><td>红圈所实习5k不包宿</td><td>温情↓18%→14% / 考公↑6%→11%</td></tr>\n <tr><td>口腔医学</td><td>B站拔牙视频300万播</td><td>规培时薪 &lt; 奶茶店</td><td>信赖↓12%→10% / 规培累↑5%→9%</td></tr>\n </tbody>\n </table>\n </div>\n </details>\n <details>\n <summary>🌸 话题二:樱花背后的“浪漫”与“焦虑”</summary>\n <div class=\"details-content\">\n <p><b>浪漫叙事:</b>在小红书、抖音等平台,武大樱花是“童话滤镜”的代名词,相关笔记获赞超10万。樱花与老斋舍、老图书馆的结合,构建了完美的“青春与历史”的浪漫符号,吸引了亿级流量。</p>\n <p><b>现实裂缝:</b>巨大的流量带来了管理难题。“抢票像春运”、“黄牛票价高昂”、“武汉人挤不进武大”等抱怨在微博集中爆发。学生群体中也出现了“母校变景点”的商业化担忧。樱花节成为一场浪漫与焦虑并存的全民事件。</p>\n </div>\n </details>\n\n <h4>4.2 新增/突发话题</h4>\n <p><b>“哈佛交换生300美元房租劝退”事件:</b>有帖子讨论国际交换生项目,提到高昂的住宿费用让普通家庭学生望而却步,引发对国际合作项目“性价比”和教育公平性的讨论,成为一个潜在的负面议题。</p>\n\n </section>\n\n <section id=\"channels\" class=\"card\">\n <h3>5.0 重点渠道表现</h3>\n <div class=\"grid-container\">\n <div style=\"height: 300px;\"><canvas id=\"sourceDistributionChart\"></canvas></div>\n <div>\n <p><b>微博:</b>主要舆论场,承担了#武大樱花预约#等亿级话题的传播,是热点事件发酵和情绪集散地。</p>\n <p><b>知乎/贴吧:</b>深度讨论区,聚焦于学科实力、就业前景、校史争议等话题,是“焦虑”情绪的主要来源地。</p>\n <p><b>小红书/抖音/B站:</b>视觉与生活化内容平台,主导了“最美大学”的浪漫叙事,如樱花美景、校园Vlog、科普视频等。</p>\n </div>\n </div>\n </section>\n\n <section id=\"risks\" class=\"card\">\n <h3>6.0 负面与风险监测</h3>\n <h4>6.1 负面信息汇总</h4>\n <table>\n <thead><tr><th>风险类别</th><th>具体表现</th><th>风险等级</th></tr></thead>\n <tbody>\n <tr><td>就业焦虑</td><td>优势学科毕业生对薪酬待遇不满,认为“名校光环”未兑现为经济回报。</td><td class=\"risk-high\"></td></tr>\n <tr><td>资源分配</td><td>学生感知到顶尖科研资源(院士、大科学装置)与普通教学资源存在巨大落差,产生“二等公民”感。</td><td class=\"risk-medium\"></td></tr>\n <tr><td>校园管理</td><td>樱花季期间游客管理不善,引发学生和本地市民抱怨,校园过度商业化引担忧。</td><td class=\"risk-medium\"></td></tr>\n <tr><td>国际交流</td><td>部分国际合作项目费用高昂,被质疑为“富人游戏”,引发对教育公平的讨论。</td><td class=\"risk-medium\"></td></tr>\n </tbody>\n </table>\n \n <h4>6.2 潜在风险提示</h4>\n <ul>\n <li><b>品牌形象稀释:</b>长期存在的“就业焦虑”与“商业化”争议,可能削弱武汉大学在顶尖生源心中的“学术殿堂”形象。</li>\n <li><b>内部士气影响:</b>资源分配不均的感知,可能影响普通师生的归属感和满意度,导致人才流失或内部矛盾。</li>\n </ul>\n <h4>6.3 论坛监控日志摘要</h4>\n <p>本周期内,系统未监测到指定专业论坛(ForumEgine)的直接相关日志。但对知乎、贴吧等泛论坛平台的监控显示,用户生成内容(UGC)是舆情,尤其是负面和焦虑情绪的核心来源。建议将这些平台纳入常态化重点监控范围。</p>\n </section>\n\n <section id=\"summary\" class=\"card\">\n <h3>7.0 简报与关注点</h3>\n <h4>7.1 本期小结:珞珈山的三重面孔</h4>\n <p>综合本周期舆情,武汉大学的公众形象呈现出鲜明的“骄傲”、“焦虑”与“烟火气”三重面孔。它既是拥有世界顶尖学科和百年历史的国家骄傲,也是学子们为绩点、房租和未来而焦虑的现实场域,更是通过樱花  
12 -</body>  
13 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>武汉大学智能舆情分析报告</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --primary-color: #2c3e50;  
21 - --secondary-color: #3498db;  
22 - --background-color: #f4f6f9;  
23 - --card-bg-color: #ffffff;  
24 - --text-color: #34495e;  
25 - --heading-color: #2c3e50;  
26 - --border-color: #e0e0e0;  
27 - --shadow-color: rgba(0, 0, 0, 0.08);  
28 - --accent-color: #e74c3c;  
29 - --success-color: #2ecc71;  
30 - --warning-color: #f39c12;  
31 - }  
32 -  
33 - [data-theme='dark'] {  
34 - --primary-color: #ecf0f1;  
35 - --secondary-color: #3498db;  
36 - --background-color: #1a1a1a;  
37 - --card-bg-color: #2c2c2c;  
38 - --text-color: #bdc3c7;  
39 - --heading-color: #ffffff;  
40 - --border-color: #444444;  
41 - --shadow-color: rgba(0, 0, 0, 0.2);  
42 - }  
43 -  
44 - @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');  
45 -  
46 - * {  
47 - box-sizing: border-box;  
48 - margin: 0;  
49 - padding: 0;  
50 - }  
51 -  
52 - body {  
53 - font-family: 'Noto Sans SC', sans-serif;  
54 - background-color: var(--background-color);  
55 - color: var(--text-color);  
56 - line-height: 1.7;  
57 - transition: background-color 0.3s, color 0.3s;  
58 - }  
59 -  
60 - .container {  
61 - max-width: 1200px;  
62 - margin: 0 auto;  
63 - padding: 20px;  
64 - }  
65 -  
66 - header {  
67 - background-color: var(--card-bg-color);  
68 - padding: 25px 30px;  
69 - border-radius: 12px;  
70 - margin-bottom: 25px;  
71 - box-shadow: 0 4px 15px var(--shadow-color);  
72 - border: 1px solid var(--border-color);  
73 - display: flex;  
74 - justify-content: space-between;  
75 - align-items: center;  
76 - flex-wrap: wrap;  
77 - }  
78 -  
79 - header h1 {  
80 - color: var(--heading-color);  
81 - font-size: 2.2em;  
82 - margin-bottom: 5px;  
83 - }  
84 -  
85 - header .subtitle {  
86 - font-size: 1.1em;  
87 - color: var(--secondary-color);  
88 - font-weight: 500;  
89 - }  
90 -  
91 - .header-controls {  
92 - display: flex;  
93 - gap: 15px;  
94 - }  
95 -  
96 - .control-btn {  
97 - background: var(--background-color);  
98 - color: var(--text-color);  
99 - border: 1px solid var(--border-color);  
100 - padding: 8px 15px;  
101 - border-radius: 8px;  
102 - cursor: pointer;  
103 - font-size: 14px;  
104 - font-weight: 500;  
105 - transition: all 0.3s ease;  
106 - display: flex;  
107 - align-items: center;  
108 - gap: 5px;  
109 - }  
110 -  
111 - .control-btn:hover {  
112 - background-color: var(--secondary-color);  
113 - color: #fff;  
114 - border-color: var(--secondary-color);  
115 - }  
116 -  
117 - nav {  
118 - position: sticky;  
119 - top: 20px;  
120 - background-color: var(--card-bg-color);  
121 - padding: 15px;  
122 - border-radius: 12px;  
123 - box-shadow: 0 4px 15px var(--shadow-color);  
124 - z-index: 1000;  
125 - margin-bottom: 25px;  
126 - border: 1px solid var(--border-color);  
127 - }  
128 -  
129 - nav ul {  
130 - list-style: none;  
131 - display: flex;  
132 - justify-content: center;  
133 - flex-wrap: wrap;  
134 - gap: 10px;  
135 - }  
136 -  
137 - nav a {  
138 - text-decoration: none;  
139 - color: var(--text-color);  
140 - padding: 8px 15px;  
141 - border-radius: 8px;  
142 - font-weight: 500;  
143 - transition: all 0.3s ease;  
144 - }  
145 -  
146 - nav a:hover, nav a.active {  
147 - background-color: var(--secondary-color);  
148 - color: #fff;  
149 - }  
150 -  
151 - .report-section {  
152 - background-color: var(--card-bg-color);  
153 - margin-bottom: 25px;  
154 - padding: 25px;  
155 - border-radius: 12px;  
156 - box-shadow: 0 4px 15px var(--shadow-color);  
157 - border: 1px solid var(--border-color);  
158 - }  
159 -  
160 - .report-section h2 {  
161 - color: var(--heading-color);  
162 - font-size: 1.8em;  
163 - border-bottom: 3px solid var(--secondary-color);  
164 - padding-bottom: 10px;  
165 - margin-bottom: 20px;  
166 - }  
167 -  
168 - .report-section h3 {  
169 - color: var(--heading-color);  
170 - font-size: 1.4em;  
171 - margin-top: 25px;  
172 - margin-bottom: 15px;  
173 - position: relative;  
174 - padding-left: 15px;  
175 - }  
176 -  
177 - .report-section h3::before {  
178 - content: '';  
179 - position: absolute;  
180 - left: 0;  
181 - top: 50%;  
182 - transform: translateY(-50%);  
183 - height: 80%;  
184 - width: 5px;  
185 - background-color: var(--secondary-color);  
186 - border-radius: 3px;  
187 - }  
188 -  
189 - .grid-container {  
190 - display: grid;  
191 - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));  
192 - gap: 20px;  
193 - }  
194 -  
195 - .kpi-card, .topic-card, .channel-card, .risk-card {  
196 - background-color: var(--background-color);  
197 - padding: 20px;  
198 - border-radius: 10px;  
199 - border: 1px solid var(--border-color);  
200 - transition: transform 0.3s, box-shadow 0.3s;  
201 - }  
202 -  
203 - .kpi-card:hover, .topic-card:hover {  
204 - transform: translateY(-5px);  
205 - box-shadow: 0 6px 20px var(--shadow-color);  
206 - }  
207 -  
208 - .kpi-card .value {  
209 - font-size: 2.2em;  
210 - font-weight: 700;  
211 - color: var(--secondary-color);  
212 - }  
213 -  
214 - .kpi-card .label {  
215 - font-size: 1em;  
216 - color: var(--text-color);  
217 - margin-top: 5px;  
218 - }  
219 -  
220 - .topic-card .rank {  
221 - font-size: 1.5em;  
222 - font-weight: bold;  
223 - color: var(--accent-color);  
224 - margin-right: 15px;  
225 - }  
226 -  
227 - .topic-card .title {  
228 - font-size: 1.2em;  
229 - font-weight: 500;  
230 - color: var(--heading-color);  
231 - }  
232 -  
233 - .topic-card .description {  
234 - font-size: 0.9em;  
235 - margin-top: 5px;  
236 - }  
237 -  
238 - .alert-box {  
239 - padding: 15px;  
240 - border-radius: 8px;  
241 - margin-top: 20px;  
242 - border: 1px solid;  
243 - display: flex;  
244 - align-items: center;  
245 - gap: 10px;  
246 - }  
247 -  
248 - .alert-box.warning {  
249 - background-color: rgba(243, 156, 18, 0.1);  
250 - border-color: var(--warning-color);  
251 - color: var(--warning-color);  
252 - }  
253 -  
254 - .chart-container {  
255 - position: relative;  
256 - height: 400px;  
257 - width: 100%;  
258 - margin-top: 20px;  
259 - }  
260 -  
261 - .timeline {  
262 - position: relative;  
263 - padding: 20px 0;  
264 - }  
265 -  
266 - .timeline::before {  
267 - content: '';  
268 - position: absolute;  
269 - left: 20px;  
270 - top: 0;  
271 - bottom: 0;  
272 - width: 3px;  
273 - background-color: var(--border-color);  
274 - }  
275 -  
276 - .timeline-item {  
277 - position: relative;  
278 - margin-bottom: 20px;  
279 - padding-left: 50px;  
280 - }  
281 -  
282 - .timeline-item::before {  
283 - content: '';  
284 - position: absolute;  
285 - left: 12px;  
286 - top: 5px;  
287 - width: 18px;  
288 - height: 18px;  
289 - border-radius: 50%;  
290 - background-color: var(--secondary-color);  
291 - border: 3px solid var(--card-bg-color);  
292 - }  
293 -  
294 - .timeline-date {  
295 - font-weight: bold;  
296 - color: var(--secondary-color);  
297 - }  
298 -  
299 - details {  
300 - margin-bottom: 15px;  
301 - border: 1px solid var(--border-color);  
302 - border-radius: 8px;  
303 - overflow: hidden;  
304 - }  
305 -  
306 - summary {  
307 - padding: 15px;  
308 - background-color: var(--background-color);  
309 - font-weight: 500;  
310 - cursor: pointer;  
311 - font-size: 1.1em;  
312 - color: var(--heading-color);  
313 - display: flex;  
314 - justify-content: space-between;  
315 - align-items: center;  
316 - }  
317 - summary::after {  
318 - content: '+';  
319 - font-size: 1.2em;  
320 - transition: transform 0.3s;  
321 - }  
322 - details[open] summary::after {  
323 - transform: rotate(45deg);  
324 - }  
325 -  
326 - .details-content {  
327 - padding: 15px;  
328 - border-top: 1px solid var(--border-color);  
329 - }  
330 -  
331 - .details-content p {  
332 - margin-bottom: 10px;  
333 - }  
334 -  
335 - .details-content strong {  
336 - color: var(--heading-color);  
337 - }  
338 -  
339 - .tag {  
340 - display: inline-block;  
341 - padding: 3px 8px;  
342 - border-radius: 5px;  
343 - font-size: 0.8em;  
344 - font-weight: bold;  
345 - margin-right: 5px;  
346 - margin-bottom: 5px;  
347 - }  
348 - .tag.positive { background-color: rgba(46, 204, 113, 0.2); color: #27ae60; }  
349 - .tag.negative { background-color: rgba(231, 76, 60, 0.2); color: var(--accent-color); }  
350 - .tag.neutral { background-color: rgba(52, 152, 219, 0.2); color: var(--secondary-color); }  
351 -  
352 - footer {  
353 - text-align: center;  
354 - padding: 20px;  
355 - margin-top: 20px;  
356 - font-size: 0.9em;  
357 - color: var(--text-color);  
358 - }  
359 -  
360 - @media (max-width: 768px) {  
361 - header {  
362 - flex-direction: column;  
363 - align-items: flex-start;  
364 - gap: 15px;  
365 - }  
366 - nav ul {  
367 - flex-direction: column;  
368 - align-items: center;  
369 - }  
370 - }  
371 -  
372 - @media print {  
373 - body {  
374 - -webkit-print-color-adjust: exact;  
375 - print-color-adjust: exact;  
376 - }  
377 - header, nav, .control-btn, footer, summary::after {  
378 - display: none !important;  
379 - }  
380 - .container {  
381 - padding: 0;  
382 - max-width: 100%;  
383 - }  
384 - .report-section {  
385 - box-shadow: none;  
386 - border: 1px solid #ccc;  
387 - margin-bottom: 20px;  
388 - page-break-inside: avoid;  
389 - }  
390 - details[open] .details-content {  
391 - display: block;  
392 - }  
393 - details {  
394 - border: none;  
395 - }  
396 - details summary {  
397 - background: none;  
398 - font-weight: bold;  
399 - }  
400 - .chart-container {  
401 - height: 300px;  
402 - }  
403 - }  
404 -  
405 - </style>  
406 -</head>  
407 -<body>  
408 -  
409 - <div class="container">  
410 - <header>  
411 - <div>  
412 - <h1>武汉大学智能舆情分析报告</h1>  
413 - <p class="subtitle">数据周期:2024-03-01 至 2024-04-30</p>  
414 - </div>  
415 - <div class="header-controls">  
416 - <button id="theme-toggle" class="control-btn">🌙 暗色模式</button>  
417 - <button onclick="window.print()" class="control-btn">🖨️ 打印/导出PDF</button>  
418 - </div>  
419 - </header>  
420 -  
421 - <nav id="toc">  
422 - <ul>  
423 - <li><a href="#section-1">舆情概览</a></li>  
424 - <li><a href="#section-2">数据趋势</a></li>  
425 - <li><a href="#section-3">动态时间轴</a></li>  
426 - <li><a href="#section-4">热点追踪</a></li>  
427 - <li><a href="#section-5">渠道表现</a></li>  
428 - <li><a href="#section-6">风险监测</a></li>  
429 - <li><a href="#section-7">简报与关注</a></li>  
430 - </ul>  
431 - </nav>  
432 -  
433 - <main>  
434 - <section id="section-1" class="report-section">  
435 - <h2>1.0 本期舆情概览</h2>  
436 - <h3>1.1 核心数据看板</h3>  
437 - <div class="grid-container">  
438 - <div class="kpi-card">  
439 - <div class="value">~210万</div>  
440 - <div class="label">相关信息量</div>  
441 - </div>  
442 - <div class="kpi-card">  
443 - <div class="value">3.8亿+</div>  
444 - <div class="label">总阅读/播放量</div>  
445 - </div>  
446 - <div class="kpi-card">  
447 - <div class="value">~420万</div>  
448 - <div class="label">总互动量</div>  
449 - </div>  
450 - </div>  
451 - <div class="chart-container" style="height: 350px;">  
452 - <canvas id="sentimentPieChart"></canvas>  
453 - </div>  
454 -  
455 - <h3>1.2 本期舆情热度 TOP 3</h3>  
456 - <div class="grid-container">  
457 - <div class="topic-card">  
458 - <div style="display:flex; align-items:center;"><span class="rank">1</span> <span class="title">樱花季的全民热议与管理挑战</span></div>  
459 - <p class="description">#武大樱花预约# 话题引爆社交媒体,兼具“浪漫滤镜”与“抢票焦虑”,学生与游客的体验冲突成为焦点。</p>  
460 - </div>  
461 - <div class="topic-card">  
462 - <div style="display:flex; align-items:center;"><span class="rank">2</span> <span class="title">学科荣耀与毕业生现实焦虑的碰撞</span></div>  
463 - <p class="description">“世界第一”的学科声誉与毕业生“工资条沉默”形成鲜明对比,引发对名校光环与现实就业的深度讨论。</p>  
464 - </div>  
465 - <div class="topic-card">  
466 - <div style="display:flex; align-items:center;"><span class="rank">3</span> <span class="title">百年校史的多元解读与身份认同</span></div>  
467 - <p class="description">关于校史起点的讨论和“学大汉武立国”等网络梗的流行,展现了师生校友对学校历史既严肃又活泼的文化认同。</p>  
468 - </div>  
469 - </div>  
470 -  
471 - <h3>1.3 重点预警</h3>  
472 - <div class="alert-box warning">  
473 - <span style="font-size: 1.5em;">⚠️</span>  
474 - <div>  
475 - <strong>潜在风险提示:</strong> 毕业生薪资预期与学科声誉的巨大落差可能持续发酵,影响招生和人才吸引力。同时,校园开放与校内资源、管理压力之间的矛盾在重大活动期间(如樱花季、校庆)易被激化,需提前预案。  
476 - </div>  
477 - </div>  
478 - </section>  
479 -  
480 - <section id="section-2" class="report-section">  
481 - <h2>2.0 关键数据趋势</h2>  
482 - <h3>2.1 声量走势</h3>  
483 - <p>在本监测周期内,舆情声量呈现多个波峰。第一个主要高峰出现在三月中上旬,与“樱花季”预约通道开放和相关讨论高度相关。第二个高峰出现在四月初,由春季招聘、毕业生薪资讨论及部分学科的“红黑榜”话题带动。整体声量维持在较高水平,显示公众对武汉大学的持续高度关注。</p>  
484 - <h3>2.2 情感趋势</h3>  
485 - <div class="chart-container">  
486 - <canvas id="sentimentTrendChart"></canvas>  
487 - </div>  
488 - <p style="margin-top: 15px;">情感趋势图揭示了公众情绪的复杂性。以核心议题“学科声誉”为例,<span class="tag positive">自豪感</span>虽是主流情绪,但呈缓慢下降趋势;而<span class="tag negative">焦虑感</span>(主要关于就业、内卷)则呈明显上升趋势。这表明,在宏大的正面叙事之下,个体层面的压力与关切正在成为不可忽视的舆情力量。</p>  
489 - </section>  
490 -  
491 - <section id="section-3" class="report-section">  
492 - <h2>3.0 本周期舆情动态时间轴</h2>  
493 - <div class="timeline">  
494 - <div class="timeline-item">  
495 - <div class="timeline-date">2024年3月上旬</div>  
496 - <p><strong>事件  
497 -</body>  
498 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --primary-color: #2c3e50;  
21 - --secondary-color: #3498db;  
22 - --background-color: #f4f7f9;  
23 - --card-bg-color: #ffffff;  
24 - --text-color: #333333;  
25 - --heading-color: #2c3e50;  
26 - --border-color: #e0e0e0;  
27 - --shadow-color: rgba(0, 0, 0, 0.08);  
28 - --success-color: #2ecc71;  
29 - --warning-color: #f39c12;  
30 - --danger-color: #e74c3c;  
31 - --info-color: #3498db;  
32 - --font-family: 'Helvetica Neue', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;  
33 - }  
34 -  
35 - .dark-mode {  
36 - --primary-color: #3498db;  
37 - --secondary-color: #2980b9;  
38 - --background-color: #1a1a1a;  
39 - --card-bg-color: #2c2c2c;  
40 - --text-color: #e0e0e0;  
41 - --heading-color: #ffffff;  
42 - --border-color: #444444;  
43 - --shadow-color: rgba(0, 0, 0, 0.2);  
44 - }  
45 -  
46 - * {  
47 - box-sizing: border-box;  
48 - margin: 0;  
49 - padding: 0;  
50 - }  
51 -  
52 - body {  
53 - font-family: var(--font-family);  
54 - background-color: var(--background-color);  
55 - color: var(--text-color);  
56 - line-height: 1.6;  
57 - transition: background-color 0.3s, color 0.3s;  
58 - display: flex;  
59 - }  
60 -  
61 - #sidebar {  
62 - width: 260px;  
63 - background-color: var(--card-bg-color);  
64 - border-right: 1px solid var(--border-color);  
65 - height: 100vh;  
66 - position: fixed;  
67 - top: 0;  
68 - left: 0;  
69 - padding: 20px;  
70 - display: flex;  
71 - flex-direction: column;  
72 - box-shadow: 2px 0 5px var(--shadow-color);  
73 - transition: background-color 0.3s, border-color 0.3s;  
74 - overflow-y: auto;  
75 - }  
76 -  
77 - #sidebar h1 {  
78 - font-size: 1.5em;  
79 - color: var(--primary-color);  
80 - margin-bottom: 10px;  
81 - text-align: center;  
82 - }  
83 -  
84 - #sidebar .logo {  
85 - font-weight: bold;  
86 - font-size: 1.2em;  
87 - color: var(--heading-color);  
88 - padding-bottom: 20px;  
89 - border-bottom: 1px solid var(--border-color);  
90 - }  
91 -  
92 - #toc {  
93 - list-style: none;  
94 - margin-top: 20px;  
95 - flex-grow: 1;  
96 - }  
97 -  
98 - #toc li a {  
99 - display: block;  
100 - color: var(--text-color);  
101 - text-decoration: none;  
102 - padding: 10px 15px;  
103 - border-radius: 6px;  
104 - margin-bottom: 5px;  
105 - font-weight: 500;  
106 - transition: background-color 0.2s, color 0.2s;  
107 - }  
108 -  
109 - #toc li a:hover, #toc li a.active {  
110 - background-color: var(--primary-color);  
111 - color: #ffffff;  
112 - }  
113 -  
114 - .sidebar-footer {  
115 - margin-top: auto;  
116 - font-size: 0.8em;  
117 - text-align: center;  
118 - color: #777;  
119 - }  
120 -  
121 - #main-content {  
122 - margin-left: 260px;  
123 - width: calc(100% - 260px);  
124 - padding: 30px;  
125 - }  
126 -  
127 - header {  
128 - display: flex;  
129 - justify-content: space-between;  
130 - align-items: center;  
131 - margin-bottom: 30px;  
132 - padding-bottom: 20px;  
133 - border-bottom: 1px solid var(--border-color);  
134 - }  
135 -  
136 - header h2 {  
137 - font-size: 2em;  
138 - color: var(--heading-color);  
139 - }  
140 -  
141 - .header-actions button {  
142 - background: var(--card-bg-color);  
143 - border: 1px solid var(--border-color);  
144 - color: var(--text-color);  
145 - padding: 8px 15px;  
146 - border-radius: 6px;  
147 - cursor: pointer;  
148 - margin-left: 10px;  
149 - transition: background-color 0.2s, box-shadow 0.2s;  
150 - font-weight: 500;  
151 - }  
152 -  
153 - .header-actions button:hover {  
154 - background-color: var(--background-color);  
155 - box-shadow: 0 2px 4px var(--shadow-color);  
156 - }  
157 -  
158 - .report-section {  
159 - background-color: var(--card-bg-color);  
160 - border-radius: 8px;  
161 - padding: 25px;  
162 - margin-bottom: 30px;  
163 - box-shadow: 0 4px 12px var(--shadow-color);  
164 - transition: background-color 0.3s, box-shadow 0.3s;  
165 - }  
166 -  
167 - .report-section h3 {  
168 - font-size: 1.6em;  
169 - color: var(--heading-color);  
170 - margin-bottom: 20px;  
171 - padding-bottom: 10px;  
172 - border-bottom: 2px solid var(--primary-color);  
173 - display: flex;  
174 - align-items: center;  
175 - }  
176 -  
177 - .report-section h3 svg {  
178 - margin-right: 10px;  
179 - fill: var(--primary-color);  
180 - }  
181 -  
182 - .grid-container {  
183 - display: grid;  
184 - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));  
185 - gap: 20px;  
186 - }  
187 -  
188 - .data-card {  
189 - background: var(--background-color);  
190 - padding: 20px;  
191 - border-radius: 8px;  
192 - text-align: center;  
193 - border: 1px solid var(--border-color);  
194 - }  
195 -  
196 - .data-card .value {  
197 - font-size: 2.5em;  
198 - font-weight: bold;  
199 - color: var(--primary-color);  
200 - }  
201 -  
202 - .data-card .label {  
203 - font-size: 1em;  
204 - color: var(--text-color);  
205 - margin-top: 5px;  
206 - }  
207 -  
208 - .hot-topic-card {  
209 - background: var(--background-color);  
210 - padding: 20px;  
211 - border-radius: 8px;  
212 - border-left: 5px solid;  
213 - }  
214 -  
215 - .hot-topic-card.topic-1 { border-color: var(--success-color); }  
216 - .hot-topic-card.topic-2 { border-color: var(--warning-color); }  
217 - .hot-topic-card.topic-3 { border-color: var(--info-color); }  
218 -  
219 - .hot-topic-card h4 {  
220 - font-size: 1.2em;  
221 - color: var(--heading-color);  
222 - margin-bottom: 10px;  
223 - }  
224 -  
225 - .alert-card {  
226 - background-color: rgba(243, 156, 18, 0.1);  
227 - border-left: 5px solid var(--warning-color);  
228 - padding: 15px;  
229 - border-radius: 6px;  
230 - }  
231 -  
232 - .alert-card p {  
233 - color: var(--warning-color);  
234 - font-weight: 500;  
235 - }  
236 -  
237 - .chart-container {  
238 - position: relative;  
239 - height: 400px;  
240 - width: 100%;  
241 - }  
242 -  
243 - .timeline {  
244 - position: relative;  
245 - padding: 20px 0;  
246 - }  
247 -  
248 - .timeline::before {  
249 - content: '';  
250 - position: absolute;  
251 - left: 20px;  
252 - top: 0;  
253 - bottom: 0;  
254 - width: 3px;  
255 - background-color: var(--primary-color);  
256 - border-radius: 3px;  
257 - }  
258 -  
259 - .timeline-item {  
260 - position: relative;  
261 - margin-bottom: 20px;  
262 - padding-left: 50px;  
263 - }  
264 -  
265 - .timeline-item::before {  
266 - content: '';  
267 - position: absolute;  
268 - left: 12px;  
269 - top: 5px;  
270 - width: 20px;  
271 - height: 20px;  
272 - background-color: var(--card-bg-color);  
273 - border: 3px solid var(--primary-color);  
274 - border-radius: 50%;  
275 - z-index: 1;  
276 - }  
277 -  
278 - .timeline-item-content {  
279 - background: var(--background-color);  
280 - padding: 15px;  
281 - border-radius: 6px;  
282 - }  
283 -  
284 - .timeline-item-content .date {  
285 - font-weight: bold;  
286 - color: var(--primary-color);  
287 - }  
288 -  
289 - details {  
290 - margin-bottom: 15px;  
291 - border: 1px solid var(--border-color);  
292 - border-radius: 6px;  
293 - overflow: hidden;  
294 - }  
295 -  
296 - summary {  
297 - padding: 15px;  
298 - background-color: var(--background-color);  
299 - font-weight: bold;  
300 - cursor: pointer;  
301 - display: flex;  
302 - justify-content: space-between;  
303 - align-items: center;  
304 - }  
305 -  
306 - summary::after {  
307 - content: '▼';  
308 - transform: rotate(0deg);  
309 - transition: transform 0.2s;  
310 - }  
311 -  
312 - details[open] summary::after {  
313 - transform: rotate(180deg);  
314 - }  
315 -  
316 - .details-content {  
317 - padding: 20px;  
318 - }  
319 -  
320 - table {  
321 - width: 100%;  
322 - border-collapse: collapse;  
323 - margin-top: 15px;  
324 - }  
325 -  
326 - th, td {  
327 - padding: 12px;  
328 - border: 1px solid var(--border-color);  
329 - text-align: left;  
330 - }  
331 -  
332 - th {  
333 - background-color: var(--background-color);  
334 - font-weight: bold;  
335 - color: var(--heading-color);  
336 - }  
337 -  
338 - .negative-item {  
339 - padding: 10px;  
340 - border-bottom: 1px solid var(--border-color);  
341 - display: flex;  
342 - align-items: center;  
343 - }  
344 - .negative-item:last-child { border-bottom: none; }  
345 - .negative-item .icon { color: var(--danger-color); margin-right: 10px; font-weight: bold; }  
346 -  
347 - .risk-item {  
348 - padding: 10px;  
349 - border-bottom: 1px solid var(--border-color);  
350 - display: flex;  
351 - align-items: center;  
352 - }  
353 - .risk-item:last-child { border-bottom: none; }  
354 - .risk-item .icon { color: var(--warning-color); margin-right: 10px; font-weight: bold; }  
355 -  
356 -  
357 - @media (max-width: 1024px) {  
358 - #sidebar {  
359 - left: -260px;  
360 - transition: left 0.3s;  
361 - z-index: 1000;  
362 - }  
363 - body.sidebar-open #sidebar {  
364 - left: 0;  
365 - }  
366 - #main-content {  
367 - margin-left: 0;  
368 - width: 100%;  
369 - padding: 15px;  
370 - }  
371 - header h2 {  
372 - font-size: 1.5em;  
373 - }  
374 - .header-actions button {  
375 - padding: 6px 10px;  
376 - }  
377 - .menu-toggle {  
378 - display: block !important;  
379 - }  
380 - }  
381 -  
382 - @media print {  
383 - body { display: block; }  
384 - #sidebar, .header-actions {  
385 - display: none;  
386 - }  
387 - #main-content {  
388 - margin-left: 0;  
389 - width: 100%;  
390 - padding: 0;  
391 - }  
392 - .report-section {  
393 - box-shadow: none;  
394 - border: 1px solid #ccc;  
395 - page-break-inside: avoid;  
396 - }  
397 - }  
398 -  
399 - .menu-toggle {  
400 - display: none;  
401 - background: none;  
402 - border: none;  
403 - font-size: 24px;  
404 - cursor: pointer;  
405 - color: var(--heading-color);  
406 - }  
407 -  
408 - </style>  
409 -</head>  
410 -<body>  
411 -  
412 - <aside id="sidebar">  
413 - <div class="logo">  
414 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" style="vertical-align: middle; margin-right: 8px;"><path d="M12 2L1 9l4 1.5V21h14v-10.5L23 9l-11-7zm-2 16h-2v-6h2v6zm4 0h-2v-6h2v6zm4 0h-2v-6h2v6zm-8-8H4.5L12 5.5 19.5 9H16v8H8v-8z"/></svg>  
415 - 珞珈舆情洞察  
416 - </div>  
417 - <nav>  
418 - <ul id="toc">  
419 - <li><a href="#s1">舆情概览</a></li>  
420 - <li><a href="#s2">关键数据趋势</a></li>  
421 - <li><a href="#s3">舆情动态时间轴</a></li>  
422 - <li><a href="#s4">热点话题追踪</a></li>  
423 - <li><a href="#s5">重点渠道表现</a></li>  
424 - <li><a href="#s6">负面与风险监测</a></li>  
425 - <li><a href="#s7">简报与关注点</a></li>  
426 - </ul>  
427 - </nav>  
428 - <div class="sidebar-footer">  
429 - <p>&copy; 2024 智能报告生成</p>  
430 - </div>  
431 - </aside>  
432 -  
433 - <main id="main-content">  
434 - <header>  
435 - <button class="menu-toggle" onclick="toggleSidebar()"></button>  
436 - <div>  
437 - <h2>武汉大学 智能舆情分析报告</h2>  
438 - <p style="color: #777;">数据周期:2024-03-01 至 2024-04-30</p>  
439 - </div>  
440 - <div class="header-actions">  
441 - <button id="theme-toggle">切换主题</button>  
442 - <button onclick="window.print()">打印/导出PDF</button>  
443 - </div>  
444 - </header>  
445 -  
446 - <section id="s1" class="report-section">  
447 - <h3>  
448 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z"/></svg>  
449 - 1.0 本期舆情概览  
450 - </h3>  
451 - <h4>1.1 核心数据看板</h4>  
452 - <div class="grid-container" style="margin-top: 20px;">  
453 - <div class="data-card">  
454 - <div class="value">3.8亿+</div>  
455 - <div class="label">总阅读量</div>  
456 - </div>  
457 - <div class="data-card">  
458 - <div class="value">210万+</div>  
459 - <div class="label">有效讨论</div>  
460 - </div>  
461 - <div class="data-card">  
462 - <div class="value">420万+</div>  
463 - <div class="label">总互动量</div>  
464 - </div>  
465 - <div class="data-card">  
466 - <div class="value" style="color: var(--success-color);">51%</div>  
467 - <div class="label">主要情感:骄傲与自豪</div>  
468 - </div>  
469 - </div>  
470 - <h4 style="margin-top: 30px;">1.2 本期舆情热度 TOP 3</h4>  
471 - <div class="grid-container" style="margin-top: 20px;">  
472 - <div class="hot-topic-card topic-1">  
473 - <h4>TOP 1: 樱花季的浪漫与焦虑</h4>  
474 - <p>#武大樱花预约# 话题阅读量超3.8亿,引发全民关注。舆论呈现两极化:游客与校友分享樱花美景的“浪漫”与“怀旧”;本地市民与未预约成功的网友则表达“抢票难”、“拥挤”的“焦虑”与“吐槽”。</p>  
475 - </div>  
476 - <div class="hot-topic-card topic-2">  
477 - <h4>TOP 2: 学科实力与就业现实</h4>  
478 - <p>“测绘遥感世界第一”等学术成就引发自豪感,但同时,“硕士春招薪资7.2k”、“法学生实习困境”等话题引发对就业前景的广泛讨论与焦虑,形成“理想与现实”的鲜明对比。</p>  
479 - </div>  
480 - <div class="hot-topic-card topic-3">  
481 - <h4>TOP 3: 百年校史的传承与新说</h4>  
482 - <p>“1893 vs 1913”的校史起点讨论在贴吧等社区持续发酵,而抖音上“学大汉武立国”的倒读梗则以年轻化、娱乐化的方式传播了校史文化,展现了历史在当代的多元解读。</p>  
483 - </div>  
484 - </div>  
485 - <h4 style="margin-top: 30px;">1.3 重点预警</h4>  
486 - <div class="alert-card" style="margin-top: 20px;">  
487 - <p><strong>就业焦虑情绪上升:</strong> 多个王牌学科(如测绘、法学)的毕业生薪资与公众对其“顶尖”地位的期望存在落差,相关讨论中“焦虑”、“内卷”、“工资条”等词频上升,可能影响未来招生吸引力及在校生心态。</p>  
488 - </div>  
489 - </section>  
490 -  
491 - <section id="s2" class="report-section">  
492 - <h3>  
493 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"/></svg>  
494 - 2.0 关键数据趋势  
495 - </h3>  
496 - <div class="grid-container">  
497 - <div style="grid-column: 1 / -1;">  
498 - <h4>2.1 声量走势 (模拟)</h4>  
499 - <div class="chart-container">  
500 - <canvas id="volumeTrendChart"></canvas>  
501 - </div>  
502 - </div>  
503 - <div>  
504 - <h4>2.2 整体情感分布</h4>  
505 - <div class="chart-container" style="height: 350px;">  
506 - <canvas id="sentimentPieChart"></canvas>  
507 - </div>  
508 - </div>  
509 - <div>  
510 - <h4>2.3 数据来源平台分布</h4>  
511 - <div class="chart-container" style="height: 350px;">  
512 - <canvas id="platformBarChart"></canvas>  
513 - </div>  
514 - </div>  
515 - </div>  
516 - </section>  
517 -  
518 - <section id="s3" class="report-section">  
519 - <h3>  
520 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path  
521 -</body>  
522 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --bg-color: #f4f7fa;  
21 - --text-color: #333;  
22 - --card-bg: #ffffff;  
23 - --border-color: #eef2f7;  
24 - --primary-color: #2c3e50;  
25 - --accent-color-1: #3498db;  
26 - --accent-color-2: #e74c3c;  
27 - --accent-color-3: #f1c40f;  
28 - --accent-color-4: #2ecc71;  
29 - --sidebar-bg: #2c3e50;  
30 - --sidebar-text: #ecf0f1;  
31 - --sidebar-hover: #34495e;  
32 - --shadow: 0 4px 12px rgba(0, 0, 0, 0.08);  
33 - --font-family: 'Helvetica Neue', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;  
34 - }  
35 -  
36 - .dark-mode {  
37 - --bg-color: #1a1a2e;  
38 - --text-color: #e0e0e0;  
39 - --card-bg: #16213e;  
40 - --border-color: #0f3460;  
41 - --primary-color: #e94560;  
42 - --sidebar-bg: #0f3460;  
43 - --sidebar-text: #e0e0e0;  
44 - --sidebar-hover: #16213e;  
45 - --shadow: 0 4px 12px rgba(0, 0, 0, 0.2);  
46 - }  
47 -  
48 - * {  
49 - box-sizing: border-box;  
50 - margin: 0;  
51 - padding: 0;  
52 - }  
53 -  
54 - body {  
55 - font-family: var(--font-family);  
56 - background-color: var(--bg-color);  
57 - color: var(--text-color);  
58 - line-height: 1.6;  
59 - transition: background-color 0.3s, color 0.3s;  
60 - display: flex;  
61 - }  
62 -  
63 - #sidebar {  
64 - width: 260px;  
65 - background-color: var(--sidebar-bg);  
66 - color: var(--sidebar-text);  
67 - height: 100vh;  
68 - position: fixed;  
69 - top: 0;  
70 - left: 0;  
71 - padding: 20px;  
72 - display: flex;  
73 - flex-direction: column;  
74 - transition: transform 0.3s ease-in-out;  
75 - }  
76 -  
77 - #sidebar .logo {  
78 - font-size: 1.5em;  
79 - font-weight: bold;  
80 - margin-bottom: 30px;  
81 - text-align: center;  
82 - }  
83 -  
84 - #sidebar nav ul {  
85 - list-style: none;  
86 - }  
87 -  
88 - #sidebar nav ul li a {  
89 - color: var(--sidebar-text);  
90 - text-decoration: none;  
91 - display: block;  
92 - padding: 12px 15px;  
93 - border-radius: 6px;  
94 - margin-bottom: 5px;  
95 - transition: background-color 0.2s;  
96 - font-weight: 500;  
97 - }  
98 -  
99 - #sidebar nav ul li a:hover, #sidebar nav ul li a.active {  
100 - background-color: var(--sidebar-hover);  
101 - }  
102 -  
103 - #main-content {  
104 - margin-left: 260px;  
105 - width: calc(100% - 260px);  
106 - padding: 30px;  
107 - }  
108 -  
109 - header {  
110 - display: flex;  
111 - justify-content: space-between;  
112 - align-items: center;  
113 - margin-bottom: 30px;  
114 - }  
115 -  
116 - header h1 {  
117 - color: var(--primary-color);  
118 - font-size: 2.2em;  
119 - }  
120 -  
121 - .header-actions button {  
122 - background: var(--card-bg);  
123 - border: 1px solid var(--border-color);  
124 - color: var(--text-color);  
125 - padding: 8px 15px;  
126 - border-radius: 6px;  
127 - cursor: pointer;  
128 - margin-left: 10px;  
129 - transition: all 0.2s;  
130 - font-size: 14px;  
131 - }  
132 - .header-actions button:hover {  
133 - background: var(--accent-color-1);  
134 - color: #fff;  
135 - border-color: var(--accent-color-1);  
136 - }  
137 -  
138 - .card {  
139 - background-color: var(--card-bg);  
140 - border-radius: 12px;  
141 - padding: 25px;  
142 - margin-bottom: 25px;  
143 - box-shadow: var(--shadow);  
144 - border: 1px solid var(--border-color);  
145 - transition: background-color 0.3s, border-color 0.3s;  
146 - }  
147 -  
148 - h2 {  
149 - font-size: 1.8em;  
150 - color: var(--primary-color);  
151 - border-bottom: 3px solid var(--accent-color-1);  
152 - padding-bottom: 10px;  
153 - margin-bottom: 20px;  
154 - }  
155 -  
156 - h3 {  
157 - font-size: 1.4em;  
158 - color: var(--text-color);  
159 - margin-top: 20px;  
160 - margin-bottom: 15px;  
161 - }  
162 -  
163 - .kpi-container {  
164 - display: grid;  
165 - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));  
166 - gap: 20px;  
167 - }  
168 -  
169 - .kpi-item {  
170 - background-color: var(--bg-color);  
171 - padding: 20px;  
172 - border-radius: 8px;  
173 - text-align: center;  
174 - border-left: 5px solid;  
175 - }  
176 - .kpi-item .value {  
177 - font-size: 2.5em;  
178 - font-weight: bold;  
179 - color: var(--primary-color);  
180 - }  
181 - .kpi-item .label {  
182 - font-size: 1em;  
183 - color: var(--text-color);  
184 - opacity: 0.8;  
185 - }  
186 - .kpi-item.volume { border-color: var(--accent-color-1); }  
187 - .kpi-item.reads { border-color: var(--accent-color-4); }  
188 - .kpi-item.interactions { border-color: var(--accent-color-3); }  
189 -  
190 - .chart-container {  
191 - position: relative;  
192 - height: 400px;  
193 - width: 100%;  
194 - }  
195 -  
196 - .dual-chart-container {  
197 - display: grid;  
198 - grid-template-columns: 1fr 2fr;  
199 - gap: 25px;  
200 - align-items: center;  
201 - }  
202 -  
203 - .timeline {  
204 - list-style-type: none;  
205 - position: relative;  
206 - padding-left: 30px;  
207 - }  
208 - .timeline:before {  
209 - content: '';  
210 - position: absolute;  
211 - left: 5px;  
212 - top: 0;  
213 - bottom: 0;  
214 - width: 2px;  
215 - background: var(--border-color);  
216 - }  
217 - .timeline li {  
218 - margin-bottom: 20px;  
219 - position: relative;  
220 - }  
221 - .timeline li:before {  
222 - content: '';  
223 - position: absolute;  
224 - left: -30px;  
225 - top: 5px;  
226 - width: 12px;  
227 - height: 12px;  
228 - border-radius: 50%;  
229 - background: var(--accent-color-1);  
230 - border: 2px solid var(--bg-color);  
231 - }  
232 - .timeline .date {  
233 - font-weight: bold;  
234 - color: var(--primary-color);  
235 - }  
236 -  
237 - details {  
238 - background: var(--bg-color);  
239 - border-radius: 8px;  
240 - margin-bottom: 10px;  
241 - border: 1px solid var(--border-color);  
242 - }  
243 - summary {  
244 - padding: 15px;  
245 - font-weight: bold;  
246 - font-size: 1.1em;  
247 - cursor: pointer;  
248 - list-style: none;  
249 - }  
250 - summary::-webkit-details-marker { display: none; }  
251 - summary:before {  
252 - content: '▶';  
253 - margin-right: 10px;  
254 - }  
255 - details[open] summary:before {  
256 - content: '▼';  
257 - }  
258 - .details-content {  
259 - padding: 0 20px 20px 20px;  
260 - }  
261 - .details-content p {  
262 - margin-bottom: 10px;  
263 - }  
264 - .details-content .highlight {  
265 - font-weight: bold;  
266 - color: var(--accent-color-1);  
267 - }  
268 - .details-content .anxiety {  
269 - color: var(--accent-color-2);  
270 - }  
271 -  
272 - .risk-list li {  
273 - padding: 10px;  
274 - border-bottom: 1px dashed var(--border-color);  
275 - }  
276 - .risk-list li:last-child { border-bottom: none; }  
277 - .risk-list .negative {  
278 - color: var(--accent-color-2);  
279 - font-weight: bold;  
280 - }  
281 - .risk-list .potential {  
282 - color: var(--accent-color-3);  
283 - font-weight: bold;  
284 - }  
285 -  
286 - table {  
287 - width: 100%;  
288 - border-collapse: collapse;  
289 - margin-top: 15px;  
290 - }  
291 - th, td {  
292 - padding: 12px;  
293 - text-align: left;  
294 - border-bottom: 1px solid var(--border-color);  
295 - }  
296 - th {  
297 - background-color: var(--bg-color);  
298 - }  
299 -  
300 - .hamburger {  
301 - display: none;  
302 - position: fixed;  
303 - top: 15px;  
304 - left: 15px;  
305 - z-index: 1001;  
306 - background: var(--sidebar-bg);  
307 - border: none;  
308 - color: white;  
309 - padding: 10px;  
310 - border-radius: 50%;  
311 - width: 40px;  
312 - height: 40px;  
313 - cursor: pointer;  
314 - }  
315 -  
316 - @media (max-width: 1024px) {  
317 - #sidebar {  
318 - transform: translateX(-260px);  
319 - z-index: 1000;  
320 - }  
321 - #sidebar.open {  
322 - transform: translateX(0);  
323 - }  
324 - #main-content {  
325 - margin-left: 0;  
326 - width: 100%;  
327 - }  
328 - .hamburger {  
329 - display: block;  
330 - }  
331 - .dual-chart-container {  
332 - grid-template-columns: 1fr;  
333 - }  
334 - header {  
335 - flex-direction: column;  
336 - align-items: flex-start;  
337 - }  
338 - header h1 { font-size: 1.8em; margin-left: 60px; }  
339 - .header-actions { margin-top: 10px; margin-left: 60px; }  
340 - }  
341 -  
342 - @media print {  
343 - body { display: block; }  
344 - #sidebar, .header-actions, .hamburger { display: none; }  
345 - #main-content { margin-left: 0; width: 100%; padding: 0; }  
346 - .card { box-shadow: none; border: 1px solid #ccc; page-break-inside: avoid; }  
347 - h1, h2 { color: #000 !important; }  
348 - :root {  
349 - --bg-color: #fff;  
350 - --text-color: #000;  
351 - --card-bg: #fff;  
352 - --border-color: #ddd;  
353 - }  
354 - }  
355 - </style>  
356 -</head>  
357 -<body>  
358 - <div id="sidebar">  
359 - <div class="logo">舆情分析报告</div>  
360 - <nav>  
361 - <ul>  
362 - <li><a href="#overview" class="active">1.0 舆情概览</a></li>  
363 - <li><a href="#trends">2.0 关键数据趋势</a></li>  
364 - <li><a href="#timeline">3.0 舆情动态时间轴</a></li>  
365 - <li><a href="#topics">4.0 热点话题追踪</a></li>  
366 - <li><a href="#channels">5.0 重点渠道表现</a></li>  
367 - <li><a href="#risks">6.0 负面与风险监测</a></li>  
368 - <li><a href="#summary">7.0 简报与关注点</a></li>  
369 - <li><a href="#appendix">8.0 数据附录</a></li>  
370 - </ul>  
371 - </nav>  
372 - </div>  
373 -  
374 - <button id="hamburger" class="hamburger"></button>  
375 -  
376 - <div id="main-content">  
377 - <header>  
378 - <div>  
379 - <h1>智能舆情分析报告:武汉大学</h1>  
380 - <p>数据周期:2024-03-01 至 2024-04-30</p>  
381 - </div>  
382 - <div class="header-actions">  
383 - <button id="toggle-dark-mode">切换模式</button>  
384 - <button onclick="window.print()">打印/导出PDF</button>  
385 - </div>  
386 - </header>  
387 -  
388 - <section id="overview" class="card">  
389 - <h2>1.0 本期舆情概览</h2>  
390 - <h3>1.1 核心数据看板</h3>  
391 - <div class="kpi-container">  
392 - <div class="kpi-item volume">  
393 - <div class="value">210万+</div>  
394 - <div class="label">相关讨论量</div>  
395 - </div>  
396 - <div class="kpi-item reads">  
397 - <div class="value">3.8亿+</div>  
398 - <div class="label">总阅读量</div>  
399 - </div>  
400 - <div class="kpi-item interactions">  
401 - <div class="value">420万+</div>  
402 - <div class="label">总互动量</div>  
403 - </div>  
404 - </div>  
405 -  
406 - <h3>1.2 本期核心情感分布</h3>  
407 - <div class="dual-chart-container">  
408 - <div class="chart-container" style="height: 300px;">  
409 - <canvas id="sentimentPieChart"></canvas>  
410 - </div>  
411 - <div>  
412 - <p>本周期内,关于武汉大学的舆情呈现出鲜明的“骄傲”、“焦虑”与“烟火气”三重情感交织的面孔。</p>  
413 - <ul>  
414 - <li><strong style="color: var(--accent-color-4);">骄傲 (约42%)</strong>: 主要源于对学校百年历史、世界一流学科(如测绘遥感)和硬核科研成果的自豪感。</li>  
415 - <li><strong style="color: var(--accent-color-2);">焦虑 (约20%)</strong>: 集中体现在对樱花季管理、优势专业就业薪资、科研内卷及资源分配等现实问题的担忧。</li>  
416 - <li><strong style="color: var(--accent-color-3);">烟火气/怀旧 (约38%)</strong>: 体现在校友的温馨回忆、对校园美景的浪漫想象以及对校史趣闻的津津乐道。</li>  
417 - </ul>  
418 - </div>  
419 - </div>  
420 -  
421 - <h3>1.3 本期舆情热度 TOP 3</h3>  
422 - <ol>  
423 - <li><strong>武大樱花预约 (微博话题阅读量 3.8亿)</strong>: 兼具浪漫期待与“抢票难”的吐槽,成为全民关注的社会事件。</li>  
424 - <li><strong>“世界第一”学科的现实讨论 (知乎热帖 4.5万赞)</strong>: 围绕测绘遥感等顶尖学科的学术光环与毕业生实际薪资的巨大反差展开,引发深度共鸣与焦虑。</li>  
425 - <li><strong>校史新解与玩梗 (抖音话题 1.2万视频)</strong>: “学大汉武立国”等校史梗在年轻群体中病毒式传播,展现了历史文化的现代活力。</li>  
426 - </ol>  
427 - </section>  
428 -  
429 - <section id="trends" class="card">  
430 - <h2>2.0 关键数据趋势</h2>  
431 - <h3>2.1 声量走势</h3>  
432 - <div class="chart-container">  
433 - <canvas id="volumeTrendChart"></canvas>  
434 - </div>  
435 - <p>分析:声量在三月中下旬至四月初达到顶峰,与“樱花季”高度重合,显示该事件是本周期内最核心的舆情引爆点。其余时间声量平稳,主要由学术发布、校友新闻等常规内容驱动。</p>  
436 -  
437 - <h3>2.2 核心情感趋势 (以“测绘遥感”话题为例)</h3>  
438 - <div class="chart-container">  
439 - <canvas id="sentimentTrendChart"></canvas>  
440 - </div>  
441 - <p>分析:在关于“测绘遥感”学科的讨论中,“自豪感”虽是基础情绪,但随着就业、薪资等现实问题的深入,讨论后期“焦虑”情绪占比明显上升,反映出公众及学生群体从“仰望星空”到“脚踏实地”的心态转变。</p>  
442 - </section>  
443 -  
444 - <section id="timeline" class="card">  
445 - <h2>3.0 本周期舆情动态时间轴</h2>  
446 - <ul class="timeline">  
447 - <li>  
448 - <div class="date">三月上旬</div>  
449 - <p>#武大樱花预约# 话题开始预热,社交媒体出现大量往年美图和预约攻略,期待情绪高涨。</p>  
450 - </li>  
451 - <li>  
452 - <div class="date">三月中下旬</div>  
453 - <p>樱花季正式开启,声量达到顶峰。“抢票难”、“人挤人”等负面吐槽与“最美校园”的赞美形成强烈对比。</p>  
454 - </li>  
455 - <li>  
456 - <div class="date">四月上旬</div>  
457 - <p>知乎出现高赞问题:“如何看待武大测绘遥感世界第一,但毕业生薪资并不突出?”,引发“学术光环”与“现实就业”的大范围讨论,焦虑情绪蔓延。</p>  
458 - </li>  
459 - <li>  
460 - <div class="date">四月中旬</div>  
461 - <p>B站、抖音等平台出现“院士把卫星数据当糖果发”、“00后通宵做实验”等内容,展现科研硬实力,正面“敬意”情绪小幅回升。</p>  
462 - </li>  
463 - <li>  
464 - <div class="date">四月下旬</div>  
465 - <p>京都大学学生在珞珈讲坛朗诵《将进酒》视频走红,引发对中外文化交流的正面讨论,#武大国际范#成为热词。</p>  
466 - </li>  
467 - </ul>  
468 - </section>  
469 -  
470 - <section id="topics" class="card">  
471 - <h2>4.0 热点话题追踪</h2>  
472 - <details>  
473 - <summary>话题一:百年校史与樱花季 —— 共享的文化符号</summary>  
474 - <div class="details-content">  
475 - <p><span class="highlight">高光叙事:</span>“国立武汉大学”老牌坊、“樱花大道”、“老斋舍”等历史符号在社交媒体上被反复提及,构建了集体自豪感。抖音上“倒读校名”等创意玩法,使厚重历史变得轻松有趣。</p>  
476 - <p><span class="anxiety">争议痛点:</span>樱花季的过度商业化和管理挑战引发校内  
477 -</body>  
478 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --primary-color: #1E3A8A; /* 深蓝 */  
21 - --secondary-color: #3B82F6; /* 亮蓝 */  
22 - --accent-color: #F59E0B; /* 琥珀黄 */  
23 - --bg-color: #F3F4F6; /* 浅灰背景 */  
24 - --card-bg-color: #FFFFFF;  
25 - --text-color: #1F2937; /* 深灰文字 */  
26 - --text-light-color: #6B7280; /* 浅灰文字 */  
27 - --border-color: #E5E7EB;  
28 - --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);  
29 - --font-family: 'Noto Sans SC', sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial;  
30 - }  
31 -  
32 - body.dark-mode {  
33 - --primary-color: #3B82F6;  
34 - --secondary-color: #60A5FA;  
35 - --accent-color: #FBBF24;  
36 - --bg-color: #111827; /* 深黑背景 */  
37 - --card-bg-color: #1F2937; /* 深灰卡片 */  
38 - --text-color: #F9FAFB; /* 亮灰文字 */  
39 - --text-light-color: #9CA3AF;  
40 - --border-color: #374151;  
41 - }  
42 -  
43 - @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');  
44 -  
45 - * {  
46 - box-sizing: border-box;  
47 - margin: 0;  
48 - padding: 0;  
49 - }  
50 -  
51 - body {  
52 - font-family: var(--font-family);  
53 - background-color: var(--bg-color);  
54 - color: var(--text-color);  
55 - line-height: 1.6;  
56 - transition: background-color 0.3s, color 0.3s;  
57 - font-weight: 300;  
58 - }  
59 -  
60 - .container {  
61 - display: flex;  
62 - max-width: 1600px;  
63 - margin: 0 auto;  
64 - }  
65 -  
66 - .sidebar {  
67 - width: 260px;  
68 - background-color: var(--card-bg-color);  
69 - padding: 2rem 1rem;  
70 - position: sticky;  
71 - top: 0;  
72 - height: 100vh;  
73 - overflow-y: auto;  
74 - transition: background-color 0.3s;  
75 - border-right: 1px solid var(--border-color);  
76 - }  
77 -  
78 - .sidebar-header {  
79 - font-size: 1.5rem;  
80 - font-weight: 700;  
81 - color: var(--primary-color);  
82 - margin-bottom: 2rem;  
83 - text-align: center;  
84 - }  
85 -  
86 - .sidebar-nav ul {  
87 - list-style: none;  
88 - }  
89 -  
90 - .sidebar-nav li a {  
91 - display: block;  
92 - padding: 0.75rem 1rem;  
93 - color: var(--text-light-color);  
94 - text-decoration: none;  
95 - border-radius: 8px;  
96 - transition: background-color 0.2s, color 0.2s;  
97 - font-weight: 500;  
98 - }  
99 -  
100 - .sidebar-nav li a:hover, .sidebar-nav li a.active {  
101 - background-color: var(--primary-color);  
102 - color: #fff;  
103 - }  
104 -  
105 - main {  
106 - flex: 1;  
107 - padding: 2rem;  
108 - overflow-y: auto;  
109 - }  
110 -  
111 - header.report-header {  
112 - margin-bottom: 2rem;  
113 - border-bottom: 2px solid var(--primary-color);  
114 - padding-bottom: 1.5rem;  
115 - }  
116 -  
117 - .header-top {  
118 - display: flex;  
119 - justify-content: space-between;  
120 - align-items: center;  
121 - margin-bottom: 1rem;  
122 - }  
123 -  
124 - .header-controls button {  
125 - background: var(--secondary-color);  
126 - color: white;  
127 - border: none;  
128 - padding: 0.6rem 1.2rem;  
129 - border-radius: 8px;  
130 - cursor: pointer;  
131 - margin-left: 0.5rem;  
132 - font-weight: 500;  
133 - transition: background-color 0.2s;  
134 - }  
135 -  
136 - .header-controls button:hover {  
137 - background: var(--primary-color);  
138 - }  
139 -  
140 - h1 {  
141 - font-size: 2.5rem;  
142 - font-weight: 700;  
143 - color: var(--primary-color);  
144 - }  
145 -  
146 - h1 span {  
147 - font-size: 1.5rem;  
148 - color: var(--text-light-color);  
149 - font-weight: 400;  
150 - display: block;  
151 - margin-top: 0.5rem;  
152 - }  
153 -  
154 - .report-meta {  
155 - color: var(--text-light-color);  
156 - font-size: 0.9rem;  
157 - }  
158 -  
159 - section {  
160 - margin-bottom: 3rem;  
161 - background: var(--card-bg-color);  
162 - padding: 2rem;  
163 - border-radius: 12px;  
164 - box-shadow: var(--shadow);  
165 - transition: background-color 0.3s;  
166 - }  
167 -  
168 - .section-header {  
169 - display: flex;  
170 - justify-content: space-between;  
171 - align-items: center;  
172 - cursor: pointer;  
173 - margin-bottom: 1.5rem;  
174 - border-bottom: 1px solid var(--border-color);  
175 - padding-bottom: 1rem;  
176 - }  
177 -  
178 - h2 {  
179 - font-size: 1.8rem;  
180 - font-weight: 700;  
181 - color: var(--primary-color);  
182 - }  
183 -  
184 - .toggle-icon {  
185 - font-size: 1.5rem;  
186 - transition: transform 0.3s;  
187 - }  
188 -  
189 - .section-content.collapsed {  
190 - display: none;  
191 - }  
192 -  
193 - h3 {  
194 - font-size: 1.4rem;  
195 - font-weight: 500;  
196 - margin-top: 1.5rem;  
197 - margin-bottom: 1rem;  
198 - color: var(--secondary-color);  
199 - }  
200 -  
201 - .grid {  
202 - display: grid;  
203 - gap: 1.5rem;  
204 - }  
205 -  
206 - .grid-cols-3 {  
207 - grid-template-columns: repeat(3, 1fr);  
208 - }  
209 -  
210 - .grid-cols-2 {  
211 - grid-template-columns: repeat(2, 1fr);  
212 - }  
213 -  
214 - .card {  
215 - background: var(--bg-color);  
216 - padding: 1.5rem;  
217 - border-radius: 8px;  
218 - text-align: center;  
219 - }  
220 -  
221 - .card .value {  
222 - font-size: 2.5rem;  
223 - font-weight: 700;  
224 - color: var(--primary-color);  
225 - }  
226 -  
227 - .card .label {  
228 - font-size: 1rem;  
229 - color: var(--text-light-color);  
230 - }  
231 -  
232 - .chart-container {  
233 - position: relative;  
234 - height: 400px;  
235 - width: 100%;  
236 - }  
237 -  
238 - .timeline {  
239 - list-style: none;  
240 - position: relative;  
241 - padding-left: 2rem;  
242 - }  
243 -  
244 - .timeline:before {  
245 - content: '';  
246 - position: absolute;  
247 - left: 0;  
248 - top: 0;  
249 - bottom: 0;  
250 - width: 2px;  
251 - background: var(--secondary-color);  
252 - }  
253 -  
254 - .timeline-item {  
255 - margin-bottom: 2rem;  
256 - }  
257 -  
258 - .timeline-item:before {  
259 - content: '';  
260 - position: absolute;  
261 - left: -8px;  
262 - top: 5px;  
263 - width: 18px;  
264 - height: 18px;  
265 - border-radius: 50%;  
266 - background: white;  
267 - border: 3px solid var(--secondary-color);  
268 - }  
269 -  
270 - .timeline-date {  
271 - font-weight: 700;  
272 - color: var(--accent-color);  
273 - }  
274 -  
275 - table {  
276 - width: 100%;  
277 - border-collapse: collapse;  
278 - margin-top: 1rem;  
279 - }  
280 -  
281 - th, td {  
282 - padding: 0.8rem 1rem;  
283 - border: 1px solid var(--border-color);  
284 - text-align: left;  
285 - }  
286 -  
287 - th {  
288 - background-color: var(--bg-color);  
289 - font-weight: 500;  
290 - }  
291 -  
292 - @media (max-width: 1024px) {  
293 - .container {  
294 - flex-direction: column;  
295 - }  
296 - .sidebar {  
297 - width: 100%;  
298 - height: auto;  
299 - position: static;  
300 - border-right: none;  
301 - border-bottom: 1px solid var(--border-color);  
302 - }  
303 - main { padding: 1rem; }  
304 - h1 { font-size: 2rem; }  
305 - .grid-cols-3, .grid-cols-2 {  
306 - grid-template-columns: 1fr;  
307 - }  
308 - }  
309 -  
310 - @media print {  
311 - .sidebar, .header-controls {  
312 - display: none;  
313 - }  
314 - main { padding: 0; }  
315 - body { background-color: #fff; color: #000; }  
316 - section { box-shadow: none; border: 1px solid #ddd; padding: 1.5rem; }  
317 - h1, h2 { color: #000; }  
318 - }  
319 - </style>  
320 -</head>  
321 -<body>  
322 -  
323 - <div class="container">  
324 - <aside class="sidebar">  
325 - <div class="sidebar-header">导航目录</div>  
326 - <nav class="sidebar-nav">  
327 - <ul>  
328 - <li><a href="#overview" class="active">1.0 舆情概览</a></li>  
329 - <li><a href="#trends">2.0 关键数据趋势</a></li>  
330 - <li><a href="#timeline">3.0 舆情动态时间轴</a></li>  
331 - <li><a href="#hot-topics">4.0 热点话题追踪</a></li>  
332 - <li><a href="#channels">5.0 重点渠道表现</a></li>  
333 - <li><a href="#risks">6.0 负面与风险监测</a></li>  
334 - <li><a href="#summary">7.0 简报与关注点</a></li>  
335 - </ul>  
336 - </nav>  
337 - </aside>  
338 -  
339 - <main>  
340 - <header class="report-header">  
341 - <div class="header-top">  
342 - <h1>智能舆情分析报告  
343 - <span>武汉大学 · 百年名校的骄傲、焦虑与烟火气</span>  
344 - </h1>  
345 - <div class="header-controls">  
346 - <button id="theme-toggle">切换主题</button>  
347 - <button onclick="window.print()">打印/PDF</button>  
348 - </div>  
349 - </div>  
350 - <p class="report-meta">报告周期: 2024-03-01 至 2024-04-30 | 数据来源: 微博、抖音、B站、知乎等12个信源</p>  
351 - </header>  
352 -  
353 - <section id="overview">  
354 - <div class="section-header">  
355 - <h2>1.0 本周/月舆情概览</h2>  
356 - <span class="toggle-icon"></span>  
357 - </div>  
358 - <div class="section-content">  
359 - <h3>1.1 核心数据看板</h3>  
360 - <div class="grid grid-cols-3">  
361 - <div class="card">  
362 - <div class="value">3.8亿+</div>  
363 - <div class="label">总阅读量</div>  
364 - </div>  
365 - <div class="card">  
366 - <div class="value">210万+</div>  
367 - <div class="label">有效讨论文本</div>  
368 - </div>  
369 - <div class="card">  
370 - <div class="value">420万+</div>  
371 - <div class="label">总互动量</div>  
372 - </div>  
373 - </div>  
374 -  
375 - <h3>1.2 本期舆情热度 TOP 3</h3>  
376 - <ol>  
377 - <li><strong>樱花季盛况与争议:</strong>微博话题#武大樱花预约#阅读量高达3.8亿,引发全民关注。内容兼具“浪漫滤镜”与“抢票焦虑”,是本周期绝对的流量核心。</li>  
378 - <li><strong>学科实力与就业焦虑:</strong>以“测绘遥感世界第一”为代表的学术自豪感,与毕业生关于“薪资买不起房”的现实焦虑形成强烈对比,在知乎、B站等平台引发深度讨论。</li>  
379 - <li><strong>百年校史的现代解读:</strong>围绕建校时间(1893 vs 1913)的讨论在贴吧等社区持续发酵,并衍生出“学大汉武立国”等网络热梗,体现了历史在青年群体中的新生命力。</li>  
380 - </ol>  
381 -  
382 - <h3>1.3 重点预警</h3>  
383 - <p><strong>资源落差感加剧:</strong>“院士发卫星数据当糖果”与“普通学生排队三周用PCR仪”的对比,凸显了顶尖资源与普通学生体验之间的鸿沟,可能成为内部矛盾的潜在燃点。</p>  
384 - <p><strong>就业性价比焦虑:</strong>法学、口腔医学等王牌专业的学生对实习、规培待遇的吐槽增多,舆论开始关注“名校光环”在现实就业市场中的“性价比”问题。</p>  
385 - </div>  
386 - </section>  
387 -  
388 - <section id="trends">  
389 - <div class="section-header">  
390 - <h2>2.0 关键数据趋势</h2>  
391 - <span class="toggle-icon"></span>  
392 - </div>  
393 - <div class="section-content">  
394 - <div class="grid grid-cols-2">  
395 - <div>  
396 - <h3>2.1 整体情感分布</h3>  
397 - <div class="chart-container">  
398 - <canvas id="sentimentPieChart"></canvas>  
399 - </div>  
400 - </div>  
401 - <div>  
402 - <h3>2.2 核心情感趋势</h3>  
403 - <div class="chart-container">  
404 - <canvas id="sentimentTrendChart"></canvas>  
405 - </div>  
406 - </div>  
407 - </div>  
408 - </div>  
409 - </section>  
410 -  
411 - <section id="timeline">  
412 - <div class="section-header">  
413 - <h2>3.0 本周期舆情动态时间轴</h2>  
414 - <span class="toggle-icon"></span>  
415 - </div>  
416 - <div class="section-content">  
417 - <ul class="timeline">  
418 - <li class="timeline-item">  
419 - <div class="timeline-date">3月初</div>  
420 - <p><strong>#武大樱花预约# 话题启动:</strong>官方发布预约赏樱通知,社交媒体热度开始攀升,引发第一波关于“抢票难”的讨论。</p>  
421 - </li>  
422 - <li class="timeline-item">  
423 - <div class="timeline-date">3月中旬</div>  
424 - <p><strong>樱花盛开期:</strong>小红书、抖音涌现大量“童话滤镜”赏樱内容,正面情绪达到顶峰。同时,#武汉人挤不进武大# 等负面话题出现,反映管理压力。</p>  
425 - </li>  
426 - <li class="timeline-item">  
427 - <div class="timeline-date">4月初</div>  
428 - <p><strong>春招季讨论:</strong>知乎出现高赞问答,讨论“武大测绘遥感世界第一,为何毕业生工资不高”,引发对“天坑专业”和就业现实的广泛共鸣。</p>  
429 - </li>  
430 - <li class="timeline-item">  
431 - <div class="timeline-date">4月中旬</div>  
432 - <p><strong>国际交流活动:</strong>诺贝尔奖得主谢克曼返校演讲、京都大学学生朗诵《将进酒》等事件在B站获得高播放量,激发文化自豪感和学术向往。</p>  
433 - </li>  
434 - <li class="timeline-item">  
435 - <div class="timeline-date">4月底</div>  
436 - <p><strong>校史讨论发酵:</strong>贴吧及微博的“校史起点”讨论被营销号整合传播,衍生出“学大汉武立国”等网络梗,将严肃讨论娱乐化。</p>  
437 - </li>  
438 - </ul>  
439 - </div>  
440 - </section>  
441 -  
442 - <section id="hot-topics">  
443 - <div class="section-header">  
444 - <h2>4.0 热点话题追踪</h2>  
445 - <span class="toggle-icon"></span>  
446 - </div>  
447 - <div class="section-content">  
448 - <h3>4.1 学科光环与现实焦虑的碰撞</h3>  
449 - <p>公众对武大学术实力的认知呈现两极化叙事。一方面,以“测绘遥感世界第一”、“法学全国前三”、“病毒学国家重点实验室”为代表的“高光叙事”在知乎、B站等平台持续获得高赞,构筑了强大的学术自豪感。但另一方面,来自学生和年轻校友的“焦虑痛点”也日益凸显,形成强烈反差。</p>  
450 - <table>  
451 - <thead>  
452 - <tr><th>学科</th><th>高光叙事</th><th>焦虑痛点</th><th>情感走向</th></tr>  
453 - </thead>  
454 - <tbody>  
455 - <tr><td>测绘遥感</td><td>知乎“世界第一”获4.5万赞</td><td>硕士春招中位数7.2k,“买不起武汉一平米”</td><td>自豪感被现实焦虑稀释</td></tr>  
456 - <tr><td>法学</td><td>省考“双第一”报喜刷屏</td><td>红圈所实习5k不包宿,“温柔铠甲裂了”</td><td>精英向往与考公热并存</td></tr>  
457 - <tr><td>口腔医学</td><td>B站科普视频获300万播放</td><td>规培时薪低于奶茶店,“累到筷子都拿不稳”</td><td>社会信赖与从业者疲惫</td></tr>  
458 - </tbody>  
459 - </table>  
460 - <p class="conclusion"><strong>洞察:</strong>学科光芒并未熄灭,而是被年轻人的房租、薪资、工作强度等现实问题折射得更立体,公众对“名校”的评价标准正从单一的学术排名向“投入产出比”延伸。</p>  
461 -  
462 - <h3>4.2 校园文化:樱花的浪漫与“围城”的拉锯</h3>  
463 - <p>樱花季是武大最具代表性的文化符号,但也成为内外部感知差异最大的场景。对外,它是“童话滤镜”下的浪漫圣地;对内,则夹杂着“抢票难”、“游客拥挤”的困扰。</p>  
464 - <ul>  
465 - <li><strong>浪漫叙事:</strong>小红书涌现超10万篇赏樱笔记,抖音“武大樱花”相关视频播放量破亿,构建了强大的正面形象。</li>  
466 - <li><strong>现实裂缝:</strong>微博#武汉人挤不进武大#话题引发3.8万条讨论,学生群体抱怨正常学习生活受影响,本地市民则感到被“拒之门外”。</li>  
467 - </ul>  
468 - <p class="conclusion"><strong>洞察:</strong>樱花节已从校园文化活动演变为城市级公共事件。如何在开放共享与保障校内秩序之间取得平衡,是学校持续面临的治理挑战。</p>  
469 - </div>  
470 - </section>  
471 -  
472 - <section id="channels">  
473 - <div class="section-header">  
474 - <h2>5.0 重点渠道表现</h2>  
475 - <span class="toggle-icon"></span>  
476 - </div>  
477 - <div class="section-content">  
478 - <div class="grid grid-cols-2">  
479 - <div>  
480 - <h3>5.1 核心社交媒体表现</h3>  
481 - <div class="chart-container">  
482 - <canvas id="sourceDistributionChart"></canvas>  
483 - </div>  
484 - </div>  
485 - <div>  
486 - <h3>5.2 核心内容平台表现</h3>  
487 - <ul>  
488 - <li><strong>微博:</strong>主要舆论场和事件引爆点。#武大樱花预约#等热搜话题主导了声量,但讨论相对碎片化。</li>  
489 - <li><strong>知乎 & B站:</strong>深度讨论和专业内容核心区。关于学科实力、就业前景、科研生活的长文和视频引发了更持久和深刻的共鸣。</li>  
490 - <li><strong>小红书 & 抖音:</strong>视觉化和生活化内容主阵地。以“高颜值滤镜”展示校园风光、学习vlog等内容,塑造了青春  
491 -</body>  
492 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --bg-color: #f4f7f9;  
21 - --text-color: #333;  
22 - --card-bg: #ffffff;  
23 - --border-color: #e0e0e0;  
24 - --primary-color: #2c3e50;  
25 - --accent-color: #3498db;  
26 - --accent-color-light: #a9cce3;  
27 - --positive-color: #27ae60;  
28 - --negative-color: #c0392b;  
29 - --neutral-color: #f39c12;  
30 - --shadow: 0 4px 8px rgba(0,0,0,0.05);  
31 - --font-family: 'Helvetica Neue', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;  
32 - }  
33 -  
34 - .dark-mode {  
35 - --bg-color: #1a1a1a;  
36 - --text-color: #e0e0e0;  
37 - --card-bg: #2c2c2c;  
38 - --border-color: #444;  
39 - --primary-color: #ffffff;  
40 - --accent-color: #5dade2;  
41 - --accent-color-light: #2c3e50;  
42 - }  
43 -  
44 - * {  
45 - box-sizing: border-box;  
46 - margin: 0;  
47 - padding: 0;  
48 - }  
49 -  
50 - body {  
51 - font-family: var(--font-family);  
52 - background-color: var(--bg-color);  
53 - color: var(--text-color);  
54 - line-height: 1.6;  
55 - transition: background-color 0.3s, color 0.3s;  
56 - }  
57 -  
58 - .container {  
59 - display: flex;  
60 - max-width: 1600px;  
61 - margin: 0 auto;  
62 - }  
63 -  
64 - .sidebar {  
65 - width: 240px;  
66 - background-color: var(--card-bg);  
67 - border-right: 1px solid var(--border-color);  
68 - position: sticky;  
69 - top: 0;  
70 - height: 100vh;  
71 - padding: 20px 0;  
72 - transition: background-color 0.3s, border-color 0.3s;  
73 - overflow-y: auto;  
74 - }  
75 -  
76 - .sidebar-header {  
77 - padding: 0 20px 20px 20px;  
78 - font-size: 1.2em;  
79 - font-weight: 600;  
80 - color: var(--primary-color);  
81 - border-bottom: 1px solid var(--border-color);  
82 - }  
83 -  
84 - .sidebar-nav ul {  
85 - list-style: none;  
86 - padding: 20px 0;  
87 - }  
88 -  
89 - .sidebar-nav li a {  
90 - display: block;  
91 - padding: 12px 20px;  
92 - color: var(--text-color);  
93 - text-decoration: none;  
94 - font-weight: 500;  
95 - border-left: 3px solid transparent;  
96 - transition: all 0.3s ease;  
97 - }  
98 -  
99 - .sidebar-nav li a:hover, .sidebar-nav li a.active {  
100 - background-color: var(--accent-color-light);  
101 - color: var(--accent-color);  
102 - border-left-color: var(--accent-color);  
103 - }  
104 -  
105 - .main-content {  
106 - flex: 1;  
107 - padding: 20px 30px;  
108 - overflow-y: auto;  
109 - }  
110 -  
111 - header {  
112 - display: flex;  
113 - justify-content: space-between;  
114 - align-items: center;  
115 - margin-bottom: 20px;  
116 - padding-bottom: 20px;  
117 - border-bottom: 1px solid var(--border-color);  
118 - }  
119 -  
120 - header h1 {  
121 - font-size: 2em;  
122 - color: var(--primary-color);  
123 - font-weight: 700;  
124 - }  
125 -  
126 - .header-meta {  
127 - font-size: 0.9em;  
128 - color: #777;  
129 - }  
130 - .dark-mode .header-meta { color: #aaa; }  
131 -  
132 - .actions button {  
133 - background: none;  
134 - border: 1px solid var(--border-color);  
135 - color: var(--text-color);  
136 - padding: 8px 12px;  
137 - border-radius: 6px;  
138 - cursor: pointer;  
139 - margin-left: 10px;  
140 - transition: all 0.3s ease;  
141 - }  
142 -  
143 - .actions button:hover {  
144 - background-color: var(--accent-color);  
145 - color: white;  
146 - border-color: var(--accent-color);  
147 - }  
148 -  
149 - .report-section {  
150 - margin-bottom: 40px;  
151 - background: var(--card-bg);  
152 - border-radius: 8px;  
153 - padding: 25px;  
154 - box-shadow: var(--shadow);  
155 - transition: background-color 0.3s;  
156 - }  
157 -  
158 - .report-section h2 {  
159 - font-size: 1.5em;  
160 - color: var(--primary-color);  
161 - margin-bottom: 20px;  
162 - padding-bottom: 10px;  
163 - border-bottom: 2px solid var(--accent-color);  
164 - display: inline-block;  
165 - }  
166 -  
167 - .kpi-grid {  
168 - display: grid;  
169 - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));  
170 - gap: 20px;  
171 - }  
172 -  
173 - .kpi-card {  
174 - background: var(--bg-color);  
175 - padding: 20px;  
176 - border-radius: 8px;  
177 - text-align: center;  
178 - border-left: 5px solid;  
179 - }  
180 -  
181 - .kpi-card.positive { border-color: var(--positive-color); }  
182 - .kpi-card.negative { border-color: var(--negative-color); }  
183 - .kpi-card.neutral { border-color: var(--neutral-color); }  
184 -  
185 - .kpi-value {  
186 - font-size: 2em;  
187 - font-weight: 700;  
188 - color: var(--primary-color);  
189 - }  
190 -  
191 - .kpi-label {  
192 - font-size: 0.9em;  
193 - color: #666;  
194 - margin-top: 5px;  
195 - }  
196 - .dark-mode .kpi-label { color: #bbb; }  
197 -  
198 - .chart-container {  
199 - display: grid;  
200 - grid-template-columns: 2fr 1fr;  
201 - gap: 20px;  
202 - align-items: center;  
203 - }  
204 -  
205 - .chart-container .full-width {  
206 - grid-column: 1 / -1;  
207 - }  
208 -  
209 - .timeline {  
210 - position: relative;  
211 - padding: 20px 0;  
212 - }  
213 -  
214 - .timeline::before {  
215 - content: '';  
216 - position: absolute;  
217 - left: 20px;  
218 - top: 0;  
219 - bottom: 0;  
220 - width: 4px;  
221 - background: var(--accent-color-light);  
222 - border-radius: 2px;  
223 - }  
224 -  
225 - .timeline-item {  
226 - position: relative;  
227 - margin-bottom: 30px;  
228 - padding-left: 50px;  
229 - }  
230 -  
231 - .timeline-item::before {  
232 - content: '';  
233 - position: absolute;  
234 - left: 11px;  
235 - top: 5px;  
236 - width: 20px;  
237 - height: 20px;  
238 - background: white;  
239 - border: 4px solid var(--accent-color);  
240 - border-radius: 50%;  
241 - z-index: 1;  
242 - }  
243 -  
244 - .timeline-item h4 {  
245 - font-weight: 600;  
246 - color: var(--accent-color);  
247 - }  
248 -  
249 - .topic-details {  
250 - margin-bottom: 20px;  
251 - border-left: 4px solid var(--border-color);  
252 - padding-left: 15px;  
253 - }  
254 -  
255 - .topic-details summary {  
256 - font-size: 1.1em;  
257 - font-weight: 600;  
258 - cursor: pointer;  
259 - padding: 10px 0;  
260 - }  
261 -  
262 - .topic-details p {  
263 - margin-top: 10px;  
264 - padding-bottom: 10px;  
265 - }  
266 -  
267 - .channel-grid {  
268 - display: grid;  
269 - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));  
270 - gap: 20px;  
271 - }  
272 -  
273 - .channel-card {  
274 - background: var(--bg-color);  
275 - padding: 20px;  
276 - border-radius: 8px;  
277 - }  
278 -  
279 - .channel-card h4 {  
280 - color: var(--accent-color);  
281 - margin-bottom: 10px;  
282 - }  
283 -  
284 - .risk-list li {  
285 - margin-bottom: 15px;  
286 - padding-left: 20px;  
287 - position: relative;  
288 - }  
289 -  
290 - .risk-list li::before {  
291 - content: '⚠️';  
292 - position: absolute;  
293 - left: 0;  
294 - }  
295 -  
296 - .appendix-details summary {  
297 - font-size: 1.2em;  
298 - font-weight: 600;  
299 - cursor: pointer;  
300 - }  
301 -  
302 - .appendix-content h4 {  
303 - margin-top: 20px;  
304 - margin-bottom: 10px;  
305 - color: var(--accent-color);  
306 - }  
307 -  
308 - @media (max-width: 1200px) {  
309 - .container { flex-direction: column; }  
310 - .sidebar { position: static; width: 100%; height: auto; border-right: none; border-bottom: 1px solid var(--border-color); }  
311 - .main-content { padding: 20px; }  
312 - }  
313 -  
314 - @media (max-width: 768px) {  
315 - header { flex-direction: column; align-items: flex-start; gap: 10px; }  
316 - .chart-container { grid-template-columns: 1fr; }  
317 - .kpi-grid { grid-template-columns: 1fr; }  
318 - }  
319 -  
320 - @media print {  
321 - body { --shadow: none; }  
322 - .sidebar, .actions, header h1 .header-meta { display: none; }  
323 - .main-content { padding: 0; }  
324 - .report-section { page-break-inside: avoid; margin-bottom: 20px; box-shadow: none; border: 1px solid #ccc; }  
325 - }  
326 - </style>  
327 -</head>  
328 -<body>  
329 - <div class="container">  
330 - <aside class="sidebar">  
331 - <div class="sidebar-header">报告导航</div>  
332 - <nav class="sidebar-nav">  
333 - <ul>  
334 - <li><a href="#overview" class="active">舆情概览</a></li>  
335 - <li><a href="#trends">关键数据趋势</a></li>  
336 - <li><a href="#timeline">舆情动态时间轴</a></li>  
337 - <li><a href="#hot-topics">热点话题追踪</a></li>  
338 - <li><a href="#channels">重点渠道表现</a></li>  
339 - <li><a href="#risks">负面与风险监测</a></li>  
340 - <li><a href="#summary">简报与关注点</a></li>  
341 - <li><a href="#appendix">附录:综合背景资料</a></li>  
342 - </ul>  
343 - </nav>  
344 - </aside>  
345 -  
346 - <main class="main-content">  
347 - <header>  
348 - <div>  
349 - <h1>智能舆情分析报告:武汉大学</h1>  
350 - <p class="header-meta">数据周期:2024-03-01 至 2024-04-30</p>  
351 - </div>  
352 - <div class="actions">  
353 - <button id="print-btn">打印/导出PDF</button>  
354 - <button id="dark-mode-toggle">切换主题</button>  
355 - </div>  
356 - </header>  
357 -  
358 - <section id="overview" class="report-section">  
359 - <h2>1.0 本周期舆情概览</h2>  
360 - <div class="kpi-grid">  
361 - <div class="kpi-card neutral">  
362 - <div class="kpi-value">~210万</div>  
363 - <div class="kpi-label">全网有效声量</div>  
364 - </div>  
365 - <div class="kpi-card positive">  
366 - <div class="kpi-value">~3.8亿</div>  
367 - <div class="kpi-label">总阅读/播放量</div>  
368 - </div>  
369 - <div class="kpi-card negative">  
370 - <div class="kpi-value">24%</div>  
371 - <div class="kpi-label">核心焦虑情绪占比</div>  
372 - </div>  
373 - </div>  
374 - <h3 style="margin-top: 30px; margin-bottom: 15px;">本期舆情热度 TOP 3</h3>  
375 - <ol style="padding-left: 20px;">  
376 - <li><strong>樱花季预约与体验:</strong>微博话题#武大樱花预约#阅读量超3.8亿,引发全民关注,讨论焦点从赏花浪漫延伸至抢票难度和游客管理。</li>  
377 - <li><strong>学科实力与就业焦虑:</strong>以测绘遥感“世界第一”为代表的学科自豪感,与毕业生对薪资、就业压力的现实讨论形成鲜明对比,在知乎等平台引发深度共鸣。</li>  
378 - <li><strong>校史渊源与文化认同:</strong>关于建校起点的讨论(1893 vs 1913)在校友和学生群体中持续发酵,展现了强烈的身份认同和历史归属感。</li>  
379 - </ol>  
380 - <h3 style="margin-top: 30px; margin-bottom: 15px;">重点预警</h3>  
381 - <p style="background: var(--negative-color); color: white; padding: 15px; border-radius: 6px;">  
382 - <strong>就业焦虑情绪扩散:</strong>关于顶尖学科毕业生薪资待遇不及预期的讨论,已从个别专业扩散至多个优势学科。该情绪若持续发酵,可能对未来的招生质量和人才吸引力构成长期潜在风险。  
383 - </p>  
384 - </section>  
385 -  
386 - <section id="trends" class="report-section">  
387 - <h2>2.0 关键数据趋势</h2>  
388 - <div class="chart-container">  
389 - <div class="full-width">  
390 - <h3>2.1 声量走势 (模拟)</h3>  
391 - <canvas id="volumeChart"></canvas>  
392 - </div>  
393 - <div>  
394 - <h3>2.2 情感趋势分布</h3>  
395 - <canvas id="sentimentChart"></canvas>  
396 - </div>  
397 - <div>  
398 - <h3>2.3 重点渠道分布</h3>  
399 - <canvas id="sourceChart"></canvas>  
400 - </div>  
401 - </div>  
402 - </section>  
403 -  
404 - <section id="timeline" class="report-section">  
405 - <h2>3.0 本周期舆情动态时间轴</h2>  
406 - <div class="timeline">  
407 - <div class="timeline-item">  
408 - <h4>三月上旬:校史渊源讨论升温</h4>  
409 - <p>关于武大建校“1893自强学堂”与“1913国立武昌高师”的讨论在贴吧、知乎等校友社区升温,抖音出现“学大汉武立国”倒读梗,历史认同成为热点。</p>  
410 - </div>  
411 - <div class="timeline-item">  
412 - <h4>三月中旬:樱花季引爆全网</h4>  
413 - <p>#武大樱花预约#话题登上微博热搜,预约难度堪比“春运抢票”,全网流量达到本周期顶峰。小红书、抖音涌现大量赏樱攻略和美图。</p>  
414 - </div>  
415 - <div class="timeline-item">  
416 - <h4>三月下旬:游客与学生体验两极分化</h4>  
417 - <p>随着游客增多,#武汉人挤不进武大#等话题出现,校内学生对正常学习生活受影响的抱怨增多,舆论呈现“校外的浪漫”与“校内的烦恼”两种声音。</p>  
418 - </div>  
419 - <div class="timeline-item">  
420 - <h4>四月:春招季就业焦虑凸显</h4>  
421 - <p>知乎出现“如何看待武大测绘遥感世界第一,但硕士春招中位数仅7.2k”等热门提问,法学、口腔医学等专业的就业压力和规培待遇问题成为讨论焦点。</p>  
422 - </div>  
423 - </div>  
424 - </section>  
425 -  
426 - <section id="hot-topics" class="report-section">  
427 - <h2>4.0 热点话题追踪</h2>\  
428 -</body>  
429 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --bg-color: #f4f7fa;  
21 - --text-color: #333;  
22 - --card-bg: #ffffff;  
23 - --border-color: #eef2f7;  
24 - --primary-color: #2c7be5;  
25 - --secondary-color: #6c757d;  
26 - --accent-color: #00b894;  
27 - --danger-color: #d63031;  
28 - --warning-color: #f5a623;  
29 - --shadow: 0 4px 12px rgba(0, 0, 0, 0.08);  
30 - --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;  
31 - }  
32 -  
33 - .dark-mode {  
34 - --bg-color: #1a1a2e;  
35 - --text-color: #e0e0e0;  
36 - --card-bg: #162447;  
37 - --border-color: #1f4068;  
38 - --primary-color: #4a90e2;  
39 - --secondary-color: #a9b4c2;  
40 - --shadow: 0 4px 12px rgba(0, 0, 0, 0.2);  
41 - }  
42 -  
43 - body {  
44 - font-family: var(--font-family);  
45 - background-color: var(--bg-color);  
46 - color: var(--text-color);  
47 - margin: 0;  
48 - line-height: 1.6;  
49 - transition: background-color 0.3s, color 0.3s;  
50 - display: flex;  
51 - }  
52 -  
53 - .sidebar {  
54 - width: 260px;  
55 - background-color: var(--card-bg);  
56 - border-right: 1px solid var(--border-color);  
57 - position: fixed;  
58 - top: 0;  
59 - left: 0;  
60 - height: 100vh;  
61 - padding: 20px;  
62 - box-sizing: border-box;  
63 - transition: all 0.3s;  
64 - overflow-y: auto;  
65 - display: flex;  
66 - flex-direction: column;  
67 - }  
68 -  
69 - .sidebar h2 {  
70 - color: var(--primary-color);  
71 - font-size: 1.5em;  
72 - margin-bottom: 20px;  
73 - text-align: center;  
74 - border-bottom: 2px solid var(--primary-color);  
75 - padding-bottom: 10px;  
76 - }  
77 -  
78 - .sidebar nav ul {  
79 - list-style: none;  
80 - padding: 0;  
81 - margin: 0;  
82 - }  
83 -  
84 - .sidebar nav li a {  
85 - display: block;  
86 - color: var(--secondary-color);  
87 - text-decoration: none;  
88 - padding: 12px 15px;  
89 - border-radius: 6px;  
90 - margin-bottom: 5px;  
91 - transition: background-color 0.3s, color 0.3s;  
92 - font-weight: 500;  
93 - }  
94 -  
95 - .sidebar nav li a:hover, .sidebar nav li a.active {  
96 - background-color: var(--primary-color);  
97 - color: #fff;  
98 - }  
99 -  
100 - .sidebar-footer {  
101 - margin-top: auto;  
102 - padding-top: 20px;  
103 - border-top: 1px solid var(--border-color);  
104 - }  
105 -  
106 - .main-content {  
107 - margin-left: 260px;  
108 - width: calc(100% - 260px);  
109 - padding: 30px;  
110 - box-sizing: border-box;  
111 - transition: margin-left 0.3s;  
112 - }  
113 -  
114 - .report-header {  
115 - display: flex;  
116 - justify-content: space-between;  
117 - align-items: center;  
118 - margin-bottom: 30px;  
119 - border-bottom: 1px solid var(--border-color);  
120 - padding-bottom: 20px;  
121 - }  
122 -  
123 - .report-header h1 {  
124 - font-size: 2.2em;  
125 - margin: 0;  
126 - color: var(--primary-color);  
127 - }  
128 -  
129 - .header-actions button {  
130 - background-color: var(--secondary-color);  
131 - color: #fff;  
132 - border: none;  
133 - padding: 10px 15px;  
134 - border-radius: 5px;  
135 - cursor: pointer;  
136 - margin-left: 10px;  
137 - transition: background-color 0.3s;  
138 - font-size: 14px;  
139 - }  
140 - .header-actions button:hover {  
141 - opacity: 0.9;  
142 - }  
143 - #theme-toggle {  
144 - background-color: var(--primary-color);  
145 - }  
146 -  
147 - .card {  
148 - background-color: var(--card-bg);  
149 - border-radius: 8px;  
150 - box-shadow: var(--shadow);  
151 - padding: 25px;  
152 - margin-bottom: 30px;  
153 - transition: all 0.3s;  
154 - }  
155 -  
156 - .section-title {  
157 - font-size: 1.8em;  
158 - color: var(--text-color);  
159 - margin-top: 0;  
160 - margin-bottom: 20px;  
161 - padding-bottom: 10px;  
162 - border-bottom: 2px solid var(--primary-color);  
163 - display: inline-block;  
164 - }  
165 -  
166 - .dashboard {  
167 - display: grid;  
168 - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));  
169 - gap: 20px;  
170 - }  
171 -  
172 - .stat-item {  
173 - background: linear-gradient(135deg, var(--primary-color) 0%, #6a11cb 100%);  
174 - color: #fff;  
175 - padding: 20px;  
176 - border-radius: 8px;  
177 - text-align: center;  
178 - }  
179 - .stat-item .value {  
180 - font-size: 2.5em;  
181 - font-weight: bold;  
182 - margin: 0;  
183 - }  
184 - .stat-item .label {  
185 - font-size: 1em;  
186 - margin: 0;  
187 - opacity: 0.8;  
188 - }  
189 -  
190 - .chart-container {  
191 - display: grid;  
192 - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));  
193 - gap: 30px;  
194 - margin-top: 20px;  
195 - }  
196 -  
197 - .timeline {  
198 - position: relative;  
199 - padding: 20px 0;  
200 - }  
201 - .timeline::before {  
202 - content: '';  
203 - position: absolute;  
204 - left: 20px;  
205 - top: 0;  
206 - bottom: 0;  
207 - width: 3px;  
208 - background-color: var(--primary-color);  
209 - border-radius: 2px;  
210 - }  
211 - .timeline-item {  
212 - position: relative;  
213 - margin-bottom: 20px;  
214 - padding-left: 50px;  
215 - }  
216 - .timeline-item::before {  
217 - content: '';  
218 - position: absolute;  
219 - left: 11px;  
220 - top: 5px;  
221 - width: 20px;  
222 - height: 20px;  
223 - border-radius: 50%;  
224 - background-color: var(--card-bg);  
225 - border: 4px solid var(--primary-color);  
226 - z-index: 1;  
227 - }  
228 - .timeline-item h4 {  
229 - margin: 0 0 5px 0;  
230 - color: var(--primary-color);  
231 - }  
232 -  
233 - .topic-card {  
234 - border-left: 5px solid var(--accent-color);  
235 - padding-left: 20px;  
236 - margin-bottom: 20px;  
237 - }  
238 -  
239 - .risk-card {  
240 - border-left: 5px solid var(--danger-color);  
241 - padding-left: 20px;  
242 - }  
243 -  
244 - .accordion .accordion-header {  
245 - cursor: pointer;  
246 - padding: 15px;  
247 - background-color: var(--bg-color);  
248 - border: 1px solid var(--border-color);  
249 - border-radius: 5px;  
250 - margin-top: 10px;  
251 - font-weight: bold;  
252 - display: flex;  
253 - justify-content: space-between;  
254 - align-items: center;  
255 - }  
256 - .accordion .accordion-header::after {  
257 - content: '+';  
258 - font-size: 1.5em;  
259 - transition: transform 0.3s;  
260 - }  
261 - .accordion .accordion-content {  
262 - max-height: 0;  
263 - overflow: hidden;  
264 - transition: max-height 0.3s ease-out;  
265 - padding: 0 15px;  
266 - border: 1px solid var(--border-color);  
267 - border-top: none;  
268 - }  
269 - .accordion.active .accordion-header::after {  
270 - transform: rotate(45deg);  
271 - }  
272 - .accordion.active .accordion-content {  
273 - padding: 15px;  
274 - }  
275 -  
276 - @media (max-width: 992px) {  
277 - .sidebar {  
278 - left: -260px;  
279 - }  
280 - .main-content {  
281 - margin-left: 0;  
282 - width: 100%;  
283 - padding: 15px;  
284 - }  
285 - .menu-toggle {  
286 - display: block;  
287 - }  
288 - }  
289 -  
290 - @media (max-width: 768px) {  
291 - .report-header {  
292 - flex-direction: column;  
293 - align-items: flex-start;  
294 - }  
295 - .header-actions {  
296 - margin-top: 15px;  
297 - }  
298 - .dashboard, .chart-container {  
299 - grid-template-columns: 1fr;  
300 - }  
301 - }  
302 -  
303 - @media print {  
304 - body { display: block; }  
305 - .sidebar, .header-actions, .menu-toggle { display: none; }  
306 - .main-content { margin-left: 0; width: 100%; padding: 0; }  
307 - .card { box-shadow: none; border: 1px solid #ccc; }  
308 - }  
309 - </style>  
310 -</head>  
311 -<body>  
312 - <div class="sidebar">  
313 - <h2>导航目录</h2>  
314 - <nav>  
315 - <ul>  
316 - <li><a href="#overview" class="active">1.0 舆情概览</a></li>  
317 - <li><a href="#trends">2.0 关键数据趋势</a></li>  
318 - <li><a href="#timeline">3.0 舆情动态时间轴</a></li>  
319 - <li><a href="#hot-topics">4.0 热点话题追踪</a></li>  
320 - <li><a href="#channels">5.0 重点渠道表现</a></li>  
321 - <li><a href="#risks">6.0 负面与风险监测</a></li>  
322 - <li><a href="#summary">7.0 简报与关注点</a></li>  
323 - <li><a href="#appendix">8.0 数据附录</a></li>  
324 - </ul>  
325 - </nav>  
326 - <div class="sidebar-footer">  
327 - <p style="font-size: 0.8em; color: var(--secondary-color); text-align: center;">报告生成于 <br> <span id="report-date"></span></p>  
328 - </div>  
329 - </div>  
330 -  
331 - <main class="main-content">  
332 - <header class="report-header">  
333 - <h1>智能舆情分析报告:武汉大学</h1>  
334 - <div class="header-actions">  
335 - <button id="theme-toggle">切换模式</button>  
336 - <button id="print-btn">打印/导出PDF</button>  
337 - </div>  
338 - </header>  
339 -  
340 - <section id="overview" class="card">  
341 - <h2 class="section-title">1.0 本期舆情概览</h2>  
342 - <p>本报告周期内(2024年3月1日至4月30日),关于武汉大学的社会舆论呈现出“骄傲、焦虑与烟火气”并存的复杂图景。公众既为学校的百年校史、顶尖学科和科研成就感到自豪,也对毕业生就业薪资、校园管理及资源分配等问题表达了深切焦虑。樱花季、校史梗、校友记忆等话题则构成了充满人情味的“烟火气”讨论,使武大的公众形象更加立体和丰满。</p>  
343 -  
344 - <div class="dashboard">  
345 - <div class="stat-item">  
346 - <p class="value">≈210万</p>  
347 - <p class="label">有效分析样本</p>  
348 - </div>  
349 - <div class="stat-item">  
350 - <p class="value">3.8亿+</p>  
351 - <p class="label">总阅读量</p>  
352 - </div>  
353 - <div class="stat-item">  
354 - <p class="value">420万+</p>  
355 - <p class="label">总互动量</p>  
356 - </div>  
357 - </div>  
358 -  
359 - <h3 style="margin-top: 30px;">1.2 本期舆情热度 TOP 3</h3>  
360 - <ol>  
361 - <li><strong>武大樱花季预约与体验:</strong>微博话题#武大樱花预约#阅读量超3.8亿,引发关于“浪漫盛景”与“抢票难”的广泛讨论。</li>  
362 - <li><strong>顶尖学科与就业薪资反差:</strong>围绕“测绘遥感世界第一,毕业薪资买不起房”的讨论在知乎等平台发酵,反映出公众对高等教育回报率的现实焦虑。</li>  
363 - <li><strong>百年校史与校友文化:</strong>从“校史起点”的趣味争论到校友对老斋舍、珞珈山的集体怀旧,展现了深厚的文化认同感。</li>  
364 - </ol>  
365 -  
366 - <h3 style="margin-top: 20px;">1.3 重点预警</h3>  
367 - <div class="risk-card">  
368 - <p><strong>预警:</strong>樱花季预约系统体验不佳、部分顶尖学科毕业生薪资预期落差较大,已形成周期性负面舆情。若不加以引导和改善,可能固化为“管理不善”、“学非所用”的负面标签,对学校声誉及招生吸引力构成潜在风险。</p>  
369 - </div>  
370 - </section>  
371 -  
372 - <section id="trends" class="card">  
373 - <h2 class="section-title">2.0 关键数据趋势</h2>  
374 - <div class="chart-container">  
375 - <div>  
376 - <h3>2.1 声量走势 (模拟)</h3>  
377 - <canvas id="volumeTrendChart"></canvas>  
378 - </div>  
379 - <div>  
380 - <h3>2.2 情感趋势</h3>  
381 - <canvas id="sentimentTrendChart"></canvas>  
382 - </div>  
383 - </div>  
384 - </section>  
385 -  
386 - <section id="timeline" class="card">  
387 - <h2 class="section-title">3.0 本周期舆情动态时间轴</h2>  
388 - <div class="timeline">  
389 - <div class="timeline-item">  
390 - <h4>3月初:樱花季预热</h4>  
391 - <p>各大社交平台开始出现对武大樱花的期待和往年美图回顾,为即将到来的樱花季积攒热度。</p>  
392 - </div>  
393 - <div class="timeline-item">  
394 - <h4>3月中下旬:樱花季高峰</h4>  
395 - <p>樱花盛开,#武大樱花预约#话题引爆,正面“浪漫”赞誉与负面“抢票难”抱怨交织,声量达到本周期顶峰。</p>  
396 - </div>  
397 - <div class="timeline-item">  
398 - <h4>4月初:求职季焦虑</h4>  
399 - <p>春招进入关键期,知乎、脉脉等平台出现关于测绘、法学等王牌专业毕业生薪资的讨论,引发对“名校光环”与“现实骨感”的思考。</p>  
400 - </div>  
401 - <div class="timeline-item">  
402 - <h4>4月中下旬:校友怀旧与文化讨论</h4>  
403 - <p>校友怀旧情绪升温,讨论内容从校园建筑、知名校友到校史趣闻(如“学大汉武立国”梗),展现了强大的文化凝聚力。</p>  
404 - </div>  
405 - </div>  
406 - </section>  
407 -  
408 - <section id="hot-topics" class="card">  
409 - <h2 class="section-title">4.0 热点话题追踪</h2>  
410 -  
411 - <div class="topic-card">  
412 - <h4>4.1.1 樱花季的“浪漫”与“拥堵”</h4>  
413 - <p><strong>内容:</strong>公众一方面盛赞武大樱花的绝美景色(“如云似雪”、“梦幻花海”),另一方面强烈吐槽预约系统的崩溃和入校管理的混乱(“抢票像春运”、“武汉人挤不进武大”)。  
414 - <br><strong>洞察:</strong>樱花季是武大最强的“文化IP”,但也成为一把双刃剑。巨大的流量带来了品牌曝光,也放大了管理和服务的短板。舆论核心诉求在于提升游客体验,平衡校园开放与正常教学秩序。</p>  
415 - </div>  
416 -  
417 - <div class="topic-card">  
418 - <h4>4.1.2 “世界第一”学科的“薪资焦虑”</h4>  
419 - <p><strong>内容:</strong>以测绘遥感(全球第一)为代表的顶尖学科,其毕业生在就业市场面临的薪资挑战(“硕士春招中位数7.2k”)成为热议焦点。讨论延伸至法学、生物等多个优势学科。  
420 - <br><strong>洞察:</strong>此话题触及了“教育投入产出比”的社会痛点。公众并非质疑学科本身的价值,而是对顶尖科研实力未能完全转化为毕业生的高薪酬表示担忧和不解。这反映了社会对人才价值实现的普遍焦虑。</p>  
421 - </div>  
422 -  
423 - <div class="topic-card">  
424 - <h4>4.1.3 百年校史的“光环”与“段子”</h4>  
425 - <p><strong>内容:</strong>从对校史起点(1893 vs 1913)的“考据”式争论,到对“国立武汉大学”门楼倒读梗的二次创作,再到对老斋舍、十八栋等历史建筑的深情追忆。  
426 - <br><strong>洞察:</strong>历史不再是冰冷的陈列,而是被网民和校友以多元、有趣的方式解读和传播。这种“共享的青春现场”极大地增强了武大的文化向心力和品牌故事性。</p>  
427 - </div>  
428 -  
429 - <h3 style="margin-top: 30px;">4.2 新增/突发话题</h3>  
430 - <p><strong>“大科学装置”与“光谷房租推手”:</strong>关于武大参与建设的高精尖科研设施(如高场固体核磁)的科普内容获得积极反响,但部分舆论将其与周边区域(如光谷)生活成本上涨(“房租一年涨12%”)联系起来,形成了“感谢”与“生活不易”并存的复杂民意。</p>  
431 - </section>  
432 -  
433 - <section id="channels" class="card">  
434 - <h2 class="section-title">5.0 重点渠道表现</h2>  
435 - <p>不同平台承载了关于武汉大学舆情的不同侧面,共同构成了完整的舆论生态。</p>  
436 - <div class="chart-container">  
437 - <div>  
438 - <h3>5.1  
439 -</body>  
440 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>  
19 - <style>  
20 - :root {  
21 - --bg-color: #f4f7f9;  
22 - --card-bg-color: #ffffff;  
23 - --text-color: #333333;  
24 - --heading-color: #1a253c;  
25 - --primary-color: #2a64b4;  
26 - --primary-hover-color: #1e4a8a;  
27 - --secondary-color: #6c757d;  
28 - --border-color: #e0e0e0;  
29 - --shadow-color: rgba(0, 0, 0, 0.05);  
30 - --sidebar-bg: #1a253c;  
31 - --sidebar-text: #ffffff;  
32 - --sidebar-hover: #3a4a6e;  
33 - --chart-grid-color: rgba(0, 0, 0, 0.05);  
34 - }  
35 -  
36 - html.dark-mode {  
37 - --bg-color: #121212;  
38 - --card-bg-color: #1e1e1e;  
39 - --text-color: #e0e0e0;  
40 - --heading-color: #ffffff;  
41 - --primary-color: #5893df;  
42 - --primary-hover-color: #7baef3;  
43 - --secondary-color: #adb5bd;  
44 - --border-color: #333333;  
45 - --shadow-color: rgba(0, 0, 0, 0.2);  
46 - --sidebar-bg: #1e1e1e;  
47 - --sidebar-text: #e0e0e0;  
48 - --sidebar-hover: #333333;  
49 - --chart-grid-color: rgba(255, 255, 255, 0.1);  
50 - }  
51 -  
52 - body {  
53 - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;  
54 - margin: 0;  
55 - background-color: var(--bg-color);  
56 - color: var(--text-color);  
57 - display: flex;  
58 - transition: background-color 0.3s, color 0.3s;  
59 - }  
60 -  
61 - #sidebar {  
62 - width: 260px;  
63 - background-color: var(--sidebar-bg);  
64 - color: var(--sidebar-text);  
65 - padding: 20px 0;  
66 - position: fixed;  
67 - height: 100%;  
68 - overflow-y: auto;  
69 - transition: background-color 0.3s;  
70 - }  
71 -  
72 - #sidebar h2 {  
73 - text-align: center;  
74 - color: var(--sidebar-text);  
75 - padding: 0 20px;  
76 - margin-bottom: 30px;  
77 - font-size: 1.5em;  
78 - }  
79 -  
80 - #sidebar nav ul {  
81 - list-style: none;  
82 - padding: 0;  
83 - margin: 0;  
84 - }  
85 -  
86 - #sidebar nav ul li a {  
87 - display: block;  
88 - padding: 12px 20px;  
89 - color: var(--sidebar-text);  
90 - text-decoration: none;  
91 - transition: background-color 0.3s;  
92 - border-left: 3px solid transparent;  
93 - }  
94 -  
95 - #sidebar nav ul li a:hover {  
96 - background-color: var(--sidebar-hover);  
97 - border-left-color: var(--primary-color);  
98 - }  
99 -  
100 - #main-content {  
101 - margin-left: 260px;  
102 - flex-grow: 1;  
103 - padding: 30px 40px;  
104 - }  
105 -  
106 - #report-header {  
107 - display: flex;  
108 - justify-content: space-between;  
109 - align-items: center;  
110 - border-bottom: 2px solid var(--border-color);  
111 - padding-bottom: 20px;  
112 - margin-bottom: 30px;  
113 - }  
114 -  
115 - #report-header h1 {  
116 - color: var(--heading-color);  
117 - margin: 0;  
118 - font-size: 2.2em;  
119 - }  
120 -  
121 - .header-actions button {  
122 - background-color: var(--primary-color);  
123 - color: white;  
124 - border: none;  
125 - padding: 10px 15px;  
126 - border-radius: 5px;  
127 - cursor: pointer;  
128 - margin-left: 10px;  
129 - transition: background-color 0.3s;  
130 - }  
131 -  
132 - .header-actions button:hover {  
133 - background-color: var(--primary-hover-color);  
134 - }  
135 -  
136 - .theme-switcher {  
137 - cursor: pointer;  
138 - font-size: 1.5em;  
139 - margin-left: 15px;  
140 - color: var(--secondary-color);  
141 - }  
142 -  
143 - .card {  
144 - background-color: var(--card-bg-color);  
145 - border-radius: 8px;  
146 - box-shadow: 0 4px 12px var(--shadow-color);  
147 - margin-bottom: 30px;  
148 - padding: 25px;  
149 - transition: background-color 0.3s, box-shadow 0.3s;  
150 - }  
151 -  
152 - .card-header {  
153 - display: flex;  
154 - justify-content: space-between;  
155 - align-items: center;  
156 - margin-bottom: 20px;  
157 - cursor: pointer;  
158 - }  
159 -  
160 - .card-header h3 {  
161 - color: var(--heading-color);  
162 - margin: 0;  
163 - font-size: 1.4em;  
164 - }  
165 -  
166 - .card-header .toggle-icon {  
167 - font-size: 1.5em;  
168 - transition: transform 0.3s;  
169 - }  
170 -  
171 - .card-content.collapsed {  
172 - display: none;  
173 - }  
174 -  
175 - .grid-container {  
176 - display: grid;  
177 - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));  
178 - gap: 20px;  
179 - }  
180 -  
181 - .kpi-card {  
182 - background-color: var(--card-bg-color);  
183 - padding: 20px;  
184 - border-radius: 8px;  
185 - text-align: center;  
186 - border-left: 5px solid var(--primary-color);  
187 - }  
188 -  
189 - .kpi-card .value {  
190 - font-size: 2.5em;  
191 - font-weight: bold;  
192 - color: var(--heading-color);  
193 - }  
194 -  
195 - .kpi-card .label {  
196 - font-size: 1em;  
197 - color: var(--secondary-color);  
198 - }  
199 -  
200 - .chart-container {  
201 - position: relative;  
202 - height: 400px;  
203 - width: 100%;  
204 - }  
205 -  
206 - .timeline {  
207 - position: relative;  
208 - padding: 20px 0;  
209 - }  
210 -  
211 - .timeline::before {  
212 - content: '';  
213 - position: absolute;  
214 - left: 20px;  
215 - top: 0;  
216 - bottom: 0;  
217 - width: 2px;  
218 - background-color: var(--border-color);  
219 - }  
220 -  
221 - .timeline-item {  
222 - margin-bottom: 30px;  
223 - position: relative;  
224 - padding-left: 50px;  
225 - }  
226 -  
227 - .timeline-item::before {  
228 - content: '';  
229 - position: absolute;  
230 - left: 13px;  
231 - top: 5px;  
232 - width: 15px;  
233 - height: 15px;  
234 - border-radius: 50%;  
235 - background-color: var(--primary-color);  
236 - border: 2px solid var(--bg-color);  
237 - }  
238 -  
239 - .timeline-item .time {  
240 - font-weight: bold;  
241 - color: var(--primary-color);  
242 - margin-bottom: 5px;  
243 - }  
244 -  
245 - .hot-topic-table {  
246 - width: 100%;  
247 - border-collapse: collapse;  
248 - }  
249 -  
250 - .hot-topic-table th, .hot-topic-table td {  
251 - padding: 12px 15px;  
252 - border: 1px solid var(--border-color);  
253 - text-align: left;  
254 - }  
255 -  
256 - .hot-topic-table th {  
257 - background-color: var(--bg-color);  
258 - color: var(--heading-color);  
259 - }  
260 -  
261 - .tag {  
262 - display: inline-block;  
263 - padding: 4px 10px;  
264 - border-radius: 15px;  
265 - font-size: 0.8em;  
266 - font-weight: bold;  
267 - }  
268 - .tag-positive { background-color: #d4edda; color: #155724; }  
269 - .tag-negative { background-color: #f8d7da; color: #721c24; }  
270 - .tag-neutral { background-color: #e2e3e5; color: #383d41; }  
271 - .tag-pride { background-color: #cce5ff; color: #004085; }  
272 - .tag-anxiety { background-color: #fff3cd; color: #856404; }  
273 -  
274 - @media (max-width: 992px) {  
275 - #sidebar {  
276 - transform: translateX(-260px);  
277 - position: fixed;  
278 - z-index: 1000;  
279 - transition: transform 0.3s;  
280 - }  
281 - #sidebar.open {  
282 - transform: translateX(0);  
283 - }  
284 - #main-content {  
285 - margin-left: 0;  
286 - padding: 20px;  
287 - }  
288 - #report-header h1 { font-size: 1.8em; }  
289 - }  
290 -  
291 - @media (max-width: 768px) {  
292 - .grid-container {  
293 - grid-template-columns: 1fr;  
294 - }  
295 - #report-header {  
296 - flex-direction: column;  
297 - align-items: flex-start;  
298 - }  
299 - #report-header h1 { margin-bottom: 15px; }  
300 - }  
301 -  
302 - @media print {  
303 - #sidebar, .header-actions {  
304 - display: none;  
305 - }  
306 - #main-content {  
307 - margin-left: 0;  
308 - padding: 0;  
309 - width: 100%;  
310 - }  
311 - body {  
312 - display: block;  
313 - background-color: #fff;  
314 - color: #000;  
315 - }  
316 - .card {  
317 - box-shadow: none;  
318 - border: 1px solid #ccc;  
319 - page-break-inside: avoid;  
320 - }  
321 - }  
322 - </style>  
323 -</head>  
324 -<body>  
325 -  
326 - <aside id="sidebar">  
327 - <h2>舆情分析报告</h2>  
328 - <nav>  
329 - <ul>  
330 - <li><a href="#overview">1.0 舆情概览</a></li>  
331 - <li><a href="#trends">2.0 关键数据趋势</a></li>  
332 - <li><a href="#timeline">3.0 舆情动态时间轴</a></li>  
333 - <li><a href="#hot-topics">4.0 热点话题追踪</a></li>  
334 - <li><a href="#channels">5.0 重点渠道表现</a></li>  
335 - <li><a href="#risks">6.0 负面与风险监测</a></li>  
336 - <li><a href="#summary">7.0 简报与关注点</a></li>  
337 - <li><a href="#appendix">附录:综合信息</a></li>  
338 - </ul>  
339 - </nav>  
340 - </aside>  
341 -  
342 - <main id="main-content">  
343 - <header id="report-header">  
344 - <div>  
345 - <h1>智能舆情分析报告:武汉大学</h1>  
346 - <p style="color: var(--secondary-color); margin-top: 5px;">数据周期: 2024-03-01 至 2024-04-30</p>  
347 - </div>  
348 - <div class="header-actions">  
349 - <span id="theme-switcher" class="theme-switcher">☀️</span>  
350 - <button onclick="window.print()">打印报告</button>  
351 - <button id="download-pdf">导出PDF</button>  
352 - </div>  
353 - </header>  
354 -  
355 - <section id="overview" class="card">  
356 - <div class="card-header collapser">  
357 - <h3>1.0 本期舆情概览</h3>  
358 - <span class="toggle-icon"></span>  
359 - </div>  
360 - <div class="card-content">  
361 - <h4>1.1 核心数据看板</h4>  
362 - <div class="grid-container" style="margin-bottom: 30px;">  
363 - <div class="kpi-card">  
364 - <div class="value">~210万</div>  
365 - <div class="label">有效讨论量</div>  
366 - </div>  
367 - <div class="kpi-card">  
368 - <div class="value">~3.8亿</div>  
369 - <div class="label">总阅读/播放量</div>  
370 - </div>  
371 - <div class="kpi-card">  
372 - <div class="value">~420万</div>  
373 - <div class="label">总互动量</div>  
374 - </div>  
375 - </div>  
376 -  
377 - <h4>1.2 本期舆情热度 TOP 3</h4>  
378 - <ol>  
379 - <li><strong>武大樱花季预约与体验:</strong>微博话题 #武大樱花预约# 阅读量达3.8亿,引发关于“抢票难”、“校园过度商业化”的广泛讨论,情感呈现“浪漫”与“焦虑”交织。</li>  
380 - <li><strong>顶尖学科声誉与毕业生现实焦虑:</strong>知乎关于“测绘遥感世界第一”的讨论获4.5万赞,但同时伴随对毕业生薪资(春招中位数7.2k)与房价对比的焦虑,形成“自豪”与“现实压力”的强烈对比。</li>  
381 - <li><strong>校史叙事与文化认同:</strong>从“1893自强学堂”到“1913国立武昌高师”的校史起点争议在贴吧等平台持续发酵,同时抖音上“学大汉武立国”的倒读梗病毒式传播,体现了校友对历史的多元解读与文化认同。</li>  
382 - </ol>  
383 -  
384 - <h4>1.3 重点预警</h4>  
385 - <ul>  
386 - <li><strong>就业焦虑情绪上升:</strong>尽管学校学科排名高、科研实力强,但网络上关于优势专业毕业生薪资待遇不及预期的讨论增多,可能影响对未来考生的吸引力。</li>  
387 - <li><strong>校园资源分配不均感知:</strong>“院士隔壁的‘二等公民’”等言论反映出部分学生对校内顶尖资源与普通资源差距的强烈感知,存在内部矛盾激化的潜在风险。</li>  
388 - <li><strong>校园开放与管理矛盾:</strong>樱花季等开放活动在提升学校美誉度的同时,也带来了管理压力和校内师生体验下降的负面声音,需平衡社会服务与校内秩序。</li>  
389 - </ul>  
390 - </div>  
391 - </section>  
392 -  
393 - <section id="trends" class="card">  
394 - <div class="card-header collapser">  
395 - <h3>2.0 关键数据趋势</h3>  
396 - <span class="toggle-icon"></span>  
397 - </div>  
398 - <div class="card-content">  
399 - <div class="grid-container">  
400 - <div>  
401 - <h4>2.1 声量走势</h4>  
402 - <div class="chart-container">  
403 - <canvas id="volumeTrendChart"></canvas>  
404 - </div>  
405 - </div>  
406 - <div>  
407 - <h4>2.2 情感趋势</h4>  
408 - <div class="chart-container">  
409 - <canvas id="sentimentTrendChart"></canvas>  
410 - </div>  
411 - </div>  
412 - </div>  
413 - </div>  
414 - </section>  
415 -  
416 - <section id="timeline" class="card">  
417 - <div class="card-header collapser">  
418 - <h3>3.0 本周期舆情动态时间轴</h3>  
419 - <span class="toggle-icon"></span>  
420 - </div>  
421 - <div class="card-content">  
422 - <div class="timeline">  
423 - <div class="timeline-item">  
424 - <div class="time">3月初</div>  
425 - <p><strong>樱花季预热:</strong>小红书、抖音涌现大量“武大赏樱攻略”,正面情感以“浪漫”、“期待”为主。</p>  
426 - </div>  
427 - <div class="timeline-item">  
428 - <div class="time">3月中旬</div>  
429 - <p><strong>樱花预约开启:</strong>#武大樱花预约#登上微博热搜,因系统拥堵、黄牛等问题,负面“吐槽”、“焦虑”情绪显著上升,形成舆情高峰。</p>  
430 - </div>  
431 - <div class="timeline-item">  
432 - <div class="time">3月底</div>  
433 - <p><strong>春季招聘会:</strong>知乎、脉脉等平台出现关于武大毕业生薪资的讨论,测绘、法学等王牌专业就业的“焦虑”情绪开始发酵。</p>  
434 - </div>  
435 - <div class="timeline-item">  
436 - <div class="time">4月上旬</div>  
437 - <p><strong>校友返校与文化活动:</strong>京都大学学生朗诵《将进酒》视频在B站走红,引发对武大人文底蕴的“自豪”感;校史起点争议在贴吧被重提。</p>  
438 - </div>  
439 - <div class="timeline-item">  
440 - <div class="time">4月中旬</div>  
441 - <p><strong>科研成果发布:</strong>官方发布“给原子拍CT”等大科学装置进展,引发科技媒体和知识类博主关注,正面“敬意”、“感谢”声量增加。</p>  
442 - </div>  
443 - <div class="timeline-item">  
444 - <div class="time">4月底</div>  
445 - <p><strong>学期末与交换生话题:</strong>关于海外交换项目费用和学分转换的讨论增多,情感呈现“理想”与“质疑”的两极化。</p>  
446 - </div>  
447 - </div>  
448 - </div>  
449 - </section>  
450 -  
451 - <section id="hot-topics" class="card">  
452 - <div class="card-header collapser">  
453 - <h3>4.0 热点话题追踪</h3>  
454 - <span class="toggle-icon"></span>  
455 - </div>  
456 - <div class="card-content">  
457 - <h4>4.1 本期热点话题详情</h4>  
458 - <table class="hot-topic-table">  
459 - <thead>  
460 - <tr>  
461 - <th>热点话题</th>  
462 - <th>高光叙事 (正面/中性)</th>  
463 - <th>焦虑痛点 (负面/争议)</th>  
464 - <th>核心情感</th>  
465 - </tr>  
466 - </thead>  
467 - <tbody>  
468 - <tr>  
469 - <td><strong>樱花季:浪漫与喧嚣</strong></td>  
470 - <td>“中国最美大学”的视觉盛宴,小红书“童话滤镜”获10万赞,承载校友怀旧与游客向往。</td>  
471 - <td>“抢票堪比春运”,预约系统崩溃引吐槽。#武汉人挤不进武大#话题引3.8万条愤怒,商业化被指“母校变景点”。</td>  
472 - <td><span class="tag tag-positive">浪漫 42%</span> <span class="tag tag-anxiety">焦虑 28%</span> <span class="tag tag-neutral">怀旧 21%</span></td>  
473 - </tr>  
474 - <tr>  
475 - <td><strong>学科声望:世界第一与工资条</strong></td>  
476 - <td>测绘遥感全球第一、法学全国前三等学科实力引发广泛自豪。院士、诺奖得主等顶尖师资是“最强磁场”。</td>  
477 - <td>“世界第一的专业买不起武汉一平米”,毕业生薪资与高房价对比引发现实焦虑。法学、医学等专业同样面临高压实习、规培待遇低的困境。</td>  
478 - <td><span class="tag tag-pride">自豪 51%</span> <span class="tag tag-anxiety">焦虑 24%</span> <span class="tag tag-neutral">敬意 8%</span></td>  
479 - </tr>  
480 - <tr>  
481 - <td><strong>校史文化:共同剧本与身份认同</strong></td>  
482 - <td>抖音“学大汉武立国”倒读梗走红,校友以幽默方式参与历史叙事。老斋舍、十八栋等历史建筑是共同的文化记忆。</td>  
483 - <td>关于“1893 vs 1913”的校史起点争议在贴吧等社区周期性出现,被部分学生吐槽为“官方叙事模糊”。</td>  
484 - <td><span class="tag tag-pride">自豪 38%</span> <span class="tag tag-neutral">吐槽 34%</span> <span class="tag tag-positive">怀旧 20%</span></td>  
485 - </tr>  
486 - </tbody>  
487 - </table>  
488 - <h4 style="margin-top: 30px;">4.2 新增/突发话题</h4>  
489 - <p><strong>“资源落差感”成为新舆情燃点:</strong>本周期内,“院士把卫星数据当糖果发”与“PCR仪排队三周”的对比,在学生群体中引发关于“资源不均”的讨论。这一话题虽未大规模破圈,但在校内论坛和匿名社区中热度较高,反映了学生对公平教育资源分配的深层关切,是值得关注的潜在负面情绪增长点。</p>  
490 - </div>  
491 - </section>  
492 -  
493 - <section id="channels" class="card">  
494 - <div class="card-header collapser">  
495 - <h3>5.0 重点渠道表现</h3>  
496 - <span class="toggle-icon"></span>  
497 - </div>  
498 - <div class="card-content">  
499 - <div class="grid-container">  
500 - <div>  
501 - <h4>5.1 整体情感分布</h4>  
502 - <div class="chart-container">  
503 - <canvas id="sentimentPieChart"></canvas>  
504 - </div>  
505 - </div>  
506 - <div>  
507 - <h4>5.2 平台声量来源分布</h4>  
508 - <div class="chart-container">  
509 - <canvas id="sourceDistributionChart"></canvas>  
510 - </div>  
511 - </div>  
512 - </div>  
513 - </div>  
514 - </section>  
515 -  
516 - <section id="risks" class="card">  
517 - <div class="card-header collapser">  
518 - <h3>6.0 负面与风险监测</h3>  
519 - <span class="toggle-icon"></span>  
520 - </div>  
521 - <div class="card-content">  
522 - <h4>6.1 负面信息汇总</h4>  
523 - <ul>  
524 - <li><strong>就业前景焦虑:</strong>关于“名校高学历贬值”、“王牌专业就业难、薪资低”的讨论,尤其集中在测绘、法学、临床医学规培等领域。</li>  
525 - <li><strong>校园管理与商业化批评:</strong>主要围绕樱花季的预约难、  
526 -</body>  
527 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --primary-color: #2c3e50;  
21 - --secondary-color: #3498db;  
22 - --background-color: #f4f7f9;  
23 - --card-bg-color: #ffffff;  
24 - --text-color: #333333;  
25 - --heading-color: #2c3e50;  
26 - --border-color: #e0e0e0;  
27 - --shadow-color: rgba(0, 0, 0, 0.08);  
28 - --success-color: #27ae60;  
29 - --warning-color: #f39c12;  
30 - --danger-color: #e74c3c;  
31 - --neutral-color: #95a5a6;  
32 - --font-family: 'Helvetica Neue', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'Microsoft Yahei', sans-serif;  
33 - }  
34 -  
35 - .dark-mode {  
36 - --primary-color: #ecf0f1;  
37 - --secondary-color: #3498db;  
38 - --background-color: #1e272e;  
39 - --card-bg-color: #2c3a47;  
40 - --text-color: #bdc3c7;  
41 - --heading-color: #ffffff;  
42 - --border-color: #4a6fa5;  
43 - --shadow-color: rgba(0, 0, 0, 0.2);  
44 - }  
45 -  
46 - * {  
47 - box-sizing: border-box;  
48 - margin: 0;  
49 - padding: 0;  
50 - }  
51 -  
52 - body {  
53 - font-family: var(--font-family);  
54 - background-color: var(--background-color);  
55 - color: var(--text-color);  
56 - line-height: 1.6;  
57 - transition: background-color 0.3s, color 0.3s;  
58 - font-size: 16px;  
59 - }  
60 -  
61 - .container {  
62 - display: flex;  
63 - max-width: 1600px;  
64 - margin: 0 auto;  
65 - }  
66 -  
67 - .sidebar {  
68 - width: 260px;  
69 - background-color: var(--card-bg-color);  
70 - border-right: 1px solid var(--border-color);  
71 - position: sticky;  
72 - top: 0;  
73 - height: 100vh;  
74 - overflow-y: auto;  
75 - padding: 20px;  
76 - transition: background-color 0.3s, border-color 0.3s;  
77 - }  
78 -  
79 - .sidebar h2 {  
80 - font-size: 1.2em;  
81 - color: var(--heading-color);  
82 - margin-bottom: 20px;  
83 - border-bottom: 2px solid var(--secondary-color);  
84 - padding-bottom: 10px;  
85 - }  
86 -  
87 - .sidebar nav ul {  
88 - list-style: none;  
89 - }  
90 -  
91 - .sidebar nav li a {  
92 - display: block;  
93 - color: var(--text-color);  
94 - text-decoration: none;  
95 - padding: 10px 15px;  
96 - border-radius: 5px;  
97 - margin-bottom: 5px;  
98 - transition: background-color 0.2s, color 0.2s;  
99 - }  
100 -  
101 - .sidebar nav li a:hover, .sidebar nav li a.active {  
102 - background-color: var(--secondary-color);  
103 - color: #fff;  
104 - }  
105 -  
106 - .main-content {  
107 - flex-grow: 1;  
108 - padding: 30px;  
109 - overflow-x: hidden;  
110 - }  
111 -  
112 - header {  
113 - margin-bottom: 30px;  
114 - }  
115 -  
116 - header h1 {  
117 - font-size: 2.5em;  
118 - color: var(--heading-color);  
119 - margin-bottom: 10px;  
120 - }  
121 -  
122 - header .meta-info {  
123 - font-size: 0.9em;  
124 - color: var(--neutral-color);  
125 - }  
126 -  
127 - .card {  
128 - background-color: var(--card-bg-color);  
129 - border-radius: 12px;  
130 - padding: 25px;  
131 - margin-bottom: 30px;  
132 - box-shadow: 0 4px 15px var(--shadow-color);  
133 - transition: background-color 0.3s, box-shadow 0.3s;  
134 - }  
135 -  
136 - .card-header {  
137 - display: flex;  
138 - justify-content: space-between;  
139 - align-items: center;  
140 - cursor: pointer;  
141 - border-bottom: 1px solid var(--border-color);  
142 - padding-bottom: 15px;  
143 - margin-bottom: 20px;  
144 - }  
145 -  
146 - .card-header h3 {  
147 - color: var(--heading-color);  
148 - font-size: 1.5em;  
149 - }  
150 -  
151 - .card-header .toggle-icon {  
152 - font-size: 1.5em;  
153 - transition: transform 0.3s;  
154 - }  
155 -  
156 - .card-header.collapsed .toggle-icon {  
157 - transform: rotate(-90deg);  
158 - }  
159 -  
160 - .card-content {  
161 - max-height: 5000px;  
162 - overflow: hidden;  
163 - transition: max-height 0.7s ease-in-out, padding 0.5s ease;  
164 - }  
165 -  
166 - .card-content.collapsed {  
167 - max-height: 0;  
168 - padding-top: 0;  
169 - padding-bottom: 0;  
170 - margin-top: -20px;  
171 - }  
172 -  
173 - .grid-container {  
174 - display: grid;  
175 - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));  
176 - gap: 20px;  
177 - margin-bottom: 20px;  
178 - }  
179 -  
180 - .stat-box {  
181 - background: linear-gradient(135deg, var(--card-bg-color), color-mix(in srgb, var(--card-bg-color) 80%, var(--secondary-color)));  
182 - padding: 20px;  
183 - border-radius: 8px;  
184 - text-align: center;  
185 - border: 1px solid var(--border-color);  
186 - }  
187 -  
188 - .stat-box .value {  
189 - font-size: 2em;  
190 - font-weight: bold;  
191 - color: var(--heading-color);  
192 - }  
193 -  
194 - .stat-box .label {  
195 - font-size: 0.9em;  
196 - color: var(--neutral-color);  
197 - }  
198 -  
199 - .topic-list li {  
200 - background-color: var(--background-color);  
201 - padding: 15px;  
202 - border-radius: 8px;  
203 - margin-bottom: 10px;  
204 - border-left: 4px solid var(--secondary-color);  
205 - }  
206 -  
207 - .topic-list li strong {  
208 - color: var(--heading-color);  
209 - }  
210 -  
211 - .alert-box {  
212 - padding: 15px;  
213 - border-radius: 8px;  
214 - margin-bottom: 10px;  
215 - border-left: 5px solid;  
216 - }  
217 -  
218 - .alert-warning {  
219 - background-color: color-mix(in srgb, var(--warning-color) 15%, transparent);  
220 - border-color: var(--warning-color);  
221 - }  
222 -  
223 - .chart-container {  
224 - position: relative;  
225 - height: 400px;  
226 - width: 100%;  
227 - }  
228 -  
229 - .timeline {  
230 - position: relative;  
231 - padding: 20px 0;  
232 - }  
233 - .timeline::before {  
234 - content: '';  
235 - position: absolute;  
236 - left: 20px;  
237 - top: 0;  
238 - bottom: 0;  
239 - width: 2px;  
240 - background: var(--border-color);  
241 - }  
242 - .timeline-item {  
243 - position: relative;  
244 - margin-bottom: 20px;  
245 - padding-left: 40px;  
246 - }  
247 - .timeline-item::before {  
248 - content: '';  
249 - position: absolute;  
250 - left: 13px;  
251 - top: 5px;  
252 - width: 15px;  
253 - height: 15px;  
254 - border-radius: 50%;  
255 - background: var(--secondary-color);  
256 - border: 2px solid var(--background-color);  
257 - }  
258 - .timeline-item .time {  
259 - font-weight: bold;  
260 - color: var(--secondary-color);  
261 - display: block;  
262 - margin-bottom: 5px;  
263 - }  
264 -  
265 - table {  
266 - width: 100%;  
267 - border-collapse: collapse;  
268 - margin-top: 20px;  
269 - }  
270 -  
271 - th, td {  
272 - padding: 12px 15px;  
273 - border: 1px solid var(--border-color);  
274 - text-align: left;  
275 - }  
276 -  
277 - th {  
278 - background-color: color-mix(in srgb, var(--primary-color) 10%, var(--card-bg-color));  
279 - color: var(--heading-color);  
280 - }  
281 -  
282 - .controls {  
283 - position: fixed;  
284 - top: 20px;  
285 - right: 30px;  
286 - display: flex;  
287 - gap: 10px;  
288 - z-index: 1000;  
289 - }  
290 -  
291 - .control-btn {  
292 - background-color: var(--card-bg-color);  
293 - border: 1px solid var(--border-color);  
294 - color: var(--text-color);  
295 - padding: 10px 15px;  
296 - border-radius: 20px;  
297 - cursor: pointer;  
298 - font-size: 1em;  
299 - box-shadow: 0 2px 5px var(--shadow-color);  
300 - transition: all 0.2s;  
301 - }  
302 -  
303 - .control-btn:hover {  
304 - transform: translateY(-2px);  
305 - box-shadow: 0 4px 10px var(--shadow-color);  
306 - }  
307 -  
308 - @media (max-width: 1024px) {  
309 - .container { flex-direction: column; }  
310 - .sidebar { position: static; width: 100%; height: auto; border-right: none; border-bottom: 1px solid var(--border-color); }  
311 - .controls { position: absolute; }  
312 - }  
313 -  
314 - @media (max-width: 768px) {  
315 - .main-content { padding: 20px; }  
316 - header h1 { font-size: 2em; }  
317 - .grid-container { grid-template-columns: 1fr; }  
318 - .controls { display: none; }  
319 - }  
320 -  
321 - @media print {  
322 - body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }  
323 - .sidebar, .controls, .card-header .toggle-icon { display: none; }  
324 - .main-content { padding: 0; }  
325 - .card { box-shadow: none; border: 1px solid #ccc; page-break-inside: avoid; }  
326 - .card-content, .card-content.collapsed { max-height: none !important; overflow: visible; padding: 20px !important; margin: 0 !important; }  
327 - .card-header { border-bottom: 1px solid #ccc; }  
328 - .chart-container { height: 300px; page-break-inside: avoid; }  
329 - }  
330 - </style>  
331 -</head>  
332 -<body>  
333 - <div class="controls">  
334 - <button id="theme-toggle" class="control-btn">🌙 暗色模式</button>  
335 - <button onclick="window.print()" class="control-btn">🖨️ 打印/导出PDF</button>  
336 - </div>  
337 -  
338 - <div class="container">  
339 - <aside class="sidebar">  
340 - <h2>导航目录</h2>  
341 - <nav>  
342 - <ul>  
343 - <li><a href="#s1">1.0 舆情概览</a></li>  
344 - <li><a href="#s2">2.0 关键数据趋势</a></li>  
345 - <li><a href="#s3">3.0 舆情动态时间轴</a></li>  
346 - <li><a href="#s4">4.0 热点话题追踪</a></li>  
347 - <li><a href="#s5">5.0 重点渠道表现</a></li>  
348 - <li><a href="#s6">6.0 负面与风险监测</a></li>  
349 - <li><a href="#s7">7.0 简报与关注点</a></li>  
350 - </ul>  
351 - </nav>  
352 - </aside>  
353 -  
354 - <main class="main-content">  
355 - <header>  
356 - <h1>智能舆情分析报告</h1>  
357 - <p class="meta-info">分析对象:武汉大学 | 数据周期:2024-03-01 至 2024-04-30</p>  
358 - </header>  
359 -  
360 - <section id="s1" class="card">  
361 - <div class="card-header">  
362 - <h3>1.0 本期舆情概览</h3>  
363 - <span class="toggle-icon"></span>  
364 - </div>  
365 - <div class="card-content">  
366 - <h4>1.1 核心数据看板</h4>  
367 - <div class="grid-container">  
368 - <div class="stat-box">  
369 - <div class="value">210万+</div>  
370 - <div class="label">相关声量</div>  
371 - </div>  
372 - <div class="stat-box">  
373 - <div class="value">3.8亿+</div>  
374 - <div class="label">总阅读/播放量</div>  
375 - </div>  
376 - <div class="stat-box">  
377 - <div class="value">420万+</div>  
378 - <div class="label">总互动量</div>  
379 - </div>  
380 - <div class="stat-box">  
381 - <div class="value" style="color: var(--success-color);">51%</div>  
382 - <div class="label">正面情绪占比</div>  
383 - </div>  
384 - </div>  
385 -  
386 - <h4>1.2 本期舆情热度 TOP 3</h4>  
387 - <ul class="topic-list">  
388 - <li><strong>TOP 1: 武大樱花季 (阅读量 ≈3.8亿)</strong><br>#武大樱花预约# 话题引爆社交媒体,讨论集中于预约难度、校园美景与游客管理,情感呈现“浪漫”与“焦虑”交织的两极化特征。</li>  
389 - <li><strong>TOP 2: 学科实力与就业前景讨论 (赞同/讨论 ≈5万)</strong><br>以知乎为中心,关于测绘遥感“世界第一”的自豪感,与对毕业生实际薪资水平的焦虑形成鲜明对比,引发“名校光环vs现实压力”的深度探讨。</li>  
390 - <li><strong>TOP 3: 校史渊源与文化认同 (讨论量 ≈2万)</strong><br>围绕建校史(1893 vs 1913)的“玩梗”与严肃讨论并存,体现了师生校友对学校历史的强烈关注和身份认同感。</li>  
391 - </ul>  
392 -  
393 - <h4>1.3 重点预警</h4>  
394 - <div class="alert-box alert-warning">  
395 - <strong>潜在风险:</strong>毕业生就业焦虑情绪正在从个体吐槽向群体性议题演化,尤其是顶尖学科与市场薪酬的“体感落差”可能影响未来的招生吸引力和品牌声誉。需关注并加强正面引导。  
396 - </div>  
397 - </div>  
398 - </section>  
399 -  
400 - <section id="s2" class="card">  
401 - <div class="card-header">  
402 - <h3>2.0 关键数据趋势</h3>  
403 - <span class="toggle-icon"></span>  
404 - </div>  
405 - <div class="card-content">  
406 - <h4>2.1 声量与情感走势</h4>  
407 - <div class="chart-container">  
408 - <canvas id="trendsChart"></canvas>  
409 - </div>  
410 - <p><strong>分析:</strong>声量在三月中下旬达到顶峰,与“樱花季”高度相关。正面情绪(蓝色)随樱花季和学术成就讨论而上扬,但负面/焦虑情绪(红色)也同步增长,尤其体现在樱花预约困难和后续的就业薪资讨论中,展现了舆论的双重性。</p>  
411 - <h4>2.2 整体情感分布</h4>  
412 - <div class="chart-container" style="height:350px;">  
413 - <canvas id="sentimentPieChart"></canvas>  
414 - </div>  
415 - <p><strong>分析:</strong>整体舆论以正面情绪为主(51%),主要来源于对学校历史、学术成就、美丽校园的自豪感与喜爱。负面情绪(34%)则集中于现实压力,如就业、内卷、资源分配等。中性讨论(15%)多为信息咨询与事实陈述。</p>  
416 - </div>  
417 - </section>  
418 -  
419 - <section id="s3" class="card">  
420 - <div class="card-header">  
421 - <h3>3.0 本周期舆情动态时间轴</h3>  
422 - <span class="toggle-icon"></span>  
423 - </div>  
424 - <div class="card-content">  
425 - <div class="timeline">  
426 - <div class="timeline-item">  
427 - <span class="time">3月上旬</span>  
428 - <p>樱花季预热,小红书、抖音出现大量“赏樱攻略”,正面期待情绪高涨。</p>  
429 - </div>  
430 - <div class="timeline-item">  
431 - <span class="time">3月15日</span>  
432 - <p>樱花预约通道开放,#武大樱花预约# 冲上微博热搜,因访问量过大导致系统卡顿,引发大量“抢票像春运”的吐槽,负面情绪首次高峰。</p>  
433 - </div>  
434 - <div class="timeline-item">  
435 - <span class="time">3月下旬</span>  
436 - <p>樱花盛开期,游客与学生发布的校园美景图文、视频刷屏,正面情感压倒负面,形成本周期声量与正面情绪最高峰。</p>  
437 - </div>  
438 - <div class="timeline-item">  
439 - <span class="time">4月上旬</span>  
440 - <p>知乎出现高赞问题:“如何看待武大测绘遥感世界第一,但毕业生薪资并不突出?”,引发大规模讨论,焦虑情绪显著上升。</p>  
441 - </div>  
442 - <div class="timeline-item">  
443 - <span class="time">4月中旬</span>  
444 - <p>B站“阿牙”医生等口腔医学KOL视频受关注,正面口碑持续发酵。同时,关于规培生待遇低的讨论在小范围内传播。</p>  
445 - </div>  
446 - <div class="timeline-item">  
447 - <span class="time">4月下旬</span>  
448 - <p>校友雷军、陈东升等商业成就被媒体报道,引发一波对武大“人才培养”的自豪感讨论。</p>  
449 - </div>  
450 - </div>  
451 - </div>  
452 - </section>  
453 -  
454 - <section id="s4" class="card">  
455 - <div class="card-header">  
456 - <h3>4.0 热点话题追踪</h3>  
457 - <span class="toggle-icon"></span>  
458 - </div>  
459 - <div class="card-content">  
460 - <h4>4.1 本期热点事件详情</h4>  
461 - <h5>话题一:樱花季的“浪漫”与“烦恼”</h5>  
462 - <p>樱花季是武汉大学最具代表性的公共事件。舆论场呈现清晰的两面:一方面,是海量的赞美与向往,通过精美的图文和视频,将武大樱花塑造成一个浪漫的文化符号;另一方面,是围绕“预约难”和“游客过多影响教学”的抱怨和争议。这种矛盾体现了大学作为公共文化资源与维护正常教学秩序之间的张力。</p>  
463 -  
464 - <h5>话题二:学术光环下的现实焦虑</h5>  
465 - <p>“测绘遥感世界第一”等学术成就为学校带来巨大的声誉和自豪感。然而,当这些宏大叙事与毕业生面临的“就业薪资”、“工作压力”等具体问题碰撞时,产生了强烈的舆论张力。用户讨论不再满足于抽象的排名,而是更关心“顶尖学科”能否直接转化为个体优越的职业发展。这种“自豪与焦虑并存”的心态,是当前高学历人群普遍心态的缩影。</p>  
466 -  
467 - <h4>4.2 新增/突发话题</h4>  
468 - <p><strong>国际交流成本讨论:</strong>在关于国际合作的讨论中,有声音指出哈佛等顶尖名校的交换项目成本高昂(如“300美元房租劝退普通家庭”),普通家庭学生难以企及。这个话题虽未大规模发酵,但触及了教育公平和资源普惠性的敏感点,值得关注。</p>  
469 - </div>  
470 - </section>  
471 -  
472 - <section id="s5" class="card">  
473 - <div class="card-header">  
474 - <h3>5.0 重点渠道表现</h3>  
475 - <span class="toggle-icon"></span>  
476 - </div>  
477 - <div class="card-content">  
478 - <h4>5.1 核心媒体平台表现</h4>  
479 - <div class="chart-container" style="height:350px;">  
480 - <canvas id="sourceDistributionChart"></canvas>  
481 - </div>  
482 - <p><strong>渠道分析:</strong></p>  
483 - <ul>  
484 - <li><strong>微博:</strong> 主要舆论场和话题引爆点,#武大樱花预约#等热搜源头,情绪放大效应明显。</li>  
485 - <li><strong>知乎:</strong> 深度讨论的核心阵地,关于学科实力、就业前景、校史等严肃话题的发源地,观点专业,影响力深远。</li>  
486 - <li><strong>小红书/抖音:</strong> 视觉化、生活化内容的集散地,主导了“最美大学”的形象塑造,以正面、浪漫内容为主。</li>  
487 - <li><strong>B站:</strong> 知识科普与校园生活展示平台,涌现了如口腔医学科普等优质内容,有助于专业形象的软性传播。</li>  
488 -</body>  
489 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <style>  
19 - :root {  
20 - --primary-color: #2c3e50;  
21 - --secondary-color: #3498db;  
22 - --accent-color: #2980b9;  
23 - --bg-color: #ecf0f1;  
24 - --card-bg-color: #ffffff;  
25 - --text-color: #34495e;  
26 - --heading-color: #2c3e50;  
27 - --border-color: #dce4e8;  
28 - --shadow-color: rgba(0, 0, 0, 0.1);  
29 - --success-color: #27ae60;  
30 - --warning-color: #f39c12;  
31 - --danger-color: #c0392b;  
32 - --neutral-color: #95a5a6;  
33 - }  
34 -  
35 - body.dark-mode {  
36 - --primary-color: #ecf0f1;  
37 - --secondary-color: #3498db;  
38 - --accent-color: #5dade2;  
39 - --bg-color: #2c3e50;  
40 - --card-bg-color: #34495e;  
41 - --text-color: #bdc3c7;  
42 - --heading-color: #ffffff;  
43 - --border-color: #4a627a;  
44 - --shadow-color: rgba(0, 0, 0, 0.2);  
45 - }  
46 -  
47 - * {  
48 - box-sizing: border-box;  
49 - margin: 0;  
50 - padding: 0;  
51 - }  
52 -  
53 - body {  
54 - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';  
55 - background-color: var(--bg-color);  
56 - color: var(--text-color);  
57 - line-height: 1.6;  
58 - transition: background-color 0.3s, color 0.3s;  
59 - font-size: 16px;  
60 - }  
61 -  
62 - .container {  
63 - display: flex;  
64 - max-width: 1600px;  
65 - margin: 0 auto;  
66 - }  
67 -  
68 - .sidebar {  
69 - width: 260px;  
70 - background-color: var(--card-bg-color);  
71 - padding: 20px;  
72 - position: sticky;  
73 - top: 0;  
74 - height: 100vh;  
75 - overflow-y: auto;  
76 - border-right: 1px solid var(--border-color);  
77 - transition: background-color 0.3s, border-color 0.3s;  
78 - }  
79 -  
80 - .sidebar h2 {  
81 - color: var(--heading-color);  
82 - margin-bottom: 20px;  
83 - font-size: 1.5em;  
84 - border-bottom: 2px solid var(--secondary-color);  
85 - padding-bottom: 10px;  
86 - }  
87 -  
88 - .sidebar nav ul {  
89 - list-style: none;  
90 - }  
91 -  
92 - .sidebar nav li a {  
93 - display: block;  
94 - color: var(--text-color);  
95 - text-decoration: none;  
96 - padding: 10px 15px;  
97 - border-radius: 5px;  
98 - margin-bottom: 5px;  
99 - transition: background-color 0.2s, color 0.2s;  
100 - }  
101 -  
102 - .sidebar nav li a:hover, .sidebar nav li a.active {  
103 - background-color: var(--secondary-color);  
104 - color: #fff;  
105 - }  
106 -  
107 - .main-content {  
108 - flex: 1;  
109 - padding: 20px 40px;  
110 - overflow-x: hidden;  
111 - }  
112 -  
113 - header {  
114 - margin-bottom: 30px;  
115 - border-bottom: 1px solid var(--border-color);  
116 - padding-bottom: 20px;  
117 - }  
118 -  
119 - header h1 {  
120 - color: var(--heading-color);  
121 - font-size: 2.5em;  
122 - margin-bottom: 10px;  
123 - }  
124 -  
125 - header .report-meta {  
126 - font-size: 0.9em;  
127 - color: var(--neutral-color);  
128 - }  
129 -  
130 - .card {  
131 - background-color: var(--card-bg-color);  
132 - border-radius: 8px;  
133 - padding: 25px;  
134 - margin-bottom: 25px;  
135 - box-shadow: 0 4px 15px var(--shadow-color);  
136 - transition: background-color 0.3s, box-shadow 0.3s;  
137 - overflow: hidden;  
138 - }  
139 -  
140 - h2.section-title {  
141 - color: var(--heading-color);  
142 - font-size: 1.8em;  
143 - margin-bottom: 20px;  
144 - padding-bottom: 10px;  
145 - border-bottom: 2px solid var(--border-color);  
146 - }  
147 -  
148 - .dashboard {  
149 - display: grid;  
150 - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));  
151 - gap: 20px;  
152 - }  
153 -  
154 - .stat-item {  
155 - background-color: var(--bg-color);  
156 - padding: 20px;  
157 - border-radius: 8px;  
158 - text-align: center;  
159 - border-left: 5px solid var(--secondary-color);  
160 - }  
161 -  
162 - .stat-item .value {  
163 - font-size: 2em;  
164 - font-weight: bold;  
165 - color: var(--heading-color);  
166 - }  
167 -  
168 - .stat-item .label {  
169 - font-size: 0.9em;  
170 - color: var(--neutral-color);  
171 - }  
172 -  
173 - .chart-container {  
174 - position: relative;  
175 - height: 400px;  
176 - width: 100%;  
177 - }  
178 -  
179 - .grid-2 {  
180 - display: grid;  
181 - grid-template-columns: 1fr 1fr;  
182 - gap: 25px;  
183 - }  
184 -  
185 - details {  
186 - background: var(--bg-color);  
187 - border-radius: 5px;  
188 - padding: 15px;  
189 - margin-bottom: 15px;  
190 - border: 1px solid var(--border-color);  
191 - }  
192 -  
193 - summary {  
194 - font-weight: bold;  
195 - cursor: pointer;  
196 - color: var(--accent-color);  
197 - font-size: 1.1em;  
198 - }  
199 -  
200 - summary::marker {  
201 - color: var(--secondary-color);  
202 - }  
203 -  
204 - .timeline {  
205 - position: relative;  
206 - padding-left: 30px;  
207 - border-left: 2px solid var(--secondary-color);  
208 - }  
209 -  
210 - .timeline-item {  
211 - margin-bottom: 20px;  
212 - position: relative;  
213 - }  
214 -  
215 - .timeline-item::before {  
216 - content: '';  
217 - position: absolute;  
218 - left: -37px;  
219 - top: 5px;  
220 - width: 12px;  
221 - height: 12px;  
222 - border-radius: 50%;  
223 - background-color: var(--card-bg-color);  
224 - border: 2px solid var(--secondary-color);  
225 - }  
226 -  
227 - .timeline-item .time {  
228 - font-weight: bold;  
229 - color: var(--accent-color);  
230 - }  
231 -  
232 - .topic-card {  
233 - border-left: 5px solid;  
234 - padding-left: 20px;  
235 - }  
236 - .topic-card.danger { border-color: var(--danger-color); }  
237 - .topic-card.warning { border-color: var(--warning-color); }  
238 - .topic-card.success { border-color: var(--success-color); }  
239 -  
240 - .tag {  
241 - display: inline-block;  
242 - padding: 3px 10px;  
243 - border-radius: 15px;  
244 - font-size: 0.8em;  
245 - color: #fff;  
246 - margin-right: 5px;  
247 - }  
248 - .tag.positive { background-color: var(--success-color); }  
249 - .tag.negative { background-color: var(--danger-color); }  
250 - .tag.neutral { background-color: var(--neutral-color); }  
251 -  
252 - .toolbar {  
253 - position: fixed;  
254 - bottom: 20px;  
255 - right: 20px;  
256 - display: flex;  
257 - gap: 10px;  
258 - z-index: 1000;  
259 - }  
260 -  
261 - .toolbar button {  
262 - background-color: var(--primary-color);  
263 - color: var(--bg-color);  
264 - border: none;  
265 - border-radius: 50%;  
266 - width: 50px;  
267 - height: 50px;  
268 - font-size: 1.5em;  
269 - cursor: pointer;  
270 - box-shadow: 0 4px 10px var(--shadow-color);  
271 - transition: transform 0.2s, background-color 0.3s;  
272 - }  
273 -  
274 - .toolbar button:hover {  
275 - transform: translateY(-3px);  
276 - background-color: var(--accent-color);  
277 - }  
278 -  
279 - table {  
280 - width: 100%;  
281 - border-collapse: collapse;  
282 - margin-top: 15px;  
283 - }  
284 -  
285 - th, td {  
286 - padding: 12px;  
287 - text-align: left;  
288 - border-bottom: 1px solid var(--border-color);  
289 - }  
290 -  
291 - th {  
292 - background-color: var(--bg-color);  
293 - color: var(--heading-color);  
294 - }  
295 -  
296 - blockquote {  
297 - border-left: 4px solid var(--secondary-color);  
298 - padding-left: 15px;  
299 - margin: 15px 0;  
300 - font-style: italic;  
301 - color: var(--neutral-color);  
302 - }  
303 -  
304 - @media (max-width: 1200px) {  
305 - .container { flex-direction: column; }  
306 - .sidebar { position: static; width: 100%; height: auto; border-right: none; border-bottom: 1px solid var(--border-color); }  
307 - .main-content { padding: 20px; }  
308 - }  
309 -  
310 - @media (max-width: 768px) {  
311 - .grid-2 { grid-template-columns: 1fr; }  
312 - header h1 { font-size: 2em; }  
313 - h2.section-title { font-size: 1.5em; }  
314 - }  
315 -  
316 - @media print {  
317 - .sidebar, .toolbar, header .report-meta, details summary::marker {  
318 - display: none;  
319 - }  
320 - body, .main-content, .card {  
321 - background: #fff !important;  
322 - color: #000 !important;  
323 - box-shadow: none;  
324 - border: none;  
325 - padding: 0;  
326 - margin: 0;  
327 - }  
328 - .container { display: block; }  
329 - .card { margin-bottom: 20px; page-break-inside: avoid; }  
330 - a { text-decoration: none; color: inherit; }  
331 - }  
332 -  
333 - </style>  
334 -</head>  
335 -<body>  
336 - <div class="container">  
337 - <aside class="sidebar">  
338 - <h2>报告导航</h2>  
339 - <nav>  
340 - <ul>  
341 - <li><a href="#overview">1.0 舆情概览</a></li>  
342 - <li><a href="#trends">2.0 关键数据趋势</a></li>  
343 - <li><a href="#timeline">3.0 舆情动态时间轴</a></li>  
344 - <li><a href="#hot-topics">4.0 热点话题追踪</a></li>  
345 - <li><a href="#channels">5.0 重点渠道表现</a></li>  
346 - <li><a href="#risks">6.0 负面与风险监测</a></li>  
347 - <li><a href="#summary">7.0 简报与关注点</a></li>  
348 - <li><a href="#appendix">8.0 数据附录</a></li>  
349 - </ul>  
350 - </nav>  
351 - </aside>  
352 -  
353 - <main class="main-content">  
354 - <header>  
355 - <h1>智能舆情分析报告:武汉大学</h1>  
356 - <div class="report-meta">报告周期:近期综合数据 | 生成时间:2025-08-26</div>  
357 - </header>  
358 -  
359 - <section id="overview" class="card">  
360 - <h2 class="section-title">1.0 本周/月舆情概览</h2>  
361 - <details open>  
362 - <summary>1.1 核心数据看板</summary>  
363 - <div class="dashboard" style="margin-top: 20px;">  
364 - <div class="stat-item"><div class="value">≈2.1M</div><div class="label">相关信息量</div></div>  
365 - <div class="stat-item"><div class="value">≈3.8亿</div><div class="label">总阅读量</div></div>  
366 - <div class="stat-item"><div class="value">≈4.2M</div><div class="label">总互动量</div></div>  
367 - <div class="stat-item" style="border-color: var(--danger-color);"><div class="value">42.5%</div><div class="label">负面/焦虑情绪占比</div></div>  
368 - </div>  
369 - </details>  
370 - <details open>  
371 - <summary>1.2 本期舆情热度 TOP 3</summary>  
372 - <ol style="margin-top:15px; padding-left:20px;">  
373 - <li><b>学术诚信危机:</b>杨景媛学术不端及图书馆诬告案引发全网对学校学术审查和危机处理能力的质疑。</li>  
374 - <li><b>校园文化与公共形象:</b>樱花季预约难、游客冲突等周期性话题,反映了“最美大学”光环下的管理压力。</li>  
375 - <li><b>学术声望与现实焦虑:</b>“世界第一”学科与毕业生就业薪资的巨大反差,引发在校生和校友的普遍焦虑。</li>  
376 - </ol>  
377 - </details>  
378 - <details>  
379 - <summary>1.3 重点预警</summary>  
380 - <p style="margin-top:15px;"><span class="tag negative">高风险</span>学术不端事件调查仍在进行中,校方最终处理结果将直接影响舆论走向,可能引发第二波舆情高峰。需警惕“反应迟缓”、“包庇”等负面标签被固化。</p>  
381 - </details>  
382 - </section>  
383 -  
384 - <section id="trends" class="card">  
385 - <h2 class="section-title">2.0 关键数据趋势</h2>  
386 - <div class="grid-2">  
387 - <div>  
388 - <h3>2.1 声量走势</h3>  
389 - <div class="chart-container"><canvas id="volumeTrendChart"></canvas></div>  
390 - </div>  
391 - <div>  
392 - <h3>2.2 情感趋势</h3>  
393 - <div class="chart-container"><canvas id="sentimentTrendChart"></canvas></div>  
394 - </div>  
395 - <div>  
396 - <h3>整体情感分布</h3>  
397 - <div class="chart-container" style="height:300px"><canvas id="sentimentPieChart"></canvas></div>  
398 - </div>  
399 - </div>  
400 - </section>  
401 -  
402 - <section id="timeline" class="card">  
403 - <h2 class="section-title">3.0 本周期舆情动态时间轴</h2>  
404 - <div class="timeline">  
405 - <div class="timeline-item">  
406 - <div class="time">2025年7月</div>  
407 - <p>武汉大学硕士毕业生杨景媛被曝硕士论文严重造假,同时其诬告肖姓学弟性骚扰案败诉的背景被挖出,事件开始在社交媒体发酵。</p>  
408 - </div>  
409 - <div class="timeline-item">  
410 - <div class="time">2025年7月31日</div>  
411 - <p>香港浸会大学就杨景媛录取争议发表声明,表示将启动独立审查程序,舆论关注度升级。</p>  
412 - </div>  
413 - <div class="timeline-item">  
414 - <div class="time">2025年8月1日</div>  
415 - <p>在央媒关注后,武汉大学官方宣布成立工作专班,对杨景媛学术不端问题进行全面调查复核,但因反应速度慢于公众预期而受到批评。</p>  
416 - </div>  
417 - <div class="timeline-item">  
418 - <div class="time">2025年8月6日</div>  
419 - <p>网络流传“香港浸会大学撤销杨景媛录取资格”的消息,后被证实为谣言,校方表示仍在按程序处理,引发公众对处理效率的进一步质疑。</p>  
420 - </div>  
421 - <div class="timeline-item">  
422 - <div class="time">近期其他热点</div>  
423 - <p>春季樱花节期间,#武大樱花预约# 话题登上热搜,引发关于校园开放与管理的讨论。同时,关于顶尖学科毕业生就业薪资的讨论在知乎、B站等平台持续发酵。</p>  
424 - </div>  
425 - </div>  
426 - </section>  
427 -  
428 - <section id="hot-topics" class="card">  
429 - <h2 class="section-title">4.0 热点话题追踪</h2>  
430 - <details open>  
431 - <summary>4.1 热点事件详情</summary>  
432 - <article class="topic-card danger" style="margin-top: 20px;">  
433 - <h4>议题一:学术诚信危机与信任重创 (杨景媛事件)</h4>  
434 - <p><b>核心问题:</b>杨景媛学术不端事件与图书馆诬告案交织,暴露了学校在研究生培养、论文审核、学生管理及危机公关等方面的系统性漏洞。</p>  
435 - <p><b>舆论焦点:</b></p>  
436 - <ul>  
437 - <li><b>学术审查失效:</b>公众普遍质疑导师指导责任、答辩委员会的审查职能以及学位授予的严肃性。</li>  
438 - <li><b>危机应对迟缓:</b>校方在事件发酵初期反应滞后,“等上级安排”等言论被视为官僚主义,错失了引导舆论、修复信任的最佳窗口。</li>  
439 - <li><b>程序正义缺失:</b>对被诬告学生肖同学的处理与对杨景媛的“保研”形成鲜明对比,引发对高校公平正义的强烈质疑。</li>  
440 - </ul>  
441 - <blockquote>“百年名校的声誉,可能因为一次不作为而蒙上难以擦拭的污点。” - 微博高赞评论</blockquote>  
442 - </article>  
443 - <article class="topic-card warning" style="margin-top: 20px;">  
444 - <h4>议题二:学术光环与现实焦虑的拉锯</h4>  
445 - <p><b>核心现象:</b>以“测绘遥感世界第一”为代表的顶尖学科声望与相关专业毕业生面临的就业市场现实(如薪资、工作压力)形成巨大反差,引发学生群体的普遍焦虑和讨论。</p>  
446 - <p><b>情感洞察:</b>这种情绪并非否定学校的学术成就,而是一种更复杂的“爱之深、忧之切”。学生们既为母校的荣誉感到自豪,也为自己未来的职业发展感到迷茫。这种“骄傲与焦虑并存”是当前高学历人才市场竞争激烈下的普遍心态在武大的集中体现。</p>  
447 - <table>  
448 - <thead><tr><th>学科</th><th>高光叙事</th><th>焦虑痛点</th><th>情感走势</th></tr></thead>  
449 - <tbody>  
450 - <tr><td>测绘遥感</td><td>知乎“世界第一”高赞</td><td>“毕业买不起武汉一平米”</td><td>自豪感被现实焦虑稀释</td></tr>  
451 - <tr><td>法学</td><td>省考“双第一”报喜</td><td>红圈所实习薪资低,压力大</td><td>精英光环下的生存挣扎</td></tr>  
452 - <tr><td>口腔医学</td><td>B站科普视频百万播放</td><td>规培薪资低,工作强度大</td><td>信赖感与个人辛酸并存</td></tr>  
453 - </tbody>  
454 - </table>  
455 - </article>  
456 - <article class="topic-card success" style="margin-top: 20px;">  
457 - <h4>议题三:百年校史与校园文化的“开放剧本”</h4>  
458 - <p><b>核心观察:</b>武汉大学的深厚历史与优美环境是舆论场中的“正面资产”,持续产生积极情感价值。从樱花季的浪漫想象,到对民国老建筑的怀旧,再到对校史的趣味解读(如“学大汉武立国”梗),都构成了强大的品牌护城河。</p>  
459 - <p><b>双面性:</b>然而,这种高关注度也带来了管理挑战。樱花季的“抢票难”和游客冲突,以及对校园过度商业化的担忧,表明公众对这片“精神家园”有着极高的期待和保护欲。</p>  
460 - <blockquote>“历史是武大人共同的‘开放剧本’,人人可改台词,却从未离场。” - 洞察引擎分析</blockquote>  
461 - </article>  
462 - </details>  
463 -  
464 -</body>  
465 -</html>  
1 -<!DOCTYPE html>  
2 -<html lang="zh-CN">  
3 -<head>  
4 - <meta charset="UTF-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
6 - <title>智能舆情分析报告</title>  
7 -</head>  
8 -<body>  
9 -json  
10 -{  
11 - "html_content": "<!DOCTYPE html>  
12 -<html lang="zh-CN">  
13 -<head>  
14 - <meta charset="UTF-8">  
15 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
16 - <title>智能舆情分析报告 - 武汉大学</title>  
17 - <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>  
18 - <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>  
19 - <style>  
20 - :root {  
21 - --primary-color: #2c3e50;  
22 - --secondary-color: #3498db;  
23 - --accent-color: #e74c3c;  
24 - --bg-color: #ecf0f1;  
25 - --text-color: #34495e;  
26 - --card-bg-color: #ffffff;  
27 - --border-color: #dce4e8;  
28 - --shadow-color: rgba(0, 0, 0, 0.08);  
29 - --positive-color: #2ecc71;  
30 - --negative-color: #e74c3c;  
31 - --neutral-color: #f1c40f;  
32 - }  
33 -  
34 - body.dark-mode {  
35 - --primary-color: #ecf0f1;  
36 - --secondary-color: #3498db;  
37 - --accent-color: #e74c3c;  
38 - --bg-color: #2c3e50;  
39 - --text-color: #bdc3c7;  
40 - --card-bg-color: #34495e;  
41 - --border-color: #4a627a;  
42 - --shadow-color: rgba(0, 0, 0, 0.2);  
43 - }  
44 -  
45 - @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');  
46 -  
47 - body {  
48 - font-family: 'Noto Sans SC', sans-serif;  
49 - margin: 0;  
50 - background-color: var(--bg-color);  
51 - color: var(--text-color);  
52 - line-height: 1.6;  
53 - transition: background-color 0.3s, color 0.3s;  
54 - }  
55 -  
56 - .container {  
57 - display: flex;  
58 - max-width: 1600px;  
59 - margin: 0 auto;  
60 - }  
61 -  
62 - header {  
63 - background-color: var(--card-bg-color);  
64 - padding: 20px 40px;  
65 - border-bottom: 1px solid var(--border-color);  
66 - display: flex;  
67 - justify-content: space-between;  
68 - align-items: center;  
69 - box-shadow: 0 2px 5px var(--shadow-color);  
70 - }  
71 -  
72 - header h1 {  
73 - color: var(--primary-color);  
74 - margin: 0;  
75 - font-size: 24px;  
76 - }  
77 - header .subtitle {  
78 - font-size: 16px;  
79 - color: var(--text-color);  
80 - opacity: 0.8;  
81 - }  
82 -  
83 - .controls button {  
84 - background-color: var(--secondary-color);  
85 - color: white;  
86 - border: none;  
87 - padding: 8px 16px;  
88 - border-radius: 5px;  
89 - cursor: pointer;  
90 - margin-left: 10px;  
91 - transition: background-color 0.3s;  
92 - }  
93 - .controls button:hover {  
94 - background-color: #2980b9;  
95 - }  
96 -  
97 - .sidebar {  
98 - width: 240px;  
99 - background-color: var(--card-bg-color);  
100 - padding: 20px;  
101 - height: calc(100vh - 85px);  
102 - position: sticky;  
103 - top: 0;  
104 - border-right: 1px solid var(--border-color);  
105 - overflow-y: auto;  
106 - }  
107 -  
108 - .sidebar h2 {  
109 - font-size: 18px;  
110 - color: var(--primary-color);  
111 - border-bottom: 2px solid var(--secondary-color);  
112 - padding-bottom: 10px;  
113 - }  
114 -  
115 - .sidebar ul {  
116 - list-style: none;  
117 - padding: 0;  
118 - margin: 0;  
119 - }  
120 -  
121 - .sidebar li a {  
122 - display: block;  
123 - color: var(--text-color);  
124 - text-decoration: none;  
125 - padding: 10px 15px;  
126 - border-radius: 5px;  
127 - transition: background-color 0.2s, color 0.2s;  
128 - font-weight: 500;  
129 - }  
130 -  
131 - .sidebar li a:hover, .sidebar li a.active {  
132 - background-color: var(--secondary-color);  
133 - color: white;  
134 - }  
135 -  
136 - .main-content {  
137 - flex: 1;  
138 - padding: 20px 40px;  
139 - }  
140 -  
141 - section {  
142 - margin-bottom: 40px;  
143 - }  
144 -  
145 - section > h2 {  
146 - font-size: 28px;  
147 - color: var(--primary-color);  
148 - border-bottom: 3px solid var(--border-color);  
149 - padding-bottom: 15px;  
150 - margin-bottom: 25px;  
151 - }  
152 -  
153 - .card {  
154 - background-color: var(--card-bg-color);  
155 - border-radius: 8px;  
156 - padding: 25px;  
157 - margin-bottom: 20px;  
158 - box-shadow: 0 4px 12px var(--shadow-color);  
159 - transition: background-color 0.3s;  
160 - }  
161 -  
162 - .grid-container {  
163 - display: grid;  
164 - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));  
165 - gap: 20px;  
166 - }  
167 -  
168 - .stat-card {  
169 - text-align: center;  
170 - }  
171 - .stat-card .value {  
172 - font-size: 36px;  
173 - font-weight: 700;  
174 - color: var(--secondary-color);  
175 - }  
176 - .stat-card .label {  
177 - font-size: 14px;  
178 - color: var(--text-color);  
179 - opacity: 0.8;  
180 - }  
181 -  
182 - .top-topic-card {  
183 - border-left: 5px solid var(--secondary-color);  
184 - padding-left: 20px;  
185 - }  
186 - .top-topic-card.negative {  
187 - border-left-color: var(--accent-color);  
188 - }  
189 - .top-topic-card h4 {  
190 - margin-top: 0;  
191 - color: var(--primary-color);  
192 - }  
193 -  
194 - .collapsible > header {  
195 - cursor: pointer;  
196 - padding: 15px;  
197 - background-color: var(--bg-color);  
198 - border-radius: 5px;  
199 - display: flex;  
200 - justify-content: space-between;  
201 - align-items: center;  
202 - }  
203 - .collapsible > header:hover {  
204 - background-color: var(--border-color);  
205 - }  
206 - .collapsible > header::after {  
207 - content: '▼';  
208 - transition: transform 0.3s;  
209 - }  
210 - .collapsible.open > header::after {  
211 - transform: rotate(-180deg);  
212 - }  
213 - .collapsible > .content {  
214 - max-height: 0;  
215 - overflow: hidden;  
216 - transition: max-height 0.5s ease-in-out, padding 0.5s ease-in-out;  
217 - padding: 0 20px;  
218 - }  
219 - .collapsible.open > .content {  
220 - padding: 20px;  
221 - max-height: 2000px; /* Adjust as needed */  
222 - }  
223 -  
224 - .timeline {  
225 - position: relative;  
226 - padding-left: 40px;  
227 - border-left: 2px solid var(--secondary-color);  
228 - }  
229 - .timeline-item {  
230 - position: relative;  
231 - margin-bottom: 30px;  
232 - }  
233 - .timeline-item::before {  
234 - content: '';  
235 - position: absolute;  
236 - left: -48px;  
237 - top: 5px;  
238 - width: 14px;  
239 - height: 14px;  
240 - border-radius: 50%;  
241 - background-color: white;  
242 - border: 3px solid var(--secondary-color);  
243 - }  
244 - .timeline-item .time {  
245 - font-weight: bold;  
246 - color: var(--secondary-color);  
247 - }  
248 -  
249 - table {  
250 - width: 100%;  
251 - border-collapse: collapse;  
252 - }  
253 - th, td {  
254 - text-align: left;  
255 - padding: 12px 15px;  
256 - border-bottom: 1px solid var(--border-color);  
257 - }  
258 - th {  
259 - background-color: var(--bg-color);  
260 - font-weight: 700;  
261 - color: var(--primary-color);  
262 - }  
263 -  
264 - .insight-table strong { color: var(--accent-color); }  
265 -  
266 - footer {  
267 - text-align: center;  
268 - padding: 20px;  
269 - font-size: 14px;  
270 - color: var(--text-color);  
271 - opacity: 0.7;  
272 - border-top: 1px solid var(--border-color);  
273 - margin-top: 40px;  
274 - }  
275 -  
276 - @media (max-width: 1024px) {  
277 - .container { flex-direction: column; }  
278 - .sidebar { width: 100%; height: auto; position: static; border-right: none; border-bottom: 1px solid var(--border-color); }  
279 - .main-content { padding: 20px; }  
280 - }  
281 -  
282 - @media (max-width: 768px) {  
283 - header { flex-direction: column; align-items: flex-start; gap: 10px; }  
284 - .controls { width: 100%; text-align: right; }  
285 - }  
286 -  
287 - @media print {  
288 - body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }  
289 - header, .sidebar, .controls { display: none; }  
290 - .main-content { padding: 0; }  
291 - .card { box-shadow: none; border: 1px solid #ccc; }  
292 - section { page-break-inside: avoid; }  
293 - .collapsible > .content { max-height: none !important; padding: 20px !important; }  
294 - .collapsible.open > header::after { display: none; }  
295 - }  
296 -  
297 - </style>  
298 -</head>  
299 -<body>  
300 - <header>  
301 - <div>  
302 - <h1>智能舆情分析报告</h1>  
303 - <p class="subtitle">分析对象:武汉大学</p>  
304 - </div>  
305 - <div class="controls">  
306 - <button id="theme-toggle">切换暗色模式</button>  
307 - <button onclick="window.print()">打印 / 导出PDF</button>  
308 - </div>  
309 - </header>  
310 -  
311 - <div class="container">  
312 - <nav class="sidebar">  
313 - <h2>报告目录</h2>  
314 - <ul>  
315 - <li><a href="#overview">1.0 舆情概览</a></li>  
316 - <li><a href="#trends">2.0 关键数据趋势</a></li>  
317 - <li><a href="#timeline">3.0 舆情动态时间轴</a></li>  
318 - <li><a href="#hot-topics">4.0 热点话题追踪</a></li>  
319 - <li><a href="#channels">5.0 重点渠道表现</a></li>  
320 - <li><a href="#risks">6.0 负面与风险监测</a></li>  
321 - <li><a href="#summary">7.0 简报与关注点</a></li>  
322 - <li><a href="#appendix">8.0 数据附录</a></li>  
323 - </ul>  
324 - </nav>  
325 -  
326 - <main class="main-content">  
327 - <section id="overview">  
328 - <h2>1.0 本期舆情概览</h2>  
329 - <div class="card">  
330 - <h3>1.1 核心数据看板</h3>  
331 - <div class="grid-container">  
332 - <div class="stat-card">  
333 - <div class="value">210万+</div>  
334 - <div class="label">总声量</div>  
335 - </div>  
336 - <div class="stat-card">  
337 - <div class="value">3.8亿+</div>  
338 - <div class="label">总阅读量</div>  
339 - </div>  
340 - <div class="stat-card">  
341 - <div class="value">420万+</div>  
342 - <div class="label">总互动量</div>  
343 - </div>  
344 - <div class="stat-card">  
345 - <div class="value">48.2%</div>  
346 - <div class="label">负面情感占比</div>  
347 - </div>  
348 - </div>  
349 - </div>  
350 - <div class="card">  
351 - <h3>1.2 本期舆情热度 TOP 3</h3>  
352 - <div class="grid-container">  
353 - <div class="top-topic-card negative">  
354 - <h4>1. 杨景媛学术不端及图书馆诬告案</h4>  
355 - <p>本期最核心负面事件。硕士论文学术造假与此前诬告案败诉联动,引爆全网对高校学术诚信、审核机制及危机公关的拷问,对武大声誉造成严重冲击。</p>  
356 - </div>  
357 - <div class="top-topic-card">  
358 - <h4>2. 校园文化与社会热议</h4>  
359 - <p>以“樱花季”为代表的校园文化持续引发关注,但“抢票难”、“商业化”等争议并存。校史讨论呈现“玩梗”与严肃考据并存的年轻化特征。</p>  
360 - </div>  
361 - <div class="top-topic-card negative">  
362 - <h4>3. 学科优势与职业焦虑</h4>  
363 - <p>“测绘遥感世界第一”等学术光环带来巨大自豪感,但相关专业毕业生对薪资、就业压力的“吐槽”形成强烈反差,反映了理想与现实的碰撞。</p>  
364 - </div>  
365 - </div>  
366 - </div>  
367 - <div class="card">  
368 - <h3>1.3 重点预警</h3>  
369 - <p><strong>学术诚信危机持续发酵:</strong>杨景媛事件已由个人学术不端问题,演变为对武汉大学研究生培养、论文审查、导师责任及后续处理公正性的系统性质疑。校方初期反应迟缓,进一步加剧了公众的不信任感。事件后续处理结果将直接影响学校公信力,风险等级极高。</p>  
370 - </div>  
371 - </section>  
372 -  
373 - <section id="trends">  
374 - <h2>2.0 关键数据趋势</h2>  
375 - <div class="grid-container">  
376 - <div class="card">  
377 - <h3>2.1 声量走势</h3>  
378 - <canvas id="volume-chart"></canvas>  
379 - </div>  
380 - <div class="card">  
381 - <h3>2.2 情感趋势</h3>  
382 - <canvas id="sentiment-chart"></canvas>  
383 - </div>  
384 - </div>  
385 - </section>  
386 -  
387 - <section id="timeline">  
388 - <h2>3.0 本周期舆情动态时间轴</h2>  
389 - <div class="card">  
390 - <div class="timeline">  
391 - <div class="timeline-item">  
392 - <div class="time">2025年7月中下旬</div>  
393 - <p>杨景媛因长期诬告肖姓学弟性骚扰败诉后,其硕士学位论文被曝光存在严重学术造假问题,舆论开始发酵。</p>  
394 - </div>  
395 - <div class="timeline-item">  
396 - <div class="time">2025年7月31日</div>  
397 - <p>香港浸会大学就杨景媛录取资格发出道德核查函,启动独立审查程序,事件关注度升级。</p>  
398 - </div>  
399 - <div class="timeline-item">  
400 - <div class="time">2025年8月1日</div>  
401 - <p>央媒关注报道后,武汉大学宣布成立工作专班,对杨景媛学术不端问题进行全面调查复核,声量达到顶峰。</p>  
402 - </div>  
403 - <div class="timeline-item">  
404 - <div class="time">2025年8月6日</div>  
405 - <p>网络流传“港浸大撤销杨景媛录取资格”消息,后被证实为谣言,官方表示仍在按程序处理,引发对处理效率的进一步讨论。</p>  
406 - </div>  
407 - </div>  
408 - </div>  
409 - </section>  
410 -  
411 - <section id="hot-topics">  
412 - <h2>4.0 热点话题追踪</h2>  
413 - <div class="card collapsible">  
414 - <header><h4>4.1 热点事件:杨景媛学术不端与图书馆诬告案</h4></header>  
415 - <div class="content">  
416 - <p><strong>事件概述:</strong>本事件由两部分交织而成:一是肖同学在图书馆被杨景媛诬告性骚扰,虽法律上证明清白,但已遭受学校处分和巨大身心创伤;二是杨景媛的硕士学位论文被揭发存在虚构法律、伪造数据、严重抄袭等多项学术不端行为。</p>  
417 - <p><strong>舆论焦点:</strong></p>  
418 - <ul>  
419 - <li><strong>学术诚信崩溃:</strong>公众对论文中“1049年”等低级错误感到震惊,质疑武汉大学的论文审核、答辩流程形同虚设。</li>  
420 - <li><strong>程序正义缺失:</strong>学校在诬告案中“先处理为敬”的做法,与查处学术不端时的“迟缓”形成鲜明对比,引发对高校管理公平性的强烈质疑。</li>  
421 - <li><strong>校方应对失当:</strong>从初期沉默到央媒介入后才成立专班,校方被批评为“反应滞后”、“缺乏担当”,损害了公信力。</li>  
422 - <li><strong>多方联动影响:</strong>事件牵涉武汉大学、香港浸会大学两所高校,处理结果备受关注,成为检验高校对学术不端“零容忍”态度的试金石。</li>  
423 - </ul>  
424 - </div>  
425 - </div>  
426 - <div class="card collapsible">  
427 - <header><h4>4.2 新增话题:学科荣光与现实焦虑的碰撞</h4></header>  
428 - <div class="content">  
429 - <p>本周期内,除危机事件外,“武大到底有多强”与“武大毕业生挣多少钱”的讨论也形成热点,呈现出一种“骄傲与焦虑并存”的复杂  
430 -</body>  
431 -</html>