返回 Skill 列表
extension
分类: 数据与分析无需 API Key

定向舆情分析

【定向舆情监测】麦麦科技-AI事业群基于已交付项目沉淀的舆情监测场景:面向多行业的定向舆情监测,用户指定监测目标与数据源,通过网站定向抓取与搜索引擎基础数据源双通道采集(开箱可用,无外部服务依赖),脚本化完成去重、情感、风险与热点分析,一键生成 HTML 舆情看板。行业关键词与数据源参数化配置,一套骨架适配多行业。Trigger on: 舆情监测/舆情监控/定向舆情/指定网站舆情/行业舆情/舆情看板/指定来源采集/搜索引擎舆情采集/public opinion monitoring/opinion tracking.

person作者: user_2c775edbhubcommunity

定向舆情监测

麦麦科技-AI事业群基于已交付项目沉淀的舆情监测场景:面向多行业的定向舆情监测,指定来源采集 → 脚本化分析 → HTML 舆情看板,行业参数化一套骨架适配多行业。

一、这个技能解决什么(企业场景)

多数舆情需求不是「全网搜一下」,而是「看这几个指定来源」——行业站、监管公告、指定媒体、竞品官网。泛搜式工具无法精确指定来源,也覆盖不到搜索引擎未收录的站点。

本技能以「用户指定数据源」为采集核心,把监测动作固化为可复现的脚本流水线:确认配置 → 双通道采集 → 去重与硬过滤 → 情感/风险/热点分析 → 人工复核固化 → HTML 看板交付。行业差异(关键词库 + 数据源模板)通过参数化配置切换,不改写工作流,一套骨架适配多行业。

一个技能解决一个完整业务流,不做工具集合包。

二、什么时候用 / 什么时候不要用

适用

  • 用户指定了具体网站/来源(「看 xx网、xx论坛 这几个来源」)
  • 用户要求做某行业的舆情监测
  • 用户要求采集指定来源数据并展示舆情看板
  • 用户只要基础数据源(「不要行业网站,用搜索引擎即可」)→ 走 B 通道 bing_adapter.py

不适用(请转专业渠道)

  • 「全网搜一下 XX 的舆情」「每天早上推送」的泛搜 + 定时需求 → 转 sentiment-monitor
  • 需要社交媒体全量数据(微信/抖音全站)→ 公开抓取覆盖不足,需商业数据源
  • 需要秒级实时预警 → 本技能为周期性批量监测

三、能力地图

| 模块 | 做什么 | 产出 | |---|---|---| | 配置生成 | 按行业模板拼装关键词库与数据源池,避免手敲长 JSON | config.json | | A 通道采集 | 指定网站定向抓取,自动进详情页提取日期与正文摘要 | raw_crawl.json | | B 通道采集 | 搜索引擎基础数据源抓取,双层黑名单过滤官网霸屏与非新闻页 | raw.json | | 数据合并 | 多来源合并,URL 精确去重 + 标题相似度去重 | raw.json | | 清洗分析 | 时间硬过滤、情感分类、风险评级、主题聚类 | analysis_stage.json | | 修正固化 | corrections/topic_map 覆写误判,源名归一化 | analysis.json | | 看板渲染 | 单文件自包含 HTML,ECharts 内联离线可用 | dashboard.html |

四、标准流程

数据流(可复现)config.json → crawl_sites.py → raw_crawl.json → merge_sources.py(+补充数据) → raw.json → analyze.py → analysis_stage.json → postprocess.py(+corrections/+topic_map) → analysis.json → generate_dashboard.py → dashboard.html

步骤 1 · 确认监测配置

