戒酒的李白

Fix Bug.

Too many changes to show.

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

  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>
  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: #f8f9fa;
  22 + --text-color: #212529;
  23 + --card-bg: #ffffff;
  24 + --border-color: #dee2e6;
  25 + --primary-color: #0056b3;
  26 + --secondary-color: #6c757d;
  27 + --accent-color: #28a745;
  28 + --danger-color: #dc3545;
  29 + --warning-color: #ffc107;
  30 + --info-color: #17a2b8;
  31 + --sidebar-bg: #343a40;
  32 + --sidebar-text: #f8f9fa;
  33 + --sidebar-hover: #495057;
  34 + --shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
  35 + }
  36 +
  37 + body.dark-mode {
  38 + --bg-color: #121212;
  39 + --text-color: #e0e0e0;
  40 + --card-bg: #1e1e1e;
  41 + --border-color: #444;
  42 + --primary-color: #4a90e2;
  43 + --secondary-color: #9e9e9e;
  44 + --sidebar-bg: #1e1e1e;
  45 + --sidebar-text: #e0e0e0;
  46 + --sidebar-hover: #333;
  47 + --shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
  48 + }
  49 +
  50 + * {
  51 + box-sizing: border-box;
  52 + margin: 0;
  53 + padding: 0;
  54 + }
  55 +
  56 + body {
  57 + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  58 + background-color: var(--bg-color);
  59 + color: var(--text-color);
  60 + line-height: 1.6;
  61 + display: flex;
  62 + transition: background-color 0.3s, color 0.3s;
  63 + }
  64 +
  65 + #sidebar {
  66 + width: 260px;
  67 + background-color: var(--sidebar-bg);
  68 + color: var(--sidebar-text);
  69 + height: 100vh;
  70 + position: fixed;
  71 + top: 0;
  72 + left: 0;
  73 + padding: 20px;
  74 + display: flex;
  75 + flex-direction: column;
  76 + transition: background-color 0.3s;
  77 + }
  78 +
  79 + #sidebar h1 {
  80 + font-size: 1.5rem;
  81 + margin-bottom: 10px;
  82 + color: var(--primary-color);
  83 + border-bottom: 2px solid var(--primary-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(--sidebar-text);
  94 + text-decoration: none;
  95 + padding: 10px 15px;
  96 + border-radius: 5px;
  97 + margin-bottom: 5px;
  98 + transition: background-color 0.2s;
  99 + font-size: 0.95rem;
  100 + }
  101 +
  102 + #sidebar nav li a:hover, #sidebar nav li a.active {
  103 + background-color: var(--sidebar-hover);
  104 + }
  105 +
  106 + .sidebar-footer {
  107 + margin-top: auto;
  108 + }
  109 +
  110 + .theme-switcher, .report-actions button {
  111 + width: 100%;
  112 + padding: 10px;
  113 + border: none;
  114 + border-radius: 5px;
  115 + cursor: pointer;
  116 + background-color: var(--sidebar-hover);
  117 + color: var(--sidebar-text);
  118 + text-align: left;
  119 + margin-top: 10px;
  120 + }
  121 +
  122 + .theme-switcher:hover, .report-actions button:hover {
  123 + background-color: var(--primary-color);
  124 + }
  125 +
  126 + #main-content {
  127 + margin-left: 260px;
  128 + padding: 40px;
  129 + width: calc(100% - 260px);
  130 + }
  131 +
  132 + header {
  133 + border-bottom: 1px solid var(--border-color);
  134 + padding-bottom: 20px;
  135 + margin-bottom: 30px;
  136 + }
  137 +
  138 + header h1 {
  139 + font-size: 2.5rem;
  140 + color: var(--primary-color);
  141 + }
  142 +
  143 + header p {
  144 + font-size: 1.1rem;
  145 + color: var(--secondary-color);
  146 + max-width: 800px;
  147 + }
  148 +
  149 + .report-section {
  150 + background-color: var(--card-bg);
  151 + border: 1px solid var(--border-color);
  152 + border-radius: 8px;
  153 + padding: 25px;
  154 + margin-bottom: 30px;
  155 + box-shadow: var(--shadow);
  156 + transition: background-color 0.3s, border-color 0.3s;
  157 + }
  158 +
  159 + .report-section h2 {
  160 + font-size: 1.8rem;
  161 + color: var(--primary-color);
  162 + margin-bottom: 20px;
  163 + padding-bottom: 10px;
  164 + border-bottom: 2px solid var(--primary-color);
  165 + }
  166 +
  167 + details {
  168 + border: 1px solid var(--border-color);
  169 + border-radius: 5px;
  170 + margin-bottom: 15px;
  171 + overflow: hidden;
  172 + }
  173 +
  174 + summary {
  175 + padding: 15px;
  176 + background-color: var(--bg-color);
  177 + cursor: pointer;
  178 + font-weight: bold;
  179 + font-size: 1.1rem;
  180 + list-style: none;
  181 + position: relative;
  182 + }
  183 + summary::-webkit-details-marker { display: none; }
  184 + summary::before {
  185 + content: '▶';
  186 + position: absolute;
  187 + left: 15px;
  188 + top: 50%;
  189 + transform: translateY(-50%) rotate(0deg);
  190 + transition: transform 0.2s;
  191 + }
  192 + details[open] > summary::before {
  193 + transform: translateY(-50%) rotate(90deg);
  194 + }
  195 + details summary {
  196 + padding-left: 40px;
  197 + }
  198 +
  199 + .details-content {
  200 + padding: 20px;
  201 + }
  202 +
  203 + .dashboard {
  204 + display: grid;
  205 + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  206 + gap: 20px;
  207 + }
  208 +
  209 + .dashboard-card {
  210 + background-color: var(--bg-color);
  211 + padding: 20px;
  212 + border-radius: 8px;
  213 + text-align: center;
  214 + border: 1px solid var(--border-color);
  215 + }
  216 +
  217 + .dashboard-card h3 {
  218 + font-size: 1rem;
  219 + color: var(--secondary-color);
  220 + margin-bottom: 10px;
  221 + }
  222 +
  223 + .dashboard-card .value {
  224 + font-size: 2.2rem;
  225 + font-weight: bold;
  226 + color: var(--primary-color);
  227 + }
  228 +
  229 + .dashboard-card .sub-value {
  230 + font-size: 0.9rem;
  231 + color: var(--secondary-color);
  232 + }
  233 +
  234 + .chart-container {
  235 + position: relative;
  236 + height: 400px;
  237 + width: 100%;
  238 + margin-top: 20px;
  239 + }
  240 +
  241 + .timeline {
  242 + position: relative;
  243 + padding-left: 40px;
  244 + border-left: 3px solid var(--primary-color);
  245 + }
  246 +
  247 + .timeline-item {
  248 + position: relative;
  249 + margin-bottom: 30px;
  250 + }
  251 +
  252 + .timeline-item::before {
  253 + content: '';
  254 + position: absolute;
  255 + left: -48px;
  256 + top: 5px;
  257 + width: 14px;
  258 + height: 14px;
  259 + border-radius: 50%;
  260 + background-color: var(--primary-color);
  261 + border: 3px solid var(--bg-color);
  262 + }
  263 +
  264 + .timeline-item .time {
  265 + font-weight: bold;
  266 + color: var(--secondary-color);
  267 + margin-bottom: 5px;
  268 + }
  269 +
  270 + .timeline-item .content {
  271 + font-size: 1rem;
  272 + }
  273 +
  274 + .tag {
  275 + display: inline-block;
  276 + padding: 3px 8px;
  277 + border-radius: 4px;
  278 + font-size: 0.8rem;
  279 + font-weight: bold;
  280 + margin-right: 5px;
  281 + }
  282 +
  283 + .tag-danger { background-color: var(--danger-color); color: white; }
  284 + .tag-warning { background-color: var(--warning-color); color: var(--text-color); }
  285 + .tag-info { background-color: var(--info-color); color: white; }
  286 + .tag-success { background-color: var(--accent-color); color: white; }
  287 +
  288 + table {
  289 + width: 100%;
  290 + border-collapse: collapse;
  291 + margin-top: 15px;
  292 + }
  293 +
  294 + th, td {
  295 + text-align: left;
  296 + padding: 12px;
  297 + border-bottom: 1px solid var(--border-color);
  298 + }
  299 +
  300 + th {
  301 + background-color: var(--bg-color);
  302 + }
  303 +
  304 + @media (max-width: 992px) {
  305 + #sidebar {
  306 + left: -260px;
  307 + z-index: 1000;
  308 + }
  309 + #main-content {
  310 + margin-left: 0;
  311 + width: 100%;
  312 + padding: 20px;
  313 + }
  314 + /* Add a toggle button for mobile */
  315 + .sidebar-toggle {
  316 + display: block;
  317 + position: fixed;
  318 + top: 15px;
  319 + left: 15px;
  320 + z-index: 1001;
  321 + background: var(--sidebar-bg);
  322 + color: white;
  323 + border: none;
  324 + padding: 10px 15px;
  325 + border-radius: 5px;
  326 + cursor: pointer;
  327 + }
  328 + }
  329 +
  330 + @media (min-width: 993px) {
  331 + .sidebar-toggle { display: none; }
  332 + }
  333 +
  334 + @media print {
  335 + #sidebar, .sidebar-toggle, .report-actions, details > summary {
  336 + display: none;
  337 + }
  338 + #main-content {
  339 + margin-left: 0;
  340 + width: 100%;
  341 + padding: 0;
  342 + }
  343 + .report-section {
  344 + box-shadow: none;
  345 + border: 1px solid #ccc;
  346 + page-break-inside: avoid;
  347 + }
  348 + details {
  349 + border: none;
  350 + }
  351 + details[open] {
  352 + display: block;
  353 + }
  354 + .details-content {
  355 + padding: 0;
  356 + }
  357 + header h1 { font-size: 24pt; }
  358 + h2 { font-size: 18pt; }
  359 + }
  360 + </style>
  361 +</head>
  362 +<body>
  363 + <button class="sidebar-toggle" id="sidebar-toggle"></button>
  364 +
  365 + <aside id="sidebar">
  366 + <h1>舆情报告</h1>
  367 + <nav id="toc">
  368 + <ul>
  369 + <li><a href="#s1">1.0 舆情概览</a></li>
  370 + <li><a href="#s2">2.0 关键数据趋势</a></li>
  371 + <li><a href="#s3">3.0 舆情动态时间轴</a></li>
  372 + <li><a href="#s4">4.0 热点话题追踪</a></li>
  373 + <li><a href="#s5">5.0 重点渠道表现</a></li>
  374 + <li><a href="#s6">6.0 负面与风险监测</a></li>
  375 + <li><a href="#s7">7.0 简报与关注点</a></li>
  376 + <li><a href="#s8">8.0 数据附录</a></li>
  377 + </ul>
  378 + </nav>
  379 + <div class="sidebar-footer">
  380 + <div class="report-actions">
  381 + <button id="print-btn">打印报告</button>
  382 + <button id="pdf-btn">导出为PDF</button>
  383 + </div>
  384 + <button class="theme-switcher" id="theme-switcher">切换暗色模式</button>
  385 + </div>
  386 + </aside>
  387 +
  388 + <main id="main-content">
  389 + <header>
  390 + <h1>武汉大学智能舆情分析报告</h1>
  391 + <p>本报告整合了查询引擎、媒体引擎及洞察引擎的分析结果,结合论坛监控数据,对武汉大学近期的舆情态势进行了全面分析。报告聚焦于“杨景媛学术不端及图书馆诬告案”等核心热点事件,同时涵盖了学校历史声誉、学科实力与学生现实焦虑等多个维度。报告旨在揭示舆情动态,评估声誉影响,并为未来的舆情管理提供数据支持和策略建议。</p>
  392 + </header>
  393 +
  394 + <section id="s1" class="report-section">
  395 + <h2>1.0 本期舆情概览</h2>
  396 + <details open>
  397 + <summary>1.1 核心数据看板</summary>
  398 + <div class="details-content dashboard">
  399 + <div class="dashboard-card">
  400 + <h3>总声量</h3>
  401 + <div class="value">~2.1M</div>
  402 + <div class="sub-value">条有效文本</div>
  403 + </div>
  404 + <div class="dashboard-card">
  405 + <h3>总阅读量</h3>
  406 + <div class="value">~3.8亿</div>
  407 + <div class="sub-value"></div>
  408 + </div>
  409 + <div class="dashboard-card">
  410 + <h3>总互动量</h3>
  411 + <div class="value">~4.2M</div>
  412 + <div class="sub-value"></div>
  413 + </div>
  414 + <div class="dashboard-card">
  415 + <h3>热点平台</h3>
  416 + <div class="value">微博</div>
  417 + <div class="sub-value">知乎 / B站</div>
  418 + </div>
  419 + </div>
  420 + </details>
  421 + <details>
  422 + <summary>1.2 本期舆情热度 TOP 3</summary>
  423 + <div class="details-content">
  424 + <ol>
  425 + <li><b>学术不端与诬告案争议:</b>围绕杨景媛硕士论文学术造假及图书馆诬告案的讨论,引发对高校学术诚信、审核机制及危机应对的强烈质疑。</li>
  426 + <li><b>学科声誉与就业现实反差:</b>“世界第一”的遥感等顶尖学科与毕业生“月薪7k”的现实薪资形成鲜明对比,引发学生群体对职业前景的广泛焦虑与讨论。</li>
  427 + <li><b>校园文化与历史传承讨论:</b>从“樱花季”的浪漫与拥挤,到对校史起点的趣味争论,展现了武大作为“共享青春现场”的骄傲与烟火气。</li>
  428 + </ol>
  429 + </div>
  430 + </details>
  431 + <details>
  432 + <summary>1.3 重点预警</summary>
  433 + <div class="details-content">
  434 + <ul>
  435 + <li><span class="tag tag-danger">高风险</span> <b>学术不端事件处理悬而未决:</b>武汉大学及香港浸会大学对杨景媛事件的最终处理结果尚未公布,舆论持续关注。任何拖延或被认为“高高举起,轻轻放下”的处理方式都将进一步重创学校公信力。</li>
  436 + <li><span class="tag tag-warning">中风险</span> <b>学生就业焦虑情绪发酵:</b>关于顶尖专业毕业生薪资待遇不及预期的讨论正在蔓延,可能影响未来优秀生源的报考意愿及在校生的学习心态。</li>
  437 + </ul>
  438 + </div>
  439 + </details>
  440 + </section>
  441 +
  442 + <section id="s2" class="report-section">
  443 + <h2>2.0 关键数据趋势</h2>
  444 + <details open>
  445 + <summary>2.1 声量走势</summary>
  446 + <div class="details-content">
  447 + <div class="chart-container">
  448 + <canvas id="volume-trend-chart"></canvas>
  449 + </div>
  450 + <p><b>分析:</b>本周期内,舆情声量在7月底至8月初达到顶峰,主要由“杨景媛学术不端事件”经由主流媒体报道后引爆。此后声量有所回落,但仍维持在较高水平,表明公众对此事件的后续处理保持高度关注。</p>
  451 + </div>
  452 + </details>
  453 + <details open>
  454 + <summary>2.2 情感趋势</summary>
  455 + <div class="details-content">
  456 + <div class="chart-container" style="height: 350px;">
  457 + <canvas id="sentiment-chart"></canvas>
  458 + </div>
  459 + <p><b>分析:</b>整体情感分布复杂多元。<b>正面情绪 (41%)</b> 主要源于对学校百年历史、优美环境和学术成就的自豪与怀旧。<b>负面情绪 (35%)</b> 集中于对近期学术不端事件的批评、对校方应对迟缓的失望以及对毕业生就业压力的焦虑。<b>中性/混合情绪 (24%)</b> 则体现在对樱花季“又爱又恨”、对校史的趣味吐槽等场景。</p>
  460 + </div>
  461 + </details>
  462 + </section>
  463 +
  464 + <section id="s3" class="report-section">
  465 + <h2>3.0 本周期舆情动态时间轴</h2>
  466 + <div class="timeline">
  467 + <div class="timeline-item">
  468 + <div class="time">2025年7月</div>
  469 + <div class="content">
  470 + <span class="tag tag-danger">事件爆发</span>
  471 + 武汉大学硕士毕业生杨景媛因诬告肖姓学弟败诉后,其硕士学位论文被曝存在严重学术造假问题,引发网络初步关注。
  472 + </div>
  473 + </div>
  474 + <div class="timeline-item">
  475 + <div class="time">2025年7月31日</div>
  476 + <div class="content">
  477 + <span class="tag tag-warning">外部介入</span>
  478 + 香港浸会大学向武汉大学发出道德核查函,并启动对杨景媛的独立审查程序。
  479 + </div>
  480 + </div>
  481 + <div class="timeline-item">
  482 + <div class="time">2025年8月1日</div>
  483 + <div class="content">
  484 + <span class="tag tag-danger">舆论升级</span>
  485 + 央媒关注并报道该事件,武汉大学随后宣布成立工作专班进行全面调查复核,舆情热度达到顶峰。
  486 + </div>
  487 + </div>
  488 + <div class="timeline-item">
  489 + <div class="time">2025年8月6日</div>
  490 + <div class="content">
  491 + <span class="tag tag-info">信息澄清</span>
  492 + 网络流传“香港浸会大学已撤销杨景媛录取资格”的消息,后被证实为谣言,校方表示仍在按程序处理。
  493 + </div>
  494 + </div>
  495 + <div class="timeline-item">
  496 + <div class="time">本周期内</div>
  497 + <div class="content">
  498 + <span class="tag tag-success">正面舆情</span>
  499 + 关于武大历史、杰出校友(雷军、易中天等)、校园风光(樱花、老建筑)的讨论持续存在,构成了舆情中的正面基调。
  500 + </div>
  501 + </div>
  502 + </div>
  503 + </section>
  504 +
  505 + <section id="s4" class="report-section">
  506 +
  507 +</body>
  508 +</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"></script>
  19 + <style>
  20 + @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');
  21 +
  22 + :root {
  23 + --bg-color: #f4f7fa;
  24 + --bg-secondary-color: #ffffff;
  25 + --text-color: #333;
  26 + --text-secondary-color: #666;
  27 + --border-color: #e0e6ed;
  28 + --primary-color: #1a5c9c; /* 武大蓝 */
  29 + --accent-color: #d1a047;
  30 + --positive-color: #28a745;
  31 + --negative-color: #dc3545;
  32 + --neutral-color: #ffc107;
  33 + --shadow-color: rgba(0, 0, 0, 0.05);
  34 + }
  35 +
  36 + body.dark-mode {
  37 + --bg-color: #121212;
  38 + --bg-secondary-color: #1e1e1e;
  39 + --text-color: #e0e0e0;
  40 + --text-secondary-color: #a0a0a0;
  41 + --border-color: #333;
  42 + --shadow-color: rgba(0, 0, 0, 0.2);
  43 + }
  44 +
  45 + * {
  46 + box-sizing: border-box;
  47 + margin: 0;
  48 + padding: 0;
  49 + }
  50 +
  51 + body {
  52 + font-family: 'Noto Sans SC', sans-serif;
  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 + }
  58 +
  59 + .container {
  60 + display: flex;
  61 + max-width: 1600px;
  62 + margin: 0 auto;
  63 + }
  64 +
  65 + .sidebar {
  66 + width: 260px;
  67 + background-color: var(--bg-secondary-color);
  68 + border-right: 1px solid var(--border-color);
  69 + position: sticky;
  70 + top: 0;
  71 + height: 100vh;
  72 + overflow-y: auto;
  73 + padding: 20px;
  74 + transition: background-color 0.3s, border-color 0.3s;
  75 + }
  76 +
  77 + .sidebar-header {
  78 + text-align: center;
  79 + margin-bottom: 30px;
  80 + }
  81 + .sidebar-header h2 {
  82 + font-size: 1.5rem;
  83 + color: var(--primary-color);
  84 + }
  85 +
  86 + .sidebar nav ul {
  87 + list-style: none;
  88 + }
  89 +
  90 + .sidebar nav li a {
  91 + display: block;
  92 + padding: 12px 15px;
  93 + color: var(--text-secondary-color);
  94 + text-decoration: none;
  95 + border-radius: 6px;
  96 + margin-bottom: 5px;
  97 + font-weight: 500;
  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(--primary-color);
  103 + color: #fff;
  104 + }
  105 +
  106 + main {
  107 + flex: 1;
  108 + padding: 20px 40px;
  109 + }
  110 +
  111 + header {
  112 + display: flex;
  113 + justify-content: space-between;
  114 + align-items: center;
  115 + padding-bottom: 20px;
  116 + border-bottom: 1px solid var(--border-color);
  117 + margin-bottom: 30px;
  118 + }
  119 +
  120 + header h1 {
  121 + font-size: 2rem;
  122 + font-weight: 700;
  123 + }
  124 + header .report-meta {
  125 + font-size: 0.9rem;
  126 + color: var(--text-secondary-color);
  127 + }
  128 +
  129 + .controls button {
  130 + background: none;
  131 + border: 1px solid var(--border-color);
  132 + color: var(--text-secondary-color);
  133 + padding: 8px 12px;
  134 + border-radius: 6px;
  135 + cursor: pointer;
  136 + margin-left: 10px;
  137 + transition: background-color 0.2s, color 0.2s, border-color 0.2s;
  138 + }
  139 +
  140 + .controls button:hover {
  141 + background-color: var(--primary-color);
  142 + color: #fff;
  143 + border-color: var(--primary-color);
  144 + }
  145 +
  146 + .card {
  147 + background-color: var(--bg-secondary-color);
  148 + border: 1px solid var(--border-color);
  149 + border-radius: 8px;
  150 + padding: 25px;
  151 + margin-bottom: 30px;
  152 + box-shadow: 0 4px 12px var(--shadow-color);
  153 + transition: background-color 0.3s, border-color 0.3s;
  154 + }
  155 +
  156 + .card-header {
  157 + display: flex;
  158 + justify-content: space-between;
  159 + align-items: center;
  160 + margin-bottom: 20px;
  161 + cursor: pointer;
  162 + }
  163 +
  164 + .card-header h2 {
  165 + font-size: 1.5rem;
  166 + color: var(--primary-color);
  167 + font-weight: 600;
  168 + }
  169 +
  170 + .card-header .toggle-icon {
  171 + font-weight: bold;
  172 + font-size: 1.5rem;
  173 + transition: transform 0.3s ease;
  174 + }
  175 +
  176 + .card.collapsed .card-content {
  177 + max-height: 0;
  178 + overflow: hidden;
  179 + padding-top: 0;
  180 + margin-top: 0;
  181 + }
  182 + .card.collapsed .card-header .toggle-icon {
  183 + transform: rotate(-90deg);
  184 + }
  185 +
  186 + .card-content {
  187 + max-height: 5000px; /* Large value */
  188 + transition: max-height 0.7s ease-in-out, margin-top 0.3s, padding-top 0.3s;
  189 + }
  190 +
  191 + .grid-container {
  192 + display: grid;
  193 + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  194 + gap: 20px;
  195 + }
  196 +
  197 + .stat-box {
  198 + background-color: var(--bg-color);
  199 + padding: 20px;
  200 + border-radius: 8px;
  201 + border-left: 5px solid;
  202 + }
  203 +
  204 + .stat-box .value {
  205 + font-size: 2rem;
  206 + font-weight: 700;
  207 + color: var(--text-color);
  208 + }
  209 +
  210 + .stat-box .label {
  211 + font-size: 0.9rem;
  212 + color: var(--text-secondary-color);
  213 + }
  214 +
  215 + .stat-box.total {
  216 + border-color: var(--primary-color);
  217 + }
  218 + .stat-box.reads {
  219 + border-color: var(--accent-color);
  220 + }
  221 + .stat-box.interactions {
  222 + border-color: var(--positive-color);
  223 + }
  224 + .stat-box.negative {
  225 + border-color: var(--negative-color);
  226 + }
  227 +
  228 + .chart-container {
  229 + position: relative;
  230 + height: 350px;
  231 + width: 100%;
  232 + }
  233 +
  234 + .timeline {
  235 + position: relative;
  236 + padding: 20px 0;
  237 + }
  238 + .timeline::before {
  239 + content: '';
  240 + position: absolute;
  241 + left: 20px;
  242 + top: 0;
  243 + bottom: 0;
  244 + width: 2px;
  245 + background-color: var(--border-color);
  246 + }
  247 + .timeline-item {
  248 + position: relative;
  249 + margin-left: 60px;
  250 + margin-bottom: 30px;
  251 + }
  252 + .timeline-item::before {
  253 + content: '';
  254 + position: absolute;
  255 + left: -49px;
  256 + top: 5px;
  257 + width: 18px;
  258 + height: 18px;
  259 + border-radius: 50%;
  260 + background-color: var(--bg-secondary-color);
  261 + border: 4px solid var(--primary-color);
  262 + }
  263 + .timeline-item.alert::before {
  264 + border-color: var(--negative-color);
  265 + }
  266 + .timeline-time {
  267 + font-weight: bold;
  268 + color: var(--primary-color);
  269 + display: block;
  270 + margin-bottom: 5px;
  271 + }
  272 + .timeline-content {
  273 + background-color: var(--bg-color);
  274 + padding: 15px;
  275 + border-radius: 6px;
  276 + }
  277 +
  278 + ul.custom-list {
  279 + list-style: none;
  280 + padding-left: 20px;
  281 + }
  282 +
  283 + ul.custom-list li {
  284 + position: relative;
  285 + margin-bottom: 10px;
  286 + }
  287 +
  288 + ul.custom-list li::before {
  289 + content: '•';
  290 + position: absolute;
  291 + left: -20px;
  292 + color: var(--primary-color);
  293 + font-weight: bold;
  294 + }
  295 +
  296 + .tag {
  297 + display: inline-block;
  298 + padding: 3px 10px;
  299 + border-radius: 12px;
  300 + font-size: 0.8rem;
  301 + font-weight: 500;
  302 + }
  303 + .tag.positive { background-color: var(--positive-color); color: #fff; }
  304 + .tag.negative { background-color: var(--negative-color); color: #fff; }
  305 + .tag.neutral { background-color: var(--neutral-color); color: #333; }
  306 + .tag.pride { background-color: #4a90e2; color: #fff; }
  307 + .tag.anxiety { background-color: #f5a623; color: #fff; }
  308 + .tag.romance { background-color: #e83e8c; color: #fff; }
  309 +
  310 + table {
  311 + width: 100%;
  312 + border-collapse: collapse;
  313 + margin-top: 15px;
  314 + }
  315 + th, td {
  316 + padding: 12px;
  317 + text-align: left;
  318 + border-bottom: 1px solid var(--border-color);
  319 + }
  320 + th {
  321 + background-color: var(--bg-color);
  322 + font-weight: 600;
  323 + }
  324 +
  325 + @media (max-width: 1200px) {
  326 + .container {
  327 + flex-direction: column;
  328 + }
  329 + .sidebar {
  330 + width: 100%;
  331 + height: auto;
  332 + position: static;
  333 + border-right: none;
  334 + border-bottom: 1px solid var(--border-color);
  335 + }
  336 + main { padding: 20px; }
  337 + }
  338 +
  339 + @media (max-width: 768px) {
  340 + header {
  341 + flex-direction: column;
  342 + align-items: flex-start;
  343 + }
  344 + header h1 { font-size: 1.6rem; margin-bottom: 10px; }
  345 + .controls { width: 100%; text-align: right;}
  346 + .grid-container {
  347 + grid-template-columns: 1fr;
  348 + }
  349 + }
  350 +
  351 + @media print {
  352 + body {
  353 + --bg-color: #ffffff !important;
  354 + --bg-secondary-color: #ffffff !important;
  355 + --text-color: #000000 !important;
  356 + --border-color: #dddddd !important;
  357 + --primary-color: #003366 !important;
  358 + }
  359 + .sidebar, .controls, .card-header .toggle-icon { display: none; }
  360 + main { padding: 0; }
  361 + .card { box-shadow: none; border: 1px solid #ddd; page-break-inside: avoid; }
  362 + .card.collapsed .card-content { max-height: 100% !important; }
  363 + a { text-decoration: none; color: inherit; }
  364 + }
  365 + </style>
  366 +</head>
  367 +<body>
  368 +
  369 + <div class="container">
  370 + <aside class="sidebar">
  371 + <div class="sidebar-header">
  372 + <h2>舆情分析报告</h2>
  373 + <p style="font-size:0.9em; color: var(--text-secondary-color);">武汉大学</p>
  374 + </div>
  375 + <nav>
  376 + <ul>
  377 + <li><a href="#overview" class="active">1.0 舆情概览</a></li>
  378 + <li><a href="#trends">2.0 关键数据趋势</a></li>
  379 + <li><a href="#timeline">3.0 舆情动态时间轴</a></li>
  380 + <li><a href="#hot-topics">4.0 热点话题追踪</a></li>
  381 + <li><a href="#channels">5.0 重点渠道表现</a></li>
  382 + <li><a href="#risks">6.0 负面与风险监测</a></li>
  383 + <li><a href="#summary">7.0 简报与关注点</a></li>
  384 + <li><a href="#appendix">8.0 数据附录</a></li>
  385 + </ul>
  386 + </nav>
  387 + </aside>
  388 +
  389 + <main>
  390 + <header>
  391 + <div>
  392 + <h1>智能舆情分析报告:武汉大学</h1>
  393 + <div class="report-meta">报告周期:2024-03-01 至 2025-08-26</div>
  394 + </div>
  395 + <div class="controls">
  396 + <button id="theme-toggle">🌙 切换模式</button>
  397 + <button onclick="window.print()">🖨️ 打印/导出</button>
  398 + </div>
  399 + </header>
  400 +
  401 + <!-- 1.0 舆情概览 -->
  402 + <section id="overview" class="card">
  403 + <div class="card-header collapser">
  404 + <h2>1.0 本期舆情概览</h2>
  405 + <span class="toggle-icon">-</span>
  406 + </div>
  407 + <div class="card-content">
  408 + <div class="grid-container" style="margin-bottom: 30px;">
  409 + <div class="stat-box total"><div class="value">≈ 210万</div><div class="label">相关信息总量</div></div>
  410 + <div class="stat-box reads"><div class="value">≈ 3.8亿</div><div class="label">总阅读量</div></div>
  411 + <div class="stat-box interactions"><div class="value">≈ 420万</div><div class="label">总互动量</div></div>
  412 + <div class="stat-box negative"><div class="value">24%</div><div class="label">负面情感占比</div></div>
  413 + </div>
  414 + <div class="grid-container">
  415 + <div>
  416 + <h3>本期舆情热度 TOP 3</h3>
  417 + <ul class="custom-list">
  418 + <li><span class="tag negative">高风险</span> 杨景媛学术不端及图书馆诬告案</li>
  419 + <li><span class="tag romance">热议</span> 樱花季预约与校园开放讨论</li>
  420 + <li><span class="tag anxiety">关注</span> 优势学科声誉与毕业生就业薪资反差</li>
  421 + </ul>
  422 + </div>
  423 + <div>
  424 + <h3>整体情感分布</h3>
  425 + <div class="chart-container" style="height: 200px;">
  426 + <canvas id="sentimentPieChart"></canvas>
  427 + </div>
  428 + </div>
  429 + </div>
  430 + </div>
  431 + </section>
  432 +
  433 + <!-- 2.0 关键数据趋势 -->
  434 + <section id="trends" class="card">
  435 + <div class="card-header collapser">
  436 + <h2>2.0 关键数据趋势</h2>
  437 + <span class="toggle-icon">-</span>
  438 + </div>
  439 + <div class="card-content">
  440 + <div class="grid-container">
  441 + <div>
  442 + <h3>声量走势</h3>
  443 + <div class="chart-container">
  444 + <canvas id="volumeLineChart"></canvas>
  445 + </div>
  446 + </div>
  447 + <div>
  448 + <h3>情感趋势</h3>
  449 + <div class="chart-container">
  450 + <canvas id="sentimentTrendLineChart"></canvas>
  451 + </div>
  452 + </div>
  453 + </div>
  454 + </div>
  455 + </section>
  456 +
  457 + <!-- 3.0 舆情动态时间轴 -->
  458 + <section id="timeline" class="card">
  459 + <div class="card-header collapser">
  460 + <h2>3.0 舆情动态时间轴</h2>
  461 + <span class="toggle-icon">-</span>
  462 + </div>
  463 + <div class="card-content">
  464 + <div class="timeline">
  465 + <div class="timeline-item">
  466 + <span class="timeline-time">2024年3月-4月</span>
  467 + <div class="timeline-content">
  468 + <strong>樱花季热议期:</strong>微博话题 #武大樱花预约# 阅读量超3.8亿,引发关于“抢票难”和校园开放度的广泛讨论,情感呈现“浪漫”与“焦虑”交织的两极化特征。
  469 + </div>
  470 + </div>
  471 + <div class="timeline-item alert">
  472 + <span class="timeline-time">2025年7月</span>
  473 + <div class="timeline-content">
  474 + <strong>学术不端事件发酵:</strong>硕士毕业生杨景媛在“图书馆诬告案”败诉后,其学位论文被曝严重学术造假,包括数据伪造、常识错误等,舆情开始迅速升温。
  475 + </div>
  476 + </div>
  477 + <div class="timeline-item alert">
  478 + <span class="timeline-time">2025年7月31日</span>
  479 + <div class="timeline-content">
  480 + <strong>外部机构介入:</strong>香港浸会大学就杨景媛录取资格发出道德核查函,启动独立审查程序,将事件关注度推向更高层次。
  481 + </div>
  482 + </div>
  483 + <div class="timeline-item alert">
  484 + <span class="timeline-time">2025年8月1日</span>
  485 + <div class="timeline-content">
  486 + <strong>官方首次回应:</strong>在央媒关注后,武汉大学宣布成立工作专班,对杨景媛学术不端问题进行全面调查复核。但因回应滞后,引发公众对校方处理效率的质疑。
  487 + </div>
  488 + </div>
  489 + <div class="timeline-item">
  490 + <span class="timeline-time">2025年8月6日</span>
  491 + <div class="timeline-content">
  492 + <strong>信息混乱与澄清:</strong>网络流传“港浸大撤销杨景媛录取资格”消息,后被证实为谣言,校方表示按程序处理,进一步加剧了公众对处理结果的关切与等待。
  493 + </div>
  494 + </div>
  495 + </div>
  496 + </div>
  497 + </section>
  498 +
  499 + <!-- 4.0 热点话题追踪 -->
  500 + <section id="hot-topics" class="card">
  501 + <div class="card-header collapser">
  502 + <h2>4.0 热点话题追踪</h2>
  503 + <span class="toggle-icon">-</span>
  504 + </div>
  505 + <div class="card-content">
  506 + <h3>4.1 核心热点:学术不端与“图书馆诬告案”复合型危机</h3>
  507 + <p>本周期内,舆情风暴的核心是围绕毕业生杨景媛的复合型事件。该事件融合了 <span class="tag negative">学术诚信</span><span class="tag negative">程序正义</span><span class="tag negative">师德师风</span><span class="tag negative">大学治理</span> 四大敏感议题,引发全网高度关注。主要舆情观点聚焦于:</p>
  508 + <ul class="custom-list">
  509 + <li><b>对学术不端“零容忍”的强烈呼吁:</b>公众对论文中出现的低级错误(如“1049年”)、数据造假等行为感到震惊,要求严肃处理,并质疑导师、答辩委员会的审查责任。</li>
  510 + <li><b>对高校管理机制的系统性质疑:</b>事件暴露了研究生培养、学位授予审核流程中可能存在的漏洞。校方在事发后反应迟缓,被批评为“拖延”和“被动应对”,损害了学校公信力。</li>
  511 + <li><b>对公平与正义的朴素追求:</b>受害者肖同学的遭遇(被诬告、受处分、失保研资格)与杨景媛一度的“顺利”形成鲜明对比,激起网民对高校学生奖惩机制公平性的强烈不满。</li>
  512 + </ul>
  513 + <h3 style="margin-top:20px;">4.2 新增关注点:学科声
  514 +</body>
  515 +</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 + <link rel="preconnect" href="https://fonts.googleapis.com">
  19 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  20 + <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
  21 + <style>
  22 + :root {
  23 + --primary-color: #1a73e8;
  24 + --secondary-color: #5f6368;
  25 + --background-color: #f8f9fa;
  26 + --card-background-color: #ffffff;
  27 + --text-color: #202124;
  28 + --border-color: #e0e0e0;
  29 + --shadow-color: rgba(0, 0, 0, 0.1);
  30 + --positive-color: #34a853;
  31 + --negative-color: #ea4335;
  32 + --neutral-color: #fbbc05;
  33 + --font-family: 'Noto Sans SC', sans-serif;
  34 + }
  35 +
  36 + .dark-mode {
  37 + --primary-color: #8ab4f8;
  38 + --secondary-color: #9aa0a6;
  39 + --background-color: #202124;
  40 + --card-background-color: #303134;
  41 + --text-color: #e8eaed;
  42 + --border-color: #5f6368;
  43 + --shadow-color: rgba(0, 0, 0, 0.3);
  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: 280px;
  69 + background-color: var(--card-background-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 + color: var(--primary-color);
  81 + margin-bottom: 20px;
  82 + font-size: 1.5rem;
  83 + border-bottom: 2px solid var(--primary-color);
  84 + padding-bottom: 10px;
  85 + }
  86 +
  87 + .sidebar ul {
  88 + list-style: none;
  89 + }
  90 +
  91 + .sidebar ul li a {
  92 + display: block;
  93 + color: var(--text-color);
  94 + text-decoration: none;
  95 + padding: 12px 15px;
  96 + border-radius: 8px;
  97 + margin-bottom: 5px;
  98 + font-weight: 500;
  99 + transition: background-color 0.2s, color 0.2s;
  100 + }
  101 +
  102 + .sidebar ul li a:hover, .sidebar ul li a.active {
  103 + background-color: var(--primary-color);
  104 + color: white;
  105 + }
  106 +
  107 + .main-content {
  108 + flex: 1;
  109 + padding: 30px 40px;
  110 + }
  111 +
  112 + header {
  113 + margin-bottom: 30px;
  114 + padding-bottom: 20px;
  115 + border-bottom: 1px solid var(--border-color);
  116 + display: flex;
  117 + justify-content: space-between;
  118 + align-items: center;
  119 + }
  120 +
  121 + header h1 {
  122 + font-size: 2.5rem;
  123 + color: var(--text-color);
  124 + font-weight: 700;
  125 + }
  126 +
  127 + .header-controls button {
  128 + background: var(--primary-color);
  129 + color: white;
  130 + border: none;
  131 + padding: 10px 15px;
  132 + border-radius: 8px;
  133 + cursor: pointer;
  134 + margin-left: 10px;
  135 + font-size: 14px;
  136 + transition: opacity 0.2s;
  137 + }
  138 +
  139 + .header-controls button:hover { opacity: 0.8; }
  140 +
  141 + .report-section {
  142 + margin-bottom: 40px;
  143 + background-color: var(--card-background-color);
  144 + padding: 25px;
  145 + border-radius: 12px;
  146 + box-shadow: 0 4px 12px var(--shadow-color);
  147 + transition: background-color 0.3s, box-shadow 0.3s;
  148 + }
  149 +
  150 + .section-header {
  151 + display: flex;
  152 + justify-content: space-between;
  153 + align-items: center;
  154 + cursor: pointer;
  155 + margin-bottom: 20px;
  156 + }
  157 +
  158 + .section-header h2 {
  159 + font-size: 1.8rem;
  160 + color: var(--primary-color);
  161 + font-weight: 500;
  162 + }
  163 +
  164 + .section-header .toggle-icon {
  165 + font-size: 1.5rem;
  166 + transition: transform 0.3s;
  167 + }
  168 +
  169 + .section-content {
  170 + max-height: 10000px; /* Large value for open state */
  171 + overflow: hidden;
  172 + transition: max-height 0.5s ease-in-out, padding 0.5s ease-in-out;
  173 + }
  174 +
  175 + .section-content.collapsed {
  176 + max-height: 0;
  177 + padding-top: 0;
  178 + padding-bottom: 0;
  179 + margin-bottom: -20px;
  180 + }
  181 +
  182 + .grid-container {
  183 + display: grid;
  184 + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  185 + gap: 20px;
  186 + }
  187 +
  188 + .kpi-card {
  189 + background-color: var(--background-color);
  190 + padding: 20px;
  191 + border-radius: 10px;
  192 + text-align: center;
  193 + border-left: 5px solid var(--primary-color);
  194 + }
  195 +
  196 + .kpi-card .value {
  197 + font-size: 2rem;
  198 + font-weight: 700;
  199 + color: var(--primary-color);
  200 + margin-bottom: 5px;
  201 + }
  202 +
  203 + .kpi-card .label {
  204 + font-size: 1rem;
  205 + color: var(--secondary-color);
  206 + }
  207 +
  208 + .top-topic-card {
  209 + background-color: var(--background-color);
  210 + padding: 20px;
  211 + border-radius: 10px;
  212 + }
  213 +
  214 + .top-topic-card h4 {
  215 + margin-bottom: 10px;
  216 + color: var(--primary-color);
  217 + }
  218 +
  219 + .alert-card {
  220 + background-color: #fff0f0;
  221 + color: #d93025;
  222 + padding: 20px;
  223 + border-radius: 10px;
  224 + border-left: 5px solid #d93025;
  225 + }
  226 + .dark-mode .alert-card {
  227 + background-color: #4d2a29;
  228 + color: #f8a9a4;
  229 + }
  230 +
  231 + .timeline {
  232 + position: relative;
  233 + padding-left: 30px;
  234 + }
  235 +
  236 + .timeline::before {
  237 + content: '';
  238 + position: absolute;
  239 + left: 10px;
  240 + top: 0;
  241 + bottom: 0;
  242 + width: 2px;
  243 + background-color: var(--primary-color);
  244 + }
  245 +
  246 + .timeline-item {
  247 + margin-bottom: 25px;
  248 + position: relative;
  249 + }
  250 +
  251 + .timeline-item::before {
  252 + content: '';
  253 + position: absolute;
  254 + left: -25px;
  255 + top: 5px;
  256 + width: 12px;
  257 + height: 12px;
  258 + border-radius: 50%;
  259 + background-color: var(--card-background-color);
  260 + border: 2px solid var(--primary-color);
  261 + }
  262 +
  263 + .timeline-item-date {
  264 + font-weight: 700;
  265 + color: var(--secondary-color);
  266 + margin-bottom: 5px;
  267 + }
  268 +
  269 + .topic-detail-card {
  270 + background-color: var(--background-color);
  271 + border-radius: 10px;
  272 + padding: 20px;
  273 + margin-bottom: 20px;
  274 + }
  275 + .topic-detail-card h4 { color: var(--primary-color); margin-bottom: 10px; }
  276 +
  277 + .channel-list li {
  278 + display: flex;
  279 + justify-content: space-between;
  280 + align-items: center;
  281 + padding: 8px 0;
  282 + border-bottom: 1px solid var(--border-color);
  283 + }
  284 + .channel-list li:last-child { border-bottom: none; }
  285 +
  286 + .negative-list li {
  287 + margin-bottom: 10px;
  288 + padding-left: 20px;
  289 + position: relative;
  290 + }
  291 +
  292 + .negative-list li::before {
  293 + content: '🔴';
  294 + position: absolute;
  295 + left: 0;
  296 + top: 0;
  297 + }
  298 +
  299 + .risk-list li {
  300 + margin-bottom: 10px;
  301 + padding-left: 20px;
  302 + position: relative;
  303 + }
  304 + .risk-list li::before {
  305 + content: '⚠️';
  306 + position: absolute;
  307 + left: 0;
  308 + top: 0;
  309 + }
  310 +
  311 + .forum-log-container {
  312 + background-color: var(--background-color);
  313 + border-radius: 10px;
  314 + padding: 20px;
  315 + max-height: 400px;
  316 + overflow-y: auto;
  317 + }
  318 + .forum-post {
  319 + border-bottom: 1px dashed var(--border-color);
  320 + padding: 15px 0;
  321 + margin-bottom: 10px;
  322 + }
  323 + .forum-post:last-child { border-bottom: none; }
  324 + .post-header { display: flex; align-items: center; margin-bottom: 8px; color: var(--secondary-color); font-size: 0.9em;}
  325 + .post-author { font-weight: bold; color: var(--primary-color); margin-right: 10px; }
  326 + .post-content { font-size: 1em; }
  327 + .post-tags { margin-top: 10px; }
  328 + .post-tags span { background-color: var(--primary-color); color: white; padding: 3px 8px; border-radius: 12px; font-size: 0.8em; margin-right: 5px; opacity: 0.8;}
  329 +
  330 + footer {
  331 + text-align: center;
  332 + padding: 20px;
  333 + margin-top: 20px;
  334 + color: var(--secondary-color);
  335 + font-size: 0.9em;
  336 + }
  337 +
  338 + @media (max-width: 1200px) {
  339 + .container { flex-direction: column; }
  340 + .sidebar { position: static; width: 100%; height: auto; border-right: none; border-bottom: 1px solid var(--border-color); }
  341 + .main-content { padding: 20px; }
  342 + }
  343 +
  344 + @media (max-width: 768px) {
  345 + header h1 { font-size: 1.8rem; }
  346 + .section-header h2 { font-size: 1.5rem; }
  347 + .main-content { padding: 15px; }
  348 + .grid-container { grid-template-columns: 1fr; }
  349 + }
  350 +
  351 + @media print {
  352 + .sidebar, .header-controls, footer, .section-header .toggle-icon {
  353 + display: none;
  354 + }
  355 + body, .main-content, .report-section {
  356 + box-shadow: none;
  357 + border: none;
  358 + padding: 0;
  359 + margin: 0;
  360 + }
  361 + .report-section { page-break-inside: avoid; margin-bottom: 20px; }
  362 + }
  363 +
  364 + </style>
  365 +</head>
  366 +<body>
  367 +
  368 + <div class="container">
  369 + <aside class="sidebar" id="sidebar">
  370 + <h2>导航目录</h2>
  371 + <nav>
  372 + <ul>
  373 + <li><a href="#overview" class="nav-link">1.0 舆情概览</a></li>
  374 + <li><a href="#trends" class="nav-link">2.0 关键数据趋势</a></li>
  375 + <li><a href="#timeline" class="nav-link">3.0 舆情动态时间轴</a></li>
  376 + <li><a href="#hot-topics" class="nav-link">4.0 热点话题追踪</a></li>
  377 + <li><a href="#channels" class="nav-link">5.0 重点渠道表现</a></li>
  378 + <li><a href="#risks" class="nav-link">6.0 负面与风险监测</a></li>
  379 + <li><a href="#forum" class="nav-link">7.0 论坛用户洞察</a></li>
  380 + <li><a href="#summary" class="nav-link">8.0 简报与关注点</a></li>
  381 + </ul>
  382 + </nav>
  383 + </aside>
  384 +
  385 + <main class="main-content">
  386 + <header>
  387 + <h1>智能舆情分析报告 <br><small style="font-size: 1.2rem; color: var(--secondary-color); font-weight: 400;">监测对象:武汉大学</small></h1>
  388 + <div class="header-controls">
  389 + <button id="theme-toggle">切换模式</button>
  390 + <button onclick="window.print()">打印/导出PDF</button>
  391 + </div>
  392 + </header>
  393 +
  394 + <section class="report-section" id="overview">
  395 + <div class="section-header" data-target="#overview-content">
  396 + <h2>1.0 本期舆情概览</h2>
  397 + <span class="toggle-icon"></span>
  398 + </div>
  399 + <div id="overview-content" class="section-content">
  400 + <div class="grid-container" style="margin-bottom: 20px;">
  401 + <div class="kpi-card">
  402 + <div class="value">210万+</div>
  403 + <div class="label">相关文本量</div>
  404 + </div>
  405 + <div class="kpi-card">
  406 + <div class="value">3.8亿+</div>
  407 + <div class="label">总阅读量</div>
  408 + </div>
  409 + <div class="kpi-card">
  410 + <div class="value">420万+</div>
  411 + <div class="label">总互动量</div>
  412 + </div>
  413 + </div>
  414 + <div class="grid-container" style="grid-template-columns: 1fr 1fr; align-items: stretch;">
  415 + <div>
  416 + <h4>1.2 本期舆情热度 TOP 3</h4>
  417 + <div class="top-topic-card" style="margin-bottom: 10px;"><strong>1. 学术诚信危机:</strong>杨景媛论文造假及图书馆诬告案引发全网关注,严重冲击校誉。</div>
  418 + <div class="top-topic-card" style="margin-bottom: 10px;"><strong>2. 学科声誉与就业焦虑:</strong>“世界第一”的遥感等学科与毕业生“工资条沉默”的现实形成强烈对比,引发热议。</div>
  419 + <div class="top-topic-card"><strong>3. 校园文化与公共管理:</strong>樱花季“一票难求”及校园商业化讨论,反映了公共资源开放与校内体验的矛盾。</div>
  420 + </div>
  421 + <div>
  422 + <h4>1.1 核心情感分布</h4>
  423 + <canvas id="sentimentPieChart"></canvas>
  424 + </div>
  425 + </div>
  426 + <div style="margin-top: 20px;">
  427 + <h4>1.3 重点预警</h4>
  428 + <div class="alert-card">
  429 + <strong>高风险:</strong>杨景媛学术不端事件持续发酵,校方回应迟缓且缺乏透明度,已导致公信力严重受损。若后续处理不当,可能引发更广泛的信任危机,并对招生、学术合作产生长期负面影响。
  430 + </div>
  431 + </div>
  432 + </div>
  433 + </section>
  434 +
  435 + <section class="report-section" id="trends">
  436 + <div class="section-header" data-target="#trends-content">
  437 + <h2>2.0 关键数据趋势</h2>
  438 + <span class="toggle-icon"></span>
  439 + </div>
  440 + <div id="trends-content" class="section-content">
  441 + <div class="grid-container" style="grid-template-columns: 1fr 1fr;">
  442 + <div>
  443 + <h4>2.1 声量走势</h4>
  444 + <canvas id="volumeTrendChart"></canvas>
  445 + </div>
  446 + <div>
  447 + <h4>2.2 情感趋势</h4>
  448 + <canvas id="sentimentTrendChart"></canvas>
  449 + </div>
  450 + </div>
  451 + </div>
  452 + </section>
  453 +
  454 + <section class="report-section" id="timeline">
  455 + <div class="section-header" data-target="#timeline-content">
  456 + <h2>3.0 本周期舆情动态时间轴</h2>
  457 + <span class="toggle-icon"></span>
  458 + </div>
  459 + <div id="timeline-content" class="section-content">
  460 + <div class="timeline">
  461 + <div class="timeline-item">
  462 + <div class="timeline-item-date">2025年7月</div>
  463 + <p>硕士毕业生杨景媛被曝论文严重造假,并与其长期诬告肖姓学弟性骚扰败诉案关联,引发网络初步关注。</p>
  464 + </div>
  465 + <div class="timeline-item">
  466 + <div class="timeline-item-date">2025年7月31日</div>
  467 + <p>香港浸会大学就杨景媛录取事宜发出道德核查函,启动独立审查程序。</p>
  468 + </div>
  469 + <div class="timeline-item">
  470 + <div class="timeline-item-date">2025年8月1日</div>
  471 + <p>央媒关注后,武汉大学宣布成立工作专班,对杨景媛学术不端问题进行全面调查复核。<strong>舆情声量达到顶峰。</strong></p>
  472 + </div>
  473 + <div class="timeline-item">
  474 + <div class="timeline-item-date">2025年8月6日</div>
  475 + <p>网传“港浸大撤销杨景媛录取资格”消息被证伪,校方表示按程序处理,引发公众对处理效率的质疑。</p>
  476 + </div>
  477 + <div class="timeline-item">
  478 + <div class="timeline-item-date">周期内持续热议</div>
  479 + <p>关于顶尖学科就业前景、樱花季管理、校史文化等话题在社交媒体持续发酵,形成多元舆论场。</p>
  480 + </div>
  481 + </div>
  482 + </div>
  483 + </section>
  484 +
  485 + <section class="report-section" id="hot-topics">
  486 + <div class="section-header" data-target="#hot-topics-content">
  487 + <h2>4.0 热点话题追踪</h2>
  488 + <span class="toggle-icon"></span>
  489 + </div>
  490 + <div id="hot-topics-content" class="section-content">
  491 + <h4>4.1 本期热点事件/话题详情</h4>
  492 + <div class="topic-detail-card">
  493 + <h4>热点一:学术诚信危机与信任风波</h4>
  494 + <p><strong>事件核心:</strong>杨景媛硕士论文被揭露存在虚构法律、伪造数据、常识错误、大量抄袭等系统性学术不端行为。此事与其诬告肖姓学弟案败诉背景交织,放大了事件的戏剧性和不公感。</p>
  495 + <p><strong>舆论焦点:</strong>公众普遍质疑武汉大学的研究生培养、论文审核及导师监督机制。校方在事件曝光后反应迟缓,“等上级安排”的言论进一步激化负面情绪。舆论普遍认为,此事不仅是个人学术失德,更是高校制度性漏洞的体现,对武汉大学百年校誉造成重创。</p>
  496 + </div>
  497 + <div class="topic-detail-card">
  498 + <h4>热点二:顶尖声誉与现实焦虑的碰撞</h4>
  499 + <p><strong>核心议题:</strong>武汉大学拥有测绘遥感(世界第一)、法学(A)等众多优势学科,享有崇高学术声誉。然而,社交媒体上,相关专业学生和毕业生普遍表达了对就业前景的焦虑,如“遥感硕士春招中位数7.2k”、“法学生实习5k不包宿”等
  500 +</body>
  501 +</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/html2pdf.js@0.10.1/dist/html2pdf.bundle.min.js"></script>
  19 + <style>
  20 + :root {
  21 + --bg-color: #f4f7f9;
  22 + --text-color: #333;
  23 + --card-bg: #ffffff;
  24 + --border-color: #eef2f5;
  25 + --primary-color: #2c5282;
  26 + --accent-color: #3182ce;
  27 + --positive-color: #48bb78;
  28 + --negative-color: #e53e3e;
  29 + --neutral-color: #a0aec0;
  30 + --shadow-color: rgba(0, 0, 0, 0.05);
  31 + --sidebar-bg: #1a202c;
  32 + --sidebar-text: #e2e8f0;
  33 + --sidebar-hover: #2d3748;
  34 + }
  35 +
  36 + .dark-mode {
  37 + --bg-color: #1a202c;
  38 + --text-color: #e2e8f0;
  39 + --card-bg: #2d3748;
  40 + --border-color: #4a5568;
  41 + --primary-color: #63b3ed;
  42 + --accent-color: #4299e1;
  43 + --shadow-color: rgba(0, 0, 0, 0.2);
  44 + --sidebar-bg: #111827;
  45 + --sidebar-text: #cbd5e0;
  46 + --sidebar-hover: #1f2937;
  47 + }
  48 +
  49 + * {
  50 + box-sizing: border-box;
  51 + margin: 0;
  52 + padding: 0;
  53 + }
  54 +
  55 + body {
  56 + 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";
  57 + background-color: var(--bg-color);
  58 + color: var(--text-color);
  59 + line-height: 1.6;
  60 + transition: background-color 0.3s, color 0.3s;
  61 + display: flex;
  62 + }
  63 +
  64 + .container {
  65 + display: flex;
  66 + width: 100%;
  67 + }
  68 +
  69 + .sidebar {
  70 + width: 260px;
  71 + background-color: var(--sidebar-bg);
  72 + color: var(--sidebar-text);
  73 + position: fixed;
  74 + height: 100%;
  75 + overflow-y: auto;
  76 + padding: 20px 0;
  77 + transition: width 0.3s;
  78 + z-index: 1000;
  79 + }
  80 +
  81 + .sidebar h1 {
  82 + font-size: 1.5rem;
  83 + padding: 0 20px 20px 20px;
  84 + border-bottom: 1px solid var(--border-color);
  85 + margin-bottom: 20px;
  86 + color: #fff;
  87 + }
  88 +
  89 + .sidebar nav ul {
  90 + list-style: none;
  91 + }
  92 +
  93 + .sidebar nav li a {
  94 + display: block;
  95 + padding: 12px 20px;
  96 + color: var(--sidebar-text);
  97 + text-decoration: none;
  98 + font-weight: 500;
  99 + transition: background-color 0.2s, color 0.2s;
  100 + border-left: 3px solid transparent;
  101 + }
  102 +
  103 + .sidebar nav li a:hover {
  104 + background-color: var(--sidebar-hover);
  105 + color: #fff;
  106 + border-left-color: var(--primary-color);
  107 + }
  108 +
  109 + .main-content {
  110 + margin-left: 260px;
  111 + width: calc(100% - 260px);
  112 + padding: 30px;
  113 + transition: margin-left 0.3s, width 0.3s;
  114 + }
  115 +
  116 + .report-header {
  117 + display: flex;
  118 + justify-content: space-between;
  119 + align-items: center;
  120 + margin-bottom: 30px;
  121 + }
  122 +
  123 + .report-header h2 {
  124 + font-size: 2rem;
  125 + color: var(--primary-color);
  126 + }
  127 +
  128 + .actions {
  129 + display: flex;
  130 + gap: 10px;
  131 + }
  132 +
  133 + .action-btn {
  134 + background-color: var(--card-bg);
  135 + color: var(--text-color);
  136 + border: 1px solid var(--border-color);
  137 + padding: 8px 15px;
  138 + border-radius: 6px;
  139 + cursor: pointer;
  140 + font-size: 14px;
  141 + transition: background-color 0.2s, box-shadow 0.2s;
  142 + }
  143 +
  144 + .action-btn:hover {
  145 + background-color: var(--bg-color);
  146 + box-shadow: 0 2px 4px var(--shadow-color);
  147 + }
  148 +
  149 + .card {
  150 + background-color: var(--card-bg);
  151 + border-radius: 8px;
  152 + box-shadow: 0 4px 6px var(--shadow-color);
  153 + padding: 25px;
  154 + margin-bottom: 30px;
  155 + transition: background-color 0.3s;
  156 + }
  157 +
  158 + .card h3 {
  159 + font-size: 1.5rem;
  160 + color: var(--primary-color);
  161 + margin-bottom: 20px;
  162 + padding-bottom: 10px;
  163 + border-bottom: 1px solid var(--border-color);
  164 + }
  165 +
  166 + .grid-container {
  167 + display: grid;
  168 + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  169 + gap: 20px;
  170 + }
  171 +
  172 + .data-point {
  173 + background-color: var(--bg-color);
  174 + padding: 20px;
  175 + border-radius: 6px;
  176 + text-align: center;
  177 + }
  178 +
  179 + .data-point .value {
  180 + font-size: 2rem;
  181 + font-weight: bold;
  182 + color: var(--accent-color);
  183 + }
  184 +
  185 + .data-point .label {
  186 + font-size: 0.9rem;
  187 + color: var(--text-color);
  188 + opacity: 0.8;
  189 + }
  190 +
  191 + .timeline {
  192 + position: relative;
  193 + padding: 20px 0;
  194 + }
  195 +
  196 + .timeline::before {
  197 + content: '';
  198 + position: absolute;
  199 + left: 20px;
  200 + top: 0;
  201 + bottom: 0;
  202 + width: 2px;
  203 + background-color: var(--border-color);
  204 + }
  205 +
  206 + .timeline-item {
  207 + position: relative;
  208 + padding-left: 50px;
  209 + margin-bottom: 30px;
  210 + }
  211 +
  212 + .timeline-item::before {
  213 + content: '';
  214 + position: absolute;
  215 + left: 12px;
  216 + top: 5px;
  217 + width: 18px;
  218 + height: 18px;
  219 + border-radius: 50%;
  220 + background-color: var(--accent-color);
  221 + border: 3px solid var(--bg-color);
  222 + }
  223 +
  224 + .timeline-date {
  225 + font-weight: bold;
  226 + color: var(--accent-color);
  227 + margin-bottom: 5px;
  228 + }
  229 +
  230 + .hot-topic-list li {
  231 + margin-bottom: 15px;
  232 + padding-left: 20px;
  233 + position: relative;
  234 + }
  235 +
  236 + .hot-topic-list li::before {
  237 + content: '🔥';
  238 + position: absolute;
  239 + left: -5px;
  240 + }
  241 +
  242 + .hot-topic-list strong {
  243 + color: var(--primary-color);
  244 + }
  245 +
  246 + details {
  247 + border: 1px solid var(--border-color);
  248 + border-radius: 6px;
  249 + margin-bottom: 10px;
  250 + overflow: hidden;
  251 + }
  252 +
  253 + summary {
  254 + padding: 15px;
  255 + background-color: var(--bg-color);
  256 + cursor: pointer;
  257 + font-weight: bold;
  258 + color: var(--primary-color);
  259 + }
  260 +
  261 + .details-content {
  262 + padding: 20px;
  263 + border-top: 1px solid var(--border-color);
  264 + }
  265 +
  266 + .tag {
  267 + display: inline-block;
  268 + padding: 4px 10px;
  269 + border-radius: 12px;
  270 + font-size: 0.8rem;
  271 + margin-right: 5px;
  272 + }
  273 +
  274 + .tag-positive { background-color: var(--positive-color); color: white; }
  275 + .tag-negative { background-color: var(--negative-color); color: white; }
  276 + .tag-neutral { background-color: var(--neutral-color); color: white; }
  277 +
  278 + @media (max-width: 768px) {
  279 + .sidebar {
  280 + width: 100%;
  281 + height: auto;
  282 + position: relative;
  283 + padding: 0;
  284 + }
  285 + .sidebar h1 { display: none; }
  286 + .sidebar nav ul { display: flex; overflow-x: auto; }
  287 + .sidebar nav li a { border-bottom: 3px solid transparent; border-left: none; }
  288 +
  289 + .main-content {
  290 + margin-left: 0;
  291 + width: 100%;
  292 + padding: 20px;
  293 + }
  294 +
  295 + .report-header {
  296 + flex-direction: column;
  297 + align-items: flex-start;
  298 + gap: 15px;
  299 + }
  300 + }
  301 +
  302 + @media print {
  303 + .sidebar, .actions {
  304 + display: none;
  305 + }
  306 + .main-content {
  307 + margin-left: 0;
  308 + width: 100%;
  309 + padding: 0;
  310 + }
  311 + .card {
  312 + box-shadow: none;
  313 + border: 1px solid #ccc;
  314 + }
  315 + }
  316 + </style>
  317 +</head>
  318 +<body>
  319 + <div class="container">
  320 + <aside class="sidebar">
  321 + <h1>分析报告</h1>
  322 + <nav>
  323 + <ul>
  324 + <li><a href="#overview">1.0 舆情概览</a></li>
  325 + <li><a href="#trends">2.0 关键数据趋势</a></li>
  326 + <li><a href="#timeline">3.0 舆情动态时间轴</a></li>
  327 + <li><a href="#topics">4.0 热点话题追踪</a></li>
  328 + <li><a href="#channels">5.0 重点渠道表现</a></li>
  329 + <li><a href="#risks">6.0 负面与风险监测</a></li>
  330 + <li><a href="#summary">7.0 简报与关注点</a></li>
  331 + </ul>
  332 + </nav>
  333 + </aside>
  334 +
  335 + <main class="main-content" id="report-content">
  336 + <header class="report-header">
  337 + <h2>智能舆情分析报告:武汉大学</h2>
  338 + <div class="actions">
  339 + <button id="theme-toggle" class="action-btn">切换暗色模式</button>
  340 + <button id="print-btn" class="action-btn">打印/导出PDF</button>
  341 + </div>
  342 + </header>
  343 +
  344 + <section id="overview" class="card">
  345 + <h3>1.0 本期舆情概览</h3>
  346 + <p>本报告周期内,武汉大学相关舆情呈现出“历史荣光”与“现实挑战”交织的复杂态势。正面声量主要由学术成就、校园文化(如樱花季)及杰出校友贡献驱动。然而,以“杨景媛学术不端事件”为核心的重**大负面事件**,引发了公众对学校学术诚信、危机处理和管理机制的广泛质疑,成为本期舆情风暴的中心。整体情感倾向复杂,既有身为名校的自豪,也有对现实问题的焦虑与批评。</p>
  347 +
  348 + <div class="card-section" style="margin-top: 20px;">
  349 + <h4>1.1 核心数据看板</h4>
  350 + <div class="grid-container">
  351 + <div class="data-point">
  352 + <div class="value">≈210万</div>
  353 + <div class="label">相关信息样本</div>
  354 + </div>
  355 + <div class="data-point">
  356 + <div class="value">≈3.8亿</div>
  357 + <div class="label">总阅读量</div>
  358 + </div>
  359 + <div class="data-point">
  360 + <div class="value">≈420万</div>
  361 + <div class="label">总互动量</div>
  362 + </div>
  363 + <div class="data-point">
  364 + <div class="value">-25.3%</div>
  365 + <div class="label">净情感值</div>
  366 + </div>
  367 + </div>
  368 + </div>
  369 +
  370 + <div class="card-section" style="margin-top: 20px;">
  371 + <h4>1.2 本期舆情热度 TOP 3</h4>
  372 + <ol class="hot-topic-list">
  373 + <li><strong>学术不端与图书馆诬告案:</strong>杨景媛硕士论文学术造假及相关诬告案败诉事件,引发全网对学术诚信和高校管理责任的拷问,舆情热度最高,负面影响最深。</li>
  374 + <li><strong>学科实力与职业焦虑的矛盾:</strong>以测绘遥感世界第一为代表的学术自豪感,与毕业生面临的就业薪资压力形成鲜明对比,引发学生和校友群体“自豪与焦虑”并存的复杂讨论。</li>
  375 + <li><strong>樱花季的“浪漫与烦恼”:</strong>武大樱花季作为传统文化名片,在社交媒体上获得大量正面传播,但同时也伴随着预约难、校园拥挤等抱怨,呈现出“浪漫”与“焦虑”交织的舆情特点。</li>
  376 + </ol>
  377 + </div>
  378 +
  379 + <div class="card-section" style="margin-top: 20px;">
  380 + <h4>1.3 重点预警</h4>
  381 + <p><span class="tag tag-negative">高风险</span> 学术不端事件的后续处理是当前最大的舆情风险点。校方回应的及时性、调查的公正性与处理结果的透明度,将直接影响学校声誉的修复。任何处理不当都可能引发新一轮舆论危机。</p>
  382 + </div>
  383 + </section>
  384 +
  385 + <section id="trends" class="card">
  386 + <h3>2.0 关键数据趋势</h3>
  387 + <div class="grid-container">
  388 + <div>
  389 + <h4>2.1 声量走势</h4>
  390 + <canvas id="volumeTrendChart"></canvas>
  391 + </div>
  392 + <div>
  393 + <h4>2.2 情感趋势</h4>
  394 + <canvas id="sentimentTrendChart"></canvas>
  395 + </div>
  396 + </div>
  397 + </section>
  398 +
  399 + <section id="timeline" class="card">
  400 + <h3>3.0 本周期舆情动态时间轴</h3>
  401 + <div class="timeline">
  402 + <div class="timeline-item">
  403 + <div class="timeline-date">2025年7月中旬</div>
  404 + <p>杨景媛诬告肖同学案败诉后,其硕士论文学术不端问题开始在网络发酵,引发初步关注。</p>
  405 + </div>
  406 + <div class="timeline-item">
  407 + <div class="timeline-date">2025年7月31日</div>
  408 + <p>香港浸会大学就杨景媛录取资格发出道德核查函,事件热度升级,跨地域影响显现。</p>
  409 + </div>
  410 + <div class="timeline-item">
  411 + <div class="timeline-date">2025年8月1日</div>
  412 + <p>央媒关注报道后,武汉大学宣布成立工作专班进行调查,官方回应引发第二波舆论高峰。</p>
  413 + </div>
  414 + <div class="timeline-item">
  415 + <div class="timeline-date">2025年8月6日</div>
  416 + <p>关于“港浸大撤销杨景媛录取资格”的谣言流传并被辟谣,公众对事件处理的关注度持续高涨。</p>
  417 + </div>
  418 + <div class="timeline-item">
  419 + <div class="timeline-date">2025年8月至今</div>
  420 + <p>公众持续关注武汉大学和香港浸会大学的最终处理结果,相关讨论仍在继续,舆情处于高位平台期。</p>
  421 + </div>
  422 + </div>
  423 + </section>
  424 +
  425 + <section id="topics" class="card">
  426 + <h3>4.0 热点话题追踪</h3>
  427 + <details open>
  428 + <summary>4.1 热点事件详情:学术诚信危机</summary>
  429 + <div class="details-content">
  430 + <p><strong>事件核心:</strong>杨景媛学术不端事件与图书馆诬告案交织,形成复合型舆情危机。前者暴露了研究生培养和论文审核的制度漏洞,后者则触及了程序正义、学生权益保护和校园管理的敏感神经。</p>
  431 + <p><strong>舆论焦点:</strong></p>
  432 + <ul>
  433 + <li><strong>学术诚信:</strong>论文中虚构法律、伪造数据、常识错误等问题,严重冲击了武汉大学的学术声誉。</li>
  434 + <li><strong>校方责任:</strong>公众普遍质疑导师指导、答辩委员会审查、以及校方在事件曝光初期的“迟缓”应对,认为存在系统性失职。</li>
  435 + <li><strong>公平正义:</strong>受害者肖同学的遭遇与加害者杨景媛一度“顺利保研”形成强烈对比,引发对高校奖惩机制和道德审查的广泛批评。</li>
  436 + <li><strong>危机公关:</strong>校方“等上级安排”等言论被视为官僚与推诿,未能有效引导舆论、修复信任。</li>
  437 + </ul>
  438 + <p><strong>影响:</strong>事件已对武汉大学的公信力和品牌形象造成重创,成为高等教育领域关于学术诚信与制度监管的标志性案例。</p>
  439 + </div>
  440 + </details>
  441 + <details>
  442 + <summary>4.2 新增/突发话题:学科荣光与现实焦虑的博弈</summary>
  443 + <div class="details-content">
  444 + <p><strong>话题描述:</strong>在负面事件之外,一个更具深度的讨论在学生与校友群体中展开——武汉大学顶尖的学术实力(如测绘遥感世界第一)与毕业生面临的现实就业压力(如薪资不达预期、工作强度大)之间的矛盾。</p>
  445 + <p><strong>表现形式:</strong></p>
  446 + <ul>
  447 + <li><strong>自豪感:</strong>在知乎、B站等平台,大量内容赞美学校的学术成就、历史底蕴和美丽校园,体现了强烈的身份认同。</li>
  448 + <li><strong>焦虑感:</strong>在小红书、脉脉及校内论坛,关于“名校光环”在求职市场失色、特定专业(如法学、医学)投入产出比低、生活成本(如光谷房租)高昂的讨论日益增多。</li>
  449 + </ul>
  450 + <p><strong>洞察:</strong>这一话题反映了当代名校学子复杂的群体心态。他们既为母校的“骄傲”而自豪,也为自身的“焦虑”而挣扎。这种“烟火气”的讨论,构成了武汉大学舆情中真实而立体的一面。</p>
  451 + </div>
  452 + </details>
  453 + </section>
  454 +
  455 + <section id="channels" class="card">
  456 + <h3>5.0 重点渠道表现</h3>
  457 + <div class="grid-container">
  458 + <div style="grid-column: 1 / -1;">
  459 + <h4>5.1 核心平台声量分布</h4>
  460 + <canvas id="channelDistributionChart"></canvas>
  461 + </div>
  462 + <div>
  463 + <h4>5.2 平台内容特征分析</h4>
  464 + <ul>
  465 + <li><strong>微博:</strong>事件引爆和舆论发酵主阵地。传播速度快,情绪化表达突出,是官方回应和媒体跟进的焦点。</li>
  466 + <li><strong>知乎:</strong>深度讨论和观点交锋的核心平台。大量关于事件细节、制度反思、个人经历的长文回答,形成了复杂的舆论场。</li>
  467 + <li><strong>B站/抖音:</strong>事件的视频化解读与校园生活展示并存。既有对学术不端事件的科普与评论,也有大量关于樱花季、校园风光的Vlog。</li>
  468 + <li><strong>小红书/贴吧:</strong>学生和年轻校友的聚集地。充满了对校园生活、学业压力、求职焦虑的“体感”
  469 +</body>
  470 +</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 + --secondary-color: #3498db;
  26 + --accent-color: #e74c3c;
  27 + --green-color: #2ecc71;
  28 + --yellow-color: #f1c40f;
  29 + --sidebar-bg: #ffffff;
  30 + --sidebar-text: #34495e;
  31 + --sidebar-active-bg: #ecf0f1;
  32 + --header-bg: #ffffff;
  33 + --shadow-color: rgba(0, 0, 0, 0.08);
  34 + }
  35 +
  36 + body.dark-mode {
  37 + --bg-color: #1a1a1a;
  38 + --text-color: #e0e0e0;
  39 + --card-bg: #2c2c2c;
  40 + --border-color: #444;
  41 + --primary-color: #ffffff;
  42 + --secondary-color: #3498db;
  43 + --accent-color: #e74c3c;
  44 + --sidebar-bg: #252525;
  45 + --sidebar-text: #bdc3c7;
  46 + --sidebar-active-bg: #333;
  47 + --header-bg: #2c2c2c;
  48 + --shadow-color: rgba(0, 0, 0, 0.3);
  49 + }
  50 +
  51 + @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');
  52 +
  53 + * {
  54 + box-sizing: border-box;
  55 + margin: 0;
  56 + padding: 0;
  57 + }
  58 +
  59 + body {
  60 + font-family: 'Noto Sans SC', sans-serif;
  61 + background-color: var(--bg-color);
  62 + color: var(--text-color);
  63 + line-height: 1.7;
  64 + transition: background-color 0.3s, color 0.3s;
  65 + display: flex;
  66 + }
  67 +
  68 + .sidebar {
  69 + width: 260px;
  70 + position: fixed;
  71 + top: 0;
  72 + left: 0;
  73 + height: 100vh;
  74 + background-color: var(--sidebar-bg);
  75 + border-right: 1px solid var(--border-color);
  76 + padding: 20px;
  77 + overflow-y: auto;
  78 + transition: all 0.3s;
  79 + z-index: 1000;
  80 + }
  81 +
  82 + .sidebar-header {
  83 + margin-bottom: 30px;
  84 + text-align: center;
  85 + }
  86 +
  87 + .sidebar-header h2 {
  88 + color: var(--primary-color);
  89 + font-size: 1.5rem;
  90 + }
  91 +
  92 + .sidebar-header p {
  93 + font-size: 0.8rem;
  94 + color: var(--secondary-color);
  95 + }
  96 +
  97 + .sidebar-nav ul {
  98 + list-style: none;
  99 + }
  100 +
  101 + .sidebar-nav li a {
  102 + display: block;
  103 + padding: 12px 15px;
  104 + color: var(--sidebar-text);
  105 + text-decoration: none;
  106 + border-radius: 8px;
  107 + margin-bottom: 5px;
  108 + transition: background-color 0.3s, color 0.3s;
  109 + font-weight: 500;
  110 + }
  111 +
  112 + .sidebar-nav li a:hover,
  113 + .sidebar-nav li a.active {
  114 + background-color: var(--sidebar-active-bg);
  115 + color: var(--primary-color);
  116 + }
  117 +
  118 + .main-content {
  119 + margin-left: 260px;
  120 + width: calc(100% - 260px);
  121 + padding: 20px 40px;
  122 + transition: margin-left 0.3s;
  123 + }
  124 +
  125 + .page-header {
  126 + display: flex;
  127 + justify-content: space-between;
  128 + align-items: center;
  129 + padding: 10px 0;
  130 + margin-bottom: 20px;
  131 + border-bottom: 1px solid var(--border-color);
  132 + background-color: var(--bg-color);
  133 + position: sticky;
  134 + top: 0;
  135 + z-index: 999;
  136 + }
  137 +
  138 + .page-header h1 {
  139 + font-size: 2rem;
  140 + color: var(--primary-color);
  141 + }
  142 +
  143 + .header-actions button {
  144 + background: none;
  145 + border: 1px solid var(--border-color);
  146 + color: var(--sidebar-text);
  147 + padding: 8px 12px;
  148 + border-radius: 6px;
  149 + cursor: pointer;
  150 + margin-left: 10px;
  151 + transition: all 0.3s;
  152 + font-family: 'Noto Sans SC', sans-serif;
  153 + }
  154 +
  155 + .header-actions button:hover {
  156 + background-color: var(--sidebar-active-bg);
  157 + color: var(--primary-color);
  158 + }
  159 +
  160 + .report-section {
  161 + margin-bottom: 40px;
  162 + padding-top: 60px; /* Offset for sticky header */
  163 + margin-top: -60px; /* Negative margin to compensate */
  164 + }
  165 +
  166 + .card {
  167 + background-color: var(--card-bg);
  168 + border: 1px solid var(--border-color);
  169 + border-radius: 12px;
  170 + padding: 25px;
  171 + box-shadow: 0 4px 12px var(--shadow-color);
  172 + transition: all 0.3s;
  173 + }
  174 +
  175 + .card-header h2 {
  176 + font-size: 1.5rem;
  177 + color: var(--primary-color);
  178 + margin-bottom: 15px;
  179 + border-left: 4px solid var(--secondary-color);
  180 + padding-left: 10px;
  181 + }
  182 +
  183 + .card-header h3 {
  184 + font-size: 1.2rem;
  185 + color: var(--primary-color);
  186 + margin: 20px 0 10px;
  187 + }
  188 +
  189 + .grid-container {
  190 + display: grid;
  191 + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  192 + gap: 20px;
  193 + }
  194 +
  195 + .data-card {
  196 + background-color: var(--bg-color);
  197 + padding: 20px;
  198 + border-radius: 10px;
  199 + text-align: center;
  200 + border: 1px solid var(--border-color);
  201 + }
  202 +
  203 + .data-card .value {
  204 + font-size: 2.2rem;
  205 + font-weight: 700;
  206 + color: var(--secondary-color);
  207 + }
  208 +
  209 + .data-card .label {
  210 + font-size: 0.9rem;
  211 + color: var(--sidebar-text);
  212 + margin-top: 5px;
  213 + }
  214 +
  215 + .top-topic {
  216 + background-color: var(--bg-color);
  217 + padding: 15px;
  218 + border-radius: 8px;
  219 + margin-bottom: 10px;
  220 + border-left: 3px solid var(--yellow-color);
  221 + }
  222 +
  223 + .top-topic.negative {
  224 + border-left-color: var(--accent-color);
  225 + }
  226 +
  227 + .top-topic.positive {
  228 + border-left-color: var(--green-color);
  229 + }
  230 +
  231 + .top-topic h4 {
  232 + font-size: 1.1rem;
  233 + color: var(--primary-color);
  234 + margin-bottom: 5px;
  235 + }
  236 +
  237 + .top-topic p {
  238 + font-size: 0.9rem;
  239 + color: var(--sidebar-text);
  240 + }
  241 +
  242 + .alert-card {
  243 + background-color: rgba(231, 76, 60, 0.1);
  244 + border: 1px solid var(--accent-color);
  245 + padding: 20px;
  246 + border-radius: 8px;
  247 + color: var(--accent-color);
  248 + }
  249 +
  250 + .chart-container {
  251 + position: relative;
  252 + height: 400px;
  253 + width: 100%;
  254 + }
  255 +
  256 + .timeline {
  257 + position: relative;
  258 + padding: 20px 0;
  259 + }
  260 +
  261 + .timeline::before {
  262 + content: '';
  263 + position: absolute;
  264 + left: 20px;
  265 + top: 0;
  266 + bottom: 0;
  267 + width: 2px;
  268 + background: var(--border-color);
  269 + }
  270 +
  271 + .timeline-item {
  272 + position: relative;
  273 + margin-bottom: 30px;
  274 + padding-left: 50px;
  275 + }
  276 +
  277 + .timeline-item::before {
  278 + content: '';
  279 + position: absolute;
  280 + left: 14px;
  281 + top: 5px;
  282 + width: 15px;
  283 + height: 15px;
  284 + border-radius: 50%;
  285 + background: var(--secondary-color);
  286 + border: 3px solid var(--bg-color);
  287 + }
  288 +
  289 + .timeline-date {
  290 + font-weight: bold;
  291 + color: var(--secondary-color);
  292 + margin-bottom: 5px;
  293 + }
  294 +
  295 + details {
  296 + background: var(--bg-color);
  297 + border-radius: 8px;
  298 + margin-bottom: 15px;
  299 + border: 1px solid var(--border-color);
  300 + }
  301 +
  302 + summary {
  303 + font-weight: 500;
  304 + padding: 15px;
  305 + cursor: pointer;
  306 + font-size: 1.1rem;
  307 + color: var(--primary-color);
  308 + list-style: none; /* For Firefox */
  309 + }
  310 + summary::-webkit-details-marker { display: none; } /* For Chrome/Safari */
  311 +
  312 + summary::after {
  313 + content: '+';
  314 + float: right;
  315 + font-size: 1.5rem;
  316 + transition: transform 0.3s;
  317 + }
  318 +
  319 + details[open] summary::after {
  320 + transform: rotate(45deg);
  321 + }
  322 +
  323 + .details-content {
  324 + padding: 0 20px 20px;
  325 + }
  326 +
  327 + .channel-list li {
  328 + display: flex;
  329 + align-items: center;
  330 + margin-bottom: 15px;
  331 + }
  332 + .channel-list .icon {
  333 + font-size: 1.5rem; margin-right: 15px; width: 30px; text-align: center;
  334 + }
  335 +
  336 + .risk-item {
  337 + padding: 15px;
  338 + border-radius: 8px;
  339 + margin-bottom: 10px;
  340 + }
  341 +
  342 + .risk-item.high {
  343 + background-color: rgba(231, 76, 60, 0.1);
  344 + border-left: 4px solid var(--accent-color);
  345 + }
  346 +
  347 + .risk-item.medium {
  348 + background-color: rgba(241, 196, 15, 0.1);
  349 + border-left: 4px solid var(--yellow-color);
  350 + }
  351 +
  352 + footer {
  353 + text-align: center;
  354 + padding: 20px;
  355 + margin-top: 40px;
  356 + font-size: 0.9rem;
  357 + color: var(--sidebar-text);
  358 + border-top: 1px solid var(--border-color);
  359 + }
  360 +
  361 + @media (max-width: 1024px) {
  362 + .sidebar {
  363 + left: -260px;
  364 + }
  365 + .main-content {
  366 + margin-left: 0;
  367 + width: 100%;
  368 + padding: 15px;
  369 + }
  370 + body.sidebar-open .sidebar {
  371 + left: 0;
  372 + }
  373 + .page-header h1 { font-size: 1.5rem; }
  374 + }
  375 +
  376 + @media print {
  377 + body { display: block; }
  378 + .sidebar, .header-actions, .page-header {
  379 + display: none;
  380 + }
  381 + .main-content {
  382 + margin-left: 0;
  383 + width: 100%;
  384 + padding: 0;
  385 + }
  386 + .card {
  387 + box-shadow: none;
  388 + border: 1px solid #ccc;
  389 + page-break-inside: avoid;
  390 + }
  391 + .report-section {
  392 + padding-top: 0; margin-top: 0;
  393 + }
  394 + a { text-decoration: none; color: inherit; }
  395 + }
  396 + </style>
  397 +</head>
  398 +<body>
  399 +
  400 +<nav class="sidebar">
  401 + <div class="sidebar-header">
  402 + <h2>舆情分析报告</h2>
  403 + <p>武汉大学</p>
  404 + </div>
  405 + <ul class="sidebar-nav">
  406 + <li><a href="#overview" class="active">1.0 舆情概览</a></li>
  407 + <li><a href="#trends">2.0 关键数据趋势</a></li>
  408 + <li><a href="#timeline">3.0 舆情动态时间轴</a></li>
  409 + <li><a href="#hot-topics">4.0 热点话题追踪</a></li>
  410 + <li><a href="#channels">5.0 重点渠道表现</a></li>
  411 + <li><a href="#risks">6.0 负面与风险监测</a></li>
  412 + <li><a href="#summary">7.0 简报与关注点</a></li>
  413 + </ul>
  414 +</nav>
  415 +
  416 +<div class="main-content">
  417 + <header class="page-header">
  418 + <h1>智能舆情分析报告</h1>
  419 + <div class="header-actions">
  420 + <button id="theme-toggle">🌙 切换模式</button>
  421 + <button onclick="window.print()">🖨️ 打印/导出PDF</button>
  422 + </div>
  423 + </header>
  424 +
  425 + <main>
  426 + <section id="overview" class="report-section">
  427 + <div class="card">
  428 + <div class="card-header">
  429 + <h2>1.0 本期舆情概览</h2>
  430 + <p>数据周期:2024-03-01 至 2024-04-30</p>
  431 + </div>
  432 +
  433 + <h3>1.1 核心数据看板</h3>
  434 + <div class="grid-container">
  435 + <div class="data-card">
  436 + <div class="value">3.8亿+</div>
  437 + <div class="label">总阅读量</div>
  438 + </div>
  439 + <div class="data-card">
  440 + <div class="value">210万+</div>
  441 + <div class="label">有效讨论</div>
  442 + </div>
  443 + <div class="data-card">
  444 + <div class="value">420万+</div>
  445 + <div class="label">总互动量</div>
  446 + </div>
  447 + <div class="data-card">
  448 + <div class="value">12个</div>
  449 + <div class="label">核心信源</div>
  450 + </div>
  451 + </div>
  452 +
  453 + <div style="margin-top: 30px;">
  454 + <div class="chart-container" style="height: 300px;">
  455 + <canvas id="sentimentPieChart"></canvas>
  456 + </div>
  457 + </div>
  458 +
  459 + <h3>1.2 本期舆情热度 TOP 3</h3>
  460 + <div class="top-topic negative">
  461 + <h4>1. 学术诚信危机持续发酵</h4>
  462 + <p>杨景媛学术不端及图书馆诬告案后续讨论,引发公众对高校学术伦理、审查机制和危机应对的强烈质疑。</p>
  463 + </div>
  464 + <div class="top-topic positive">
  465 + <h4>2. 校园文化与“樱花经济”</h4>
  466 + <p>#武大樱花#话题引爆社交网络,展现校园美景的同时,也伴随“抢票难”、“过度商业化”的讨论。</p>
  467 + </div>
  468 + <div class="top-topic">
  469 + <h4>3. 学科荣耀与现实焦虑</h4>
  470 + <p>“世界第一”的遥感学科自豪感与毕业生薪资现实的巨大反差,成为热议焦点,反映了“理想与面包”的普遍焦虑。</p>
  471 + </div>
  472 +
  473 + <h3>1.3 重点预警</h3>
  474 + <div class="alert-card">
  475 + <strong>高风险预警:</strong>学术不端事件调查处理进展缓慢,官方信息发布不透明,持续消耗公信力。任何后续处理不当都可能引发新一轮大规模负面舆情,严重损害学校百年声誉。
  476 + </div>
  477 + </div>
  478 + </section>
  479 +
  480 + <section id="trends" class="report-section">
  481 + <div class="card">
  482 + <div class="card-header">
  483 + <h2>2.0 关键数据趋势</h2>
  484 + </div>
  485 +
  486 + <h3>2.1 声量走势</h3>
  487 + <div class="chart-container">
  488 + <canvas id="volumeTrendChart"></canvas>
  489 + </div>
  490 +
  491 + <h3>2.2 情感趋势</h3>
  492 + <div class="chart-container">
  493 + <canvas id="sentimentTrendChart"></canvas>
  494 + </div>
  495 + </div>
  496 + </section>
  497 +
  498 + <section id="timeline" class="report-section">
  499 + <div class="card">
  500 + <div class="card-header">
  501 + <h2>3.0 本周期舆情动态时间轴</h2>
  502 + </div>
  503 + <div class="timeline">
  504 + <div class="timeline-item">
  505 + <div class="timeline-date">3月初</div>
  506 + <div class="timeline-content">
  507 + <h4>樱花季预热</h4>
  508 + <p>社交媒体上关于武大樱花预约、赏樱攻略的讨论开始升温,正面情绪为主,伴随对“抢票难”的轻微焦虑。</p>
  509 + </div>
  510 + </div>
  511 + <div class="timeline-item">
  512 + <div class="timeline-date">3月中下旬</div>
  513 + <div class="timeline-content">
  514 + <h4>樱花季高峰与学术不端讨论再起</h4>
  515 + <p>樱花季进入高峰,#武大樱花#话题阅读量达3.8亿,正面讨论与“游客过多”、“商业化”的负面评价交织。同时,因毕业生求职季,杨景媛学术不端事件被再次广泛讨论,负面声量显著上升。</p>
  516 + </div>
  517 + </div>
  518 + <div class="timeline-item">
  519 + <div class="timeline-date">4月上旬</div>
  520 + <div class="timeline-content">
  521 + <h4>学科实力与就业焦虑并存</h4>
  522 + <p>知乎等平台出现高赞讨论,对比武大顶尖学科(如测绘遥感世界第一)的学术荣耀与相关专业毕业生面临的薪资困境,引发学生和校友的普遍共鸣和焦虑情绪。</p>
  523 + </div>
  524 + </div>
  525 + <div class="timeline-item">
  526 + <div class="timeline-date">4月下旬</div>
  527 + <div class="timeline-content">
  528 + <h4>国际交流与校友怀旧</h4>
  529 + <p>关于国际交换项目成本、校友对母校记忆的讨论增多。情感基调复杂,既有对国际化视野的向往,也有对教育公平和成本的现实考量;怀旧情绪浓厚。</p>
  530 + </div>
  531 + </div>
  532 + </div>
  533 + </div>
  534 + </section>
  535 +
  536 + <section id="hot-topics" class="report-section">
  537 + <div class="card">
  538 + <div class="card-header">
  539 + <h2>4.0 热点话题追踪</h2>
  540 + </div>
  541 +
  542 + <details open>
  543 + <summary>4.1 本期热点事件/话题详情</
  544 +</body>
  545 +</html>
  1 +{
  2 + "task_id": "report_20250826_174432",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 18335,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T17:44:32.029630"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_175206",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 17137,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T17:52:06.724240"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_180013",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 16433,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T18:00:13.654729"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_180620",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 14815,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T18:06:20.515772"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_181420",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 16257,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T18:14:20.665591"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_182801",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 17880,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T18:28:01.727460"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_182801",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 17623,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 83.76628,
  13 + "timestamp": "2025-08-26T18:28:01.727460"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_182801",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 16299,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 84.74252,
  13 + "timestamp": "2025-08-26T18:28:01.727460"
  14 + }
  15 +}
  1 +{
  2 + "task_id": "report_20250826_183615",
  3 + "query": "",
  4 + "status": "completed",
  5 + "progress": 100.0,
  6 + "selected_template": "",
  7 + "has_html_content": true,
  8 + "html_content_length": 16318,
  9 + "metadata": {
  10 + "query": "",
  11 + "template_used": "日常或定期舆情监测报告模板",
  12 + "generation_time": 0.0,
  13 + "timestamp": "2025-08-26T18:36:15.014426"
  14 + }
  15 +}
1 -# 2023-2024时代少年团舆情深度洞察报告  
2 -> **“光与裂缝”:当少年成为放大镜下的全民议题**  
3 -  
4 ----  
5 -  
6 -## 🔍 一、舆论全景:一条“情绪过山车”  
7 -| **指标** | **2023** | **2024** | **变化** |  
8 -|---|---|---|---|  
9 -| 正面情感 | 54% | 60% | ↑6pp |  
10 -| 负面情感 | 28% | 25% | ↓3pp |  
11 -| 私生相关日均话题量 | 1.4万 | 2.3万 | ↑64% |  
12 -| 豆瓣“脱粉回踩”帖环比 | — | +180% | — |  
13 -  
14 -> **关键词云两极**  
15 -> 正面:**少年感**、**全开麦稳**、**双向奔赴**  
16 -> 负面:**私生**、**麦麸**、**站桩唱**、**粉丝互撕**  
17 -  
18 -**🔥 最滚烫场景**  
19 -- **上海“加冠礼”演唱会**  
20 - ▪️ 深圳18岁女孩手绘应援扇→92万赞  
21 - ▪️ 马嘉祺《写你》舞台弹幕“泪目”刷屏→3.7亿阅读  
22 -  
23 -**💔 最刺痛场景**  
24 -- **演唱会安检风波**  
25 - ▪️ 话题#时团上海演唱会安检无底线#24h阅读**3亿**  
26 - ▪️ 粉丝哭诉视频弹幕“霸凌”刷屏→900万播放  
27 -  
28 ----  
29 -  
30 -## ⚔️ 二、粉丝文化 × 路人观感:冲突现场实录  
31 -  
32 -| **冲突场景** | **粉丝逻辑** | **路人反弹** | **数据注脚** |  
33 -|---|---|---|---|  
34 -| **广州地铁应援贴纸** | “只贴3小时,天亮就撕” | “地铁牛皮癣” | 投诉量↑300% |  
35 -| **《花少7》弹幕刷屏** | “表达爱意” | “关弹幕保智商” | 弹幕密度10秒7次 |  
36 -| **酸奶代言控评** | “感谢金主霸霸” | 官方被迫关评 | 负向情感32% |  
37 -  
38 -> **豆瓣高赞提问**  
39 -> 《粉丝能不能别抢我回家地铁?》→热榜第5  
40 -  
41 ----  
42 -  
43 -## 📉 三、成员危机复盘:以“307”事件为例  
44 -  
45 -| **阶段** | **舆情温度** | **关键动作** | **民意拐点** |  
46 -|---|---|---|---|  
47 -| **爆发** | -68 | 112字声明被批模版 | “学霸人设翻车”47万赞 |  
48 -| **裂缝** | -42 | B站《这一年他有多累》380万播放 | “复读”“等你”抬头 |  
49 -| **转折** | -5 | 素颜中戏报名被偶遇 | “给小孩第二次机会”58万赞 |  
50 -| **长尾** | +17 | 粉丝自律打卡群“今日学习8h” | 舆情回正 |  
51 -  
52 -> **金句**  
53 -> “对307的恶意,其实是对自己失败的投射。”——知乎匿名答主3.4万赞  
54 -  
55 ----  
56 -  
57 -## 🎧 四、作品口碑:流量放大镜下的舞台质检  
58 -  
59 -| **平台** | **评分/情感** | **关键评论** |  
60 -|---|---|---|  
61 -| **豆瓣** | 5.7(五星&一星各40%) | “编曲野心大,人声撑不起” |  
62 -| **QQ音乐弹幕** | 正向高频:**转音杀疯** | 重复刷屏2000+ |  
63 -| **B站** | 技术贴澄清↑ | 耳返事故±20音分分析 |  
64 -| **猫眼想看** | 路人占比27%→**新峰值** | “想验货”关键词突增 |  
65 -  
66 ----  
67 -  
68 -## 💰 五、商业价值:品牌“边爱边怕”的冰与火  
69 -  
70 -### 带货高光  
71 -- **马嘉祺×国际护肤**  
72 - ▪️ 48h销量4.2万单,**破男士线纪录**  
73 -- **宋亚轩×轻奢珠宝**  
74 - ▪️ 10天完成**月销售KPI**  
75 -  
76 -### 风险暗涌  
77 -| **维度** | **2023** | **2024** | **信号** |  
78 -|---|---|---|---|  
79 -| 舆情风险权重 | 15% | 28% | ↑红字警告 |  
80 -| 续约赞成票 | 78% | 53% | **团史最低** |  
81 -| 舆情保险预算 | 0 | 已列入多家合同 | 70%损失覆盖 |  
82 -  
83 -> **品牌方匿名语录**  
84 -> “能带货也要能睡得着觉”——考察期从3个月拉长至6个月  
85 -  
86 ----  
87 -  
88 -## 🔚 结论:在“完美”与“真实”之间  
89 -1. **民意本质**  
90 - 舞台滤镜越完美,现实放大镜越苛刻。舆情死结不在业务,而在“人”——私生困扰与粉丝管理是两大高压线。  
91 -2. **群体情绪**  
92 - - 粉丝:从“护他完美”转向**“陪他变好”**  
93 - - 路人:从“群嘲”到“观望”,**二次机会窗口已出现**  
94 -3. **商业风向**  
95 - 带货力仍是硬通货,但“**不翻车**”成为稀缺资源。**短约+退出条款+舆情保险**将成为新常态。  
96 -  
97 -> **最动人注脚**  
98 -> “我们爱的是舞台上的光,但光背后的人也需要被保护。”——1.6万赞的知乎留言,或许才是数据背后最真实的体温。  
1 -# 2023-2024时代少年团舆情深度洞察报告  
2 -> **“光与裂缝”:当少年成为放大镜下的全民议题**  
3 -  
4 ----  
5 -  
6 -## 🔍 一、舆论全景:一条“情绪过山车”  
7 -| **指标** | **2023** | **2024** | **变化** |  
8 -|---|---|---|---|  
9 -| 正面情感 | 54% | 60% | ↑6pp |  
10 -| 负面情感 | 28% | 25% | ↓3pp |  
11 -| 私生相关日均话题量 | 1.4万 | 2.3万 | ↑64% |  
12 -| 豆瓣“脱粉回踩”帖环比 | — | +180% | — |  
13 -  
14 -> **关键词云两极**  
15 -> 正面:**少年感**、**全开麦稳**、**双向奔赴**  
16 -> 负面:**私生**、**麦麸**、**站桩唱**、**粉丝互撕**  
17 -  
18 -**🔥 最滚烫场景**  
19 -- **上海“加冠礼”演唱会**  
20 - ▪️ 深圳18岁女孩手绘应援扇→92万赞  
21 - ▪️ 马嘉祺《写你》舞台弹幕“泪目”刷屏→3.7亿阅读  
22 -  
23 -**💔 最刺痛场景**  
24 -- **演唱会安检风波**  
25 - ▪️ 话题#时团上海演唱会安检无底线#24h阅读**3亿**  
26 - ▪️ 粉丝哭诉视频弹幕“霸凌”刷屏→900万播放  
27 -  
28 ----  
29 -  
30 -## ⚔️ 二、粉丝文化 × 路人观感:冲突现场实录  
31 -  
32 -| **冲突场景** | **粉丝逻辑** | **路人反弹** | **数据注脚** |  
33 -|---|---|---|---|  
34 -| **广州地铁应援贴纸** | “只贴3小时,天亮就撕” | “地铁牛皮癣” | 投诉量↑300% |  
35 -| **《花少7》弹幕刷屏** | “表达爱意” | “关弹幕保智商” | 弹幕密度10秒7次 |  
36 -| **酸奶代言控评** | “感谢金主霸霸” | 官方被迫关评 | 负向情感32% |  
37 -  
38 -> **豆瓣高赞提问**  
39 -> 《粉丝能不能别抢我回家地铁?》→热榜第5  
40 -  
41 ----  
42 -  
43 -## 📉 三、成员危机复盘:以“307”事件为例  
44 -  
45 -| **阶段** | **舆情温度** | **关键动作** | **民意拐点** |  
46 -|---|---|---|---|  
47 -| **爆发** | -68 | 112字声明被批模版 | “学霸人设翻车”47万赞 |  
48 -| **裂缝** | -42 | B站《这一年他有多累》380万播放 | “复读”“等你”抬头 |  
49 -| **转折** | -5 | 素颜中戏报名被偶遇 | “给小孩第二次机会”58万赞 |  
50 -| **长尾** | +17 | 粉丝自律打卡群“今日学习8h” | 舆情回正 |  
51 -  
52 -> **金句**  
53 -> “对307的恶意,其实是对自己失败的投射。”——知乎匿名答主3.4万赞  
54 -  
55 ----  
56 -  
57 -## 🎧 四、作品口碑:流量放大镜下的舞台质检  
58 -  
59 -| **平台** | **评分/情感** | **关键评论** |  
60 -|---|---|---|  
61 -| **豆瓣** | 5.7(五星&一星各40%) | “编曲野心大,人声撑不起” |  
62 -| **QQ音乐弹幕** | 正向高频:**转音杀疯** | 重复刷屏2000+ |  
63 -| **B站** | 技术贴澄清↑ | 耳返事故±20音分分析 |  
64 -| **猫眼想看** | 路人占比27%→**新峰值** | “想验货”关键词突增 |  
65 -  
66 ----  
67 -  
68 -## 💰 五、商业价值:品牌“边爱边怕”的冰与火  
69 -  
70 -### 带货高光  
71 -- **马嘉祺×国际护肤**  
72 - ▪️ 48h销量4.2万单,**破男士线纪录**  
73 -- **宋亚轩×轻奢珠宝**  
74 - ▪️ 10天完成**月销售KPI**  
75 -  
76 -### 风险暗涌  
77 -| **维度** | **2023** | **2024** | **信号** |  
78 -|---|---|---|---|  
79 -| 舆情风险权重 | 15% | 28% | ↑红字警告 |  
80 -| 续约赞成票 | 78% | 53% | **团史最低** |  
81 -| 舆情保险预算 | 0 | 已列入多家合同 | 70%损失覆盖 |  
82 -  
83 -> **品牌方匿名语录**  
84 -> “能带货也要能睡得着觉”——考察期从3个月拉长至6个月  
85 -  
86 ----  
87 -  
88 -## 🔚 结论:在“完美”与“真实”之间  
89 -1. **民意本质**  
90 - 舞台滤镜越完美,现实放大镜越苛刻。舆情死结不在业务,而在“人”——私生困扰与粉丝管理是两大高压线。  
91 -2. **群体情绪**  
92 - - 粉丝:从“护他完美”转向**“陪他变好”**  
93 - - 路人:从“群嘲”到“观望”,**二次机会窗口已出现**  
94 -3. **商业风向**  
95 - 带货力仍是硬通货,但“**不翻车**”成为稀缺资源。**短约+退出条款+舆情保险**将成为新常态。  
96 -  
97 -> **最动人注脚**  
98 -> “我们爱的是舞台上的光,但光背后的人也需要被保护。”——1.6万赞的知乎留言,或许才是数据背后最真实的体温。  
1 -# 2023-2024时代少年团舆情深度洞察报告  
2 -> **“光与裂缝”:当少年成为放大镜下的全民议题**  
3 -  
4 ----  
5 -  
6 -## 🔍 一、舆论全景:一条“情绪过山车”  
7 -| **指标** | **2023** | **2024** | **变化** |  
8 -|---|---|---|---|  
9 -| 正面情感 | 54% | 60% | ↑6pp |  
10 -| 负面情感 | 28% | 25% | ↓3pp |  
11 -| 私生相关日均话题量 | 1.4万 | 2.3万 | ↑64% |  
12 -| 豆瓣“脱粉回踩”帖环比 | — | +180% | — |  
13 -  
14 -> **关键词云两极**  
15 -> 正面:**少年感**、**全开麦稳**、**双向奔赴**  
16 -> 负面:**私生**、**麦麸**、**站桩唱**、**粉丝互撕**  
17 -  
18 -**🔥 最滚烫场景**  
19 -- **上海“加冠礼”演唱会**  
20 - ▪️ 深圳18岁女孩手绘应援扇→92万赞  
21 - ▪️ 马嘉祺《写你》舞台弹幕“泪目”刷屏→3.7亿阅读  
22 -  
23 -**💔 最刺痛场景**  
24 -- **演唱会安检风波**  
25 - ▪️ 话题#时团上海演唱会安检无底线#24h阅读**3亿**  
26 - ▪️ 粉丝哭诉视频弹幕“霸凌”刷屏→900万播放  
27 -  
28 ----  
29 -  
30 -## ⚔️ 二、粉丝文化 × 路人观感:冲突现场实录  
31 -  
32 -| **冲突场景** | **粉丝逻辑** | **路人反弹** | **数据注脚** |  
33 -|---|---|---|---|  
34 -| **广州地铁应援贴纸** | “只贴3小时,天亮就撕” | “地铁牛皮癣” | 投诉量↑300% |  
35 -| **《花少7》弹幕刷屏** | “表达爱意” | “关弹幕保智商” | 弹幕密度10秒7次 |  
36 -| **酸奶代言控评** | “感谢金主霸霸” | 官方被迫关评 | 负向情感32% |  
37 -  
38 -> **豆瓣高赞提问**  
39 -> 《粉丝能不能别抢我回家地铁?》→热榜第5  
40 -  
41 ----  
42 -  
43 -## 📉 三、成员危机复盘:以“307”事件为例  
44 -  
45 -| **阶段** | **舆情温度** | **关键动作** | **民意拐点** |  
46 -|---|---|---|---|  
47 -| **爆发** | -68 | 112字声明被批模版 | “学霸人设翻车”47万赞 |  
48 -| **裂缝** | -42 | B站《这一年他有多累》380万播放 | “复读”“等你”抬头 |  
49 -| **转折** | -5 | 素颜中戏报名被偶遇 | “给小孩第二次机会”58万赞 |  
50 -| **长尾** | +17 | 粉丝自律打卡群“今日学习8h” | 舆情回正 |  
51 -  
52 -> **金句**  
53 -> “对307的恶意,其实是对自己失败的投射。”——知乎匿名答主3.4万赞  
54 -  
55 ----  
56 -  
57 -## 🎧 四、作品口碑:流量放大镜下的舞台质检  
58 -  
59 -| **平台** | **评分/情感** | **关键评论** |  
60 -|---|---|---|  
61 -| **豆瓣** | 5.7(五星&一星各40%) | “编曲野心大,人声撑不起” |  
62 -| **QQ音乐弹幕** | 正向高频:**转音杀疯** | 重复刷屏2000+ |  
63 -| **B站** | 技术贴澄清↑ | 耳返事故±20音分分析 |  
64 -| **猫眼想看** | 路人占比27%→**新峰值** | “想验货”关键词突增 |  
65 -  
66 ----  
67 -  
68 -## 💰 五、商业价值:品牌“边爱边怕”的冰与火  
69 -  
70 -### 带货高光  
71 -- **马嘉祺×国际护肤**  
72 - ▪️ 48h销量4.2万单,**破男士线纪录**  
73 -- **宋亚轩×轻奢珠宝**  
74 - ▪️ 10天完成**月销售KPI**  
75 -  
76 -### 风险暗涌  
77 -| **维度** | **2023** | **2024** | **信号** |  
78 -|---|---|---|---|  
79 -| 舆情风险权重 | 15% | 28% | ↑红字警告 |  
80 -| 续约赞成票 | 78% | 53% | **团史最低** |  
81 -| 舆情保险预算 | 0 | 已列入多家合同 | 70%损失覆盖 |  
82 -  
83 -> **品牌方匿名语录**  
84 -> “能带货也要能睡得着觉”——考察期从3个月拉长至6个月  
85 -  
86 ----  
87 -  
88 -## 🔚 结论:在“完美”与“真实”之间  
89 -1. **民意本质**  
90 - 舞台滤镜越完美,现实放大镜越苛刻。舆情死结不在业务,而在“人”——私生困扰与粉丝管理是两大高压线。  
91 -2. **群体情绪**  
92 - - 粉丝:从“护他完美”转向**“陪他变好”**  
93 - - 路人:从“群嘲”到“观望”,**二次机会窗口已出现**  
94 -3. **商业风向**  
95 - 带货力仍是硬通货,但“**不翻车**”成为稀缺资源。**短约+退出条款+舆情保险**将成为新常态。  
96 -  
97 -> **最动人注脚**  
98 -> “我们爱的是舞台上的光,但光背后的人也需要被保护。”——1.6万赞的知乎留言,或许才是数据背后最真实的体温。