差评语义归因分析工具包
版本:v2.0
用途:将餐饮门店评价数据中的差评进行语义归因,通过关键词匹配自动打上 38 个细分标签,输出结构化的 Excel 分析报告,支持竞品对比和学城XML输出。
适用:单城市/多城市最多 18 Sheet 报告 + 竞品对比 + 学城 XML。
一、环境准备
1. 安装 Python 3.8+
确认已安装 Python,然后安装依赖库:
pip install pandas openpyxl
二、文件说明
| 文件 | 说明 |
|------|------|
| analyze.py | 核心分析脚本,命令行直接运行 |
| SKILL.md | Skill 描述文件 |
| README.md | 本说明文档 |
三、使用方法
命令行运行
python analyze.py <输入xlsx文件路径> [城市名] [输出目录] [--brand 品牌名] [--compare 竞品1.xlsx 竞品2.xlsx] [--xuecheng]
示例
# 基本用法:分析深圳门店评价数据
python analyze.py /data/深圳评价明细.xlsx 深圳 /output
# 指定品牌名称
python analyze.py /data/深圳评价明细.xlsx 深圳 /output --brand 海底捞
# 竞品对比:主品牌 vs 竞品A vs 竞品B
python analyze.py /data/海底捞评价.xlsx --brand 海底捞 --compare /data/巴奴评价.xlsx /data/呷哺评价.xlsx
# 同时生成学城XML文档
python analyze.py /data/深圳评价明细.xlsx 深圳 --xuecheng
# 全部功能组合
python analyze.py /data/海底捞评价.xlsx 深圳 /output --brand 海底捞 --compare /data/巴奴.xlsx --xuecheng
四、输入数据要求
支持两种输入类型
- 全量评价数据(推荐):包含好评+差评的完整评价表,脚本会自动筛选差评
- 已是差评明细:文件名含「差评」「中差评」「极差评」「bad」等关键词,脚本会直接读取不做筛选
必需字段(列名会自动识别)
| 字段 | 候选列名(脚本自动匹配) | |------|------------------------| | 评价原文 | 评论正文、评价内容、评论内容、内容、content、review | | 综合评分 | 综合评分、评分、score、星级、总评分 | | 来源平台 | 平台名称、来源、平台、source、渠道、评价来源 | | 门店名称 | 门店名称、店铺名称、店名、store_name、storename、store、门店 | | 评价时间 | 评价时间、评论时间、时间、date、日期、创建时间 | | 精选标记 | 评论状态、是否精选、精选、selected、精选标记 | | 城市名称 | 城市名称、城市、city |
列名识别采用四轮优先级:精确匹配 → 结尾匹配 → 开头匹配 → 包含匹配(跳过 ID 列)
五、差评筛选规则
自动判断评分制度
脚本根据原始数据的最大评分值自动判断评分制度:
| 原始最大分 | 评分制度 | 差评阈值 | 极差评阈值 | |-----------|---------|---------|-----------| | > 40 | 50 分制 | < 20 | ≤ 10 | | > 10 | 100 分制 | < 40 | ≤ 20 | | > 0 | 5 分制 | ≤ 3.5 | ≤ 2 |
筛选条件(全量数据时)
- dp(大众点评):精选评论(
评论状态含「精选」且不含「非精选」) - mt(美团):全部评论
- 综合评分低于阈值(见上表)
若筛选后差评数 < 10 条,自动退回只用评分条件(忽略平台/精选条件)
六、标签体系(9 大维度 × 38 细分标签)
| 维度 | 细分标签 | |------|---------| | 口味问题(7) | 口味偏淡、口味偏咸、口味偏辣、口味偏酸、口味偏油、口味不正、口味偏甜 | | 食材/品质(5+1) | 食材不新鲜、分量不足、品质下滑、食材有问题、未熟/过熟、食品安全 | | 服务问题(5) | 服务态度差、上菜慢、服务不专业、催单/催位、米饭问题 | | 等位问题(1) | 排队等位 | | 环境问题(6) | 环境嘈杂、环境卫生差、空间拥挤、停车不便、营业信息有误、环境温度差 | | 价格问题(5) | 价格偏高、价格上涨、隐形消费、优惠套餐问题、退款售后问题 | | 菜品问题(4) | 菜品售罄、菜品单一、菜品温度差、菜品与描述不符 | | 预期落差(1) | 预期落差 | | 其他(3) | 外卖问题、优惠/活动问题、结账问题 |
每条差评可命中多个标签,未命中任何标签的标记为「未分类」
七、输出报告结构
基础报告(最多 12 个 Sheet)
| Sheet | 名称 | 内容 | |-------|------|------| | 1 | 差评归因总览 | 维度汇总 + 细分标签逐行 + 典型原声 + 维度级汇总 | | 2 | 门店差评分布 | 门店排名(极差评/中差评/逐月/主要问题)+ 门店×维度交叉矩阵 | | 3 | 标签明细-频次排名 | 所有细分标签按频次降序,含占比、所属维度、示例原文 | | 4 | 月度趋势 | 维度×月份数量矩阵 + 趋势判断(首尾对比,↑恶化 ↓好转) | | 5 | 差评原文明细 | 全量差评原文,含门店/平台/月份/评分/分级/主归因/命中标签 | | 6 | 门店排名-差评集中度 | 按差评数量排名的门店列表,含 TOP3 问题标签和示例原文 | | 7 | 重点问题洞察 | 每个维度:核心问题描述 + 消费者原声(3 条)+ 改善建议 | | 8 | 城市店均差评归因 | 多城市时自动生成,按城市门店数倒序 | | 9 | 食品安全分级 | 有食安问题时生成,按红/橙/黄/绿严重度排序 | | 10 | 改善建议 | 按餐前/餐中/餐后/服务全程分组,含严重度和预期效果 | | 11 | 菜品口碑 | 动态提取高频菜品词 TOP20,标注口碑良好/一般/较差 | | 12 | 门店预警 | 全量数据时生成,好评率分级着色 🟢🟡🔴 |
v2.0 新增 Sheet
| Sheet | 名称 | 内容 | |-------|------|------| | 13 | 月度异动检测 | 环比波动 ≥50% 标红预警 + 自动关联原因(门店集中/新增门店/主要标签) | | 14 | 关键词自学习 | 未分类原文高频词自动发现,高置信度词自动追加重跑,压降未分类率 | | 15 | 门店交叉对比 | 同品牌门店差评维度热力图 + 品牌通病 vs 个别门店问题诊断 | | 16 | 好评亮点 | 好评高频正面词 TOP25 + 频次占比 + 典型好评原声 | | 17 | 情感强度分析 | 1-5级情感打分分布 + 高危评论 TOP20(情感≥4级优先处理) | | 18 | 竞品对比分析 | 多品牌维度占比对比 + TOP20标签对比 + 竞品洞察(需 --compare) | | - | 未分类原文 | 未分类率 >0% 时生成 |
学城 XML 输出(需 --xuecheng)
同时生成 .xml 文件,包含数据概览、归因维度分布表、月度异动预警、分环节改善建议,可直接粘贴到学城文档。
八、v2.0 新增功能详解
1. 关键词自学习
自动从未分类评论中提取 2-4 字高频词组(频次≥5),与已有标签规则做相似度匹配,高置信度的自动追加到标签规则并重跑打标。典型效果:未分类率可下降 5-15 个百分点。
2. 月度异动检测
对 9 大维度按月统计差评数,计算环比变化率。波动 ≥50% 的维度标红预警,并自动分析可能原因(是否集中在某门店、是否新增门店贡献、哪个细分标签突增)。
3. 门店交叉对比
差评 ≥5 条的门店(最多 TOP15)做横向对比,生成维度占比热力图。自动诊断每个维度是「品牌通病」(标准差<5,所有门店都有)还是「个别门店问题」(标准差≥10,集中在少数门店)。
4. 好评亮点提取
从全量评价的好评中提取高频正面词 TOP25(排除差评相关停用词),配合典型好评原声展示,帮助品牌提炼营销卖点。
5. 评论情感强度分析
基于关键词、文本长度、标点密度的三维打分模型(1-5级),识别最严重的差评。级别5=涉及投诉举报/身体伤害,级别4=情绪激动/措辞激烈。高危评论 TOP20 按强度降序展示,方便优先处理。
6. 竞品对比分析
通过 --compare 传入竞品 xlsx 文件,与主品牌一起做 9 大维度和 TOP20 标签的占比对比。维度差异 ≥5pp 自动标红,并生成竞品洞察摘要。
7. 学城 XML 输出
通过 --xuecheng 生成学城文档格式的分析报告,包含数据概览、归因维度分布表、月度异动预警、分环节改善建议四个章节。
九、配色方案
| 用途 | 颜色 | |------|------| | 标题行 | 深蓝 #1F3864 | | 表头 | 中蓝 #2E75B6 | | 红色预警(高频/极差评/店均≥5/异动飙升/竞品差异大) | 背景 #FCE4D6 / #FFC7CE | | 绿色正面(好转/已追加/低危) | 背景 #C6EFCE | | 黄色洞察/中等 | 背景 #FFF2CC | | 灰色分区 | 背景 #F2F2F2 | | 维度交替色 | 9 种浅色交替填充 |
十、注意事项
- 评分制度判断:必须用原始数据的最大分判断,不能用筛选后的差评数据
- 门店名称识别:
find_col四轮匹配可防止 ID 列被误命中 - 多城市 Sheet8:只要城市名称列存在且城市数 ≥ 2,自动生成
- 关键词自学习:会修改运行时的 LABEL_RULES 全局变量,不会修改源代码文件
- 门店交叉对比:需要门店名称列且差评 ≥5 条的门店 ≥2 家
- 竞品对比:需要至少 2 个有效品牌数据文件(含主文件)
- 同一条评价可命中多个标签,统计时按标签展开计数
- 若筛选后差评数 < 10 条,自动退回只用评分条件
- 未分类率超过 30% 时,建议审阅「关键词自学习」Sheet 中的候选关键词
十一、输出示例
运行完成后,控制台会输出关键发现:
读取文件: /data/海底捞评价.xlsx
差评数量: 1561 条
关键词自学习: 自动新增8个关键词,未分类从511条降至423条
食品安全问题: 23 条(红色3 / 橙色8 / 黄色7 / 绿色5)
标签覆盖率: 72.9%(未分类: 423 条)
TOP5标签: [('预期落差', 361), ('上菜慢', 175), ...]
竞品对比: 已生成 3 个品牌对比分析
报告已保存: /output/深圳海底捞-差评归因分析报告.xlsx
共生成 18 个 Sheet: 差评归因总览, 门店差评分布, ...
TOP3问题: 预期落差(361条/23.1%) > 上菜慢(175条/11.2%) > 分量不足(155条/9.9%)
学城文档已保存: /output/深圳海底捞-差评归因分析报告.xml
十二、扩展与定制
添加新标签
在 analyze.py 中修改 LABEL_RULES 字典,添加新的关键词:
LABEL_RULES = {
# ... 现有标签
'新标签名称': ['关键词1', '关键词2', '关键词3'],
}
同时需要在 DIMENSION_MAP 中将新标签归入对应维度。
调整情感强度关键词
修改 INTENSITY_BOOSTERS 字典中的关键词来调整情感强度识别。
修改改善建议
在 DINING_PHASE_MAP 中修改或添加用餐环节的改善建议。
十三、技术支持
如有问题或建议,请联系工具作者。
微信扫一扫