向用户确认以下参数,缺省项给默认值并告知:

  • 行业(必填):选择行业模板(见 references/industry_keywords.md),决定默认关键词库与数据源模板;无匹配行业时按「通用」处理并自定义关键词
  • 监测对象(必填):品牌/主体/产品/事件关键词,支持多关键词与组合(AND/OR)
  • 数据源清单(必填):站点列表(https://example.com/news 或域名,可含路径)或来源类型(官网公告/行业媒体/论坛/社交媒体账号);未指定时按 references/data_sources.md「企业版爬取网站清单」生成默认池(基础必爬池 + 行业追加池),生成后回显清单让用户确认/裁剪
  • 时间范围(必填):由用户明确指定;未指定默认最近 7 天并告知(自然语言解析规则见 references/implementation_notes.md
  • 情感重点(可选):全面分析 / 仅负面预警 / 仅热点聚合,默认全面分析
  • 展示要求(可选):看板包含的模块,默认全部

注:当前脚本按「全面分析 + 完整模块」生成,情感重点/展示要求的裁剪需人工筛选或后续扩展脚本参数。

⚡ 配置秒建(避免手敲长 JSON):确认完参数后用 scripts/build_config.py 一行生成 config.json,自动按行业模板拼装默认池站点 + 风险词/正面词:

python scripts/build_config.py \
  --industry "汽车" \
  --objects "XX集团,XX汽车,XX智驾" \
  --start 2026-08-20 --end 2026-08-26 \
  --output config.json

可选 --extra-risk/--extra-pos/--extra-objects 追加自定义词;品牌全域监测默认带上跨行业补充风险词。生成后直接喂 crawl_sites.py

步骤 2 · 数据获取(双通道,可并行)

A 通道 · 指定网站定向抓取

  • python scripts/crawl_sites.py --input config.json --output raw.json
  • config.json 格式见 references/data_sources.md(站点 URL、选择器/匹配规则、max_pagesrate_limit
  • 脚本默认进入详情页抓正文摘要与发布日期,失败条目降级为标题记录并记入 needs_manual_fetch
  • 抓取前检查:只抓公开信息、不抓登录后/付费墙内容、单站频率限制(默认 ≤2 req/s);robots.txt 与站点条款由执行者人工确认

B 通道 · 搜索引擎基础数据源(bing_adapter.py)

  • 适用场景:用户不要行业指定站点、只要基础来源,或 A 通道目标站被反爬拦截需换基础来源
  • crawl_sites.py 不识别搜索引擎结果页结构,用 scripts/bing_adapter.py 抓 Bing 通用搜索结果:
    python scripts/bing_adapter.py \
      --objects "XX集团,XX汽车" \
      --keywords "XX,XX 投诉,XX 召回,XX 财报" \
      --start 2026-08-24 --end 2026-08-30 \
      --blacklist "xx.com,xxauto.com" \
      --url-block "/config/,/tag/,stockpage" \
      --output output/raw.json
    
  • 双层黑名单必须配--blacklist 拦官网/仿冒站域名霸屏,--url-block 拦非新闻页面;方法论与已知限制见 references/data_sources.md「搜索引擎基础数据源」
  • 产出直接对齐 raw.json 格式,跳过 merge_sources.py 直接连 analyze.py

统一输出:各通道结果合并为统一结构 raw.json(字段见 references/data_sources.md),通道来源标注 channel: crawl

多来源合并:A 通道输出 raw_crawl.json,人工补充数据整理为 supplements.jsonl(每行一条 {title, source, url, publish_date, content_excerpt})后合并(URL 精确去重 + 标题相似度去重 >0.85,--supplement 可传多个文件,也支持 .json 数组格式):

python scripts/merge_sources.py \
  --crawl raw_crawl.json \
  --supplement supplements.jsonl \
  --output raw.json

步骤 3 · 清洗与原始分析(analyze.py)

python scripts/analyze.py --input raw.json --output analysis_stage.json

脚本一次完成(替代模型脑内手工分析),产出原始分析(词库自动判定,未做人工修正):去重(URL + 标题相似度 Dice >0.85)、时间过滤(超出 meta.time_range 丢弃,无日期标 needs_review)、情感分类(内置词库 + config 行业词库)、风险评级(强风险词→高,负面词→中,其余→低)、主题聚类(输出 topics 含来源数/情感/brief)。

词库自动判定对「造谣案侦破/依法维权」等反转型表述易误判。不要手工逐条改结果——用步骤 4 的 postprocess.py 固化修正。

行业视角:在 config.json 的 risk_keywords / positive_keywords 传入行业风险词(从 references/industry_keywords.md 选取),分析结论中突出行业相关风险。

步骤 4 · 后处理与人工复核(postprocess.py,固化修正)

python scripts/postprocess.py --input analysis_stage.json --corrections references/corrections_default.json --topic-map references/topic_map_default.json --output analysis.json

  • corrections:按标题子串匹配覆写情感/风险/主题(优先级最高),默认内置反转型表述修正与监管类风险提级规则
  • topic_map{keyword: topic} 主题映射,替代 analyze.py 的碎类贪心聚类,产出稳定可读的聚类
  • source_norm:源名归一化,从 url 域名派生干净源名,避免脏数据污染「来源 TOP5」
  • 脚本自动重建 topics 聚合与 stats

文件格式与默认规则说明见 references/implementation_notes.md

人工仅需处理 needs_review:对无日期/正文缺失条目用 web_fetch 补抓或人工判断;若发现新的词库误判,把规则补进 corrections/topic_map(可传专属文件如 corrections_xiaomi.json,不污染默认文件),下次自动生效,不再逐条手工改结果

步骤 5 · 生成 HTML 舆情看板

python scripts/generate_dashboard.py --input analysis.json --output dashboard.html --industry {行业} [--objects ".."]

看板为赛博风深色视觉默认模板(样式/交互内嵌在脚本中,改样式优先改脚本而非产物 HTML),自包含单 HTML 文件(echarts.min.js 内联,离线可用)。模块包含:舆情概览 KPI、总量趋势、情感分布、风险等级、来源 TOP5、主题聚类、高风险事件清单、明细列表(筛选/排序/跳源)、吸顶导航与目录浮窗;图表元素均可点击联动筛选。完整模块清单与交互说明见 references/implementation_notes.md

assets/echarts.min.js 必须随技能一起拷贝,缺失则图表全空。

步骤 6 · 交付与存档

  • 交付 HTML 看板文件 + 分析数据 JSON(analysis.json)双份
  • 如用户需要文字版摘要,同时输出 Markdown 摘要(≤2000 字):概览、热点 TOP3、风险预警、趋势判断
  • 记录本次监测配置(行业/对象/数据源/时间范围),便于下次复用或增量监测

五、怎么用(输入→产出)

把监测目标、数据源和时间窗发给本技能,例如:

  • 「监测 XX 集团的舆情,看 xx网、xx论坛 这几个来源,最近 7 天」
  • 「做一份汽车行业的舆情周报,出看板」
  • 「不要行业网站,用搜索引擎采集 XX 的舆情」
  • 「把这几个指定来源的数据抓下来,做个舆情看板」

输入:行业 + 监测对象 + 数据源清单 + 时间范围 产出dashboard.html(舆情看板)+ analysis.json(分析数据)+ 可选 Markdown 摘要

六、输出样例

  • dashboard.html:单文件自包含舆情看板,含概览 KPI、趋势、情感分布、风险等级、来源 TOP5、主题聚类、高风险清单、明细列表
  • analysis.json:清洗后的结构化数据,含每条记录的来源/日期/情感/风险/主题,以及 topicsstats 聚合
  • Markdown 摘要(可选):概览、热点 TOP3、风险预警、趋势判断,≤2000 字

七、卡点自救

  • 抓取 0 命中 → 先验证命中条数 >0 再往下走;新增站点多为选择器不匹配或编码回落导致,见 references/implementation_notes.md
  • 目标站被反爬拦截 → 换 B 通道 bing_adapter.py 走搜索引擎基础来源
  • 抓取超时 → 运行环境设了 HTTP_PROXY/HTTPS_PROXY 但代理未启动会超时,先 env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY 绕过或确认代理可用
  • 热点聚成一个伪热点 → 用 topic_map 映射替代自动聚类,或用 corrections 覆写
  • 情感误判(反转型表述) → 补进 corrections 文件固化,勿逐条手改结果
  • 看板图表空白 → 检查 assets/echarts.min.js 是否随技能拷贝
  • 看板卡顿 → 明细超 200 条需分页渲染;样式与交互在 generate_dashboard.py 中维护,改产物 HTML 会被下次重生成覆盖

八、质量护栏

  • 只抓公开信息:不采集登录后内容、付费墙内容与个人隐私信息
  • 频率受控:单站默认 ≤2 req/s,避免对目标站造成压力
  • 合规由执行者确认:robots.txt 与站点条款需人工确认,脚本不自动解析
  • 时间过滤不偷懒analyze.py 硬过滤时间范围,但 needs_review 里的无日期条目仍需人工核对,不能默认保留
  • 结果可复现:同一天对同一批数据跑 analyze.py 结果一致;调整判定标准改脚本词库或 corrections,勿手工改结果、勿手写内联脚本重分类/重聚类
  • 不承诺全网完整:本技能只覆盖用户指定来源,无法保证全网完整,需向用户说明局限

九、与其他技能的边界

| 维度 | 本技能 | sentiment-monitor | |---|---|---| | 数据获取 | 定向:用户指定网站/来源 + 搜索引擎采集 | 泛搜:web_search + site: 全网搜索 | | 来源可控性 | 精确指定,可覆盖搜索引擎未收录站点 | 依赖搜索引擎索引 | | 输出 | HTML 舆情看板(趋势/情感/热词/来源/预警) | HTML 报告 + 定时推送 | | 典型场景 | 「监测 XX 行业舆情,看 xx网、xx论坛」 | 「全网搜一下 XX 舆情,每天早上推送」 |

两者互补不冲突:需要「全网搜索 + 定时推送」走 sentiment-monitor;需要「指定来源 + 行业看板」走本技能。

十、检查清单(看板交付前自检)

| 序号 | 检查项 | 通过标准 | 未通过处理 | |---|---|---|---| | 1 | 监测配置确认 | 行业/对象/数据源/时间范围四项已与用户确认 | 回到步骤 1 补齐 | | 2 | 采集命中验证 | 各通道命中条数 >0,无静默 0 命中 | 检查选择器/黑名单/编码 | | 3 | 时间窗核对 | needs_review 无日期条目已人工核对 | 补抓或人工判定 | | 4 | 去重生效 | 已执行 URL + 标题双重去重 | 补跑 merge_sources.py | | 5 | 修正已固化 | 误判已写入 corrections/topic_map,非手工改结果 | 回步骤 4 固化 | | 6 | 看板完整性 | 图表全部渲染,无空白模块 | 检查 assets/echarts.min.js | | 7 | 合规确认 | 目标站 robots.txt 与条款已人工确认 | 停止采集并告知用户 |

交付前逐项核对,全部通过后方可提交。

十一、行业参数化

行业差异通过两个参数层切换,不修改工作流

  1. 行业关键词库references/industry_keywords.md 预置政务、金融、快消、汽车、医疗、地产、互联网等模板(监测对象类词 + 风险词 + 关注维度);自定义行业按模板补全
  2. 行业数据源模板references/data_sources.md 预置各行业常见数据源(监管网站、行业媒体、论坛、评测平台);指定来源时直接匹配,未覆盖来源按通用站点规则适配

十二、参考文件索引

| 文件 | 用途 | 何时加载 | |---|---|---| | references/implementation_notes.md | 时间解析规则、corrections/topic_map 文件格式、看板模块清单、编码/聚类/性能等实现层注意事项 | 需要实现细节时按需加载 | | references/data_sources.md | 数据源池、站点配置格式、搜索引擎基础数据源方法论与双层黑名单 | 步骤 1 生成数据源、配置 B 通道时加载 | | references/industry_keywords.md | 行业关键词库模板 | 步骤 1 选行业时加载 | | references/corrections_default.json | 默认情感/风险修正规则 | 步骤 4 后处理默认加载 | | references/topic_map_default.json | 默认主题映射表 | 步骤 4 后处理默认加载 | | scripts/build_config.py | 一键生成 config.json | 步骤 1 | | scripts/crawl_sites.py | A 通道定向抓取 | 步骤 2 | | scripts/bing_adapter.py | B 通道搜索引擎采集 | 步骤 2 | | scripts/merge_sources.py | 多来源合并去重 | 步骤 2 | | scripts/analyze.py | 清洗去重 + 情感/风险/聚类 | 步骤 3 | | scripts/postprocess.py | 修正固化与源名归一化 | 步骤 4 | | scripts/generate_dashboard.py | HTML 看板渲染(含样式与交互) | 步骤 5 | | assets/echarts.min.js | 看板图表依赖(内联,离线可用) | 由 generate_dashboard.py 自动内联,必须随技能拷贝 |