电商评论自动化分析全栈方案:Python+Coze 实现监控-解析-情感分析一体化
前言
在电商运营(尤其是跨境电商)场景中,用户评论的情感分析、改进点提取是优化商品、提升服务的核心抓手。手动处理海量评论效率低下、易出错,本文将搭建一套零人工干预的自动化评论分析系统,通过 Python 实时监控本地评论文件,结合 Coze 大模型完成结构化分析,最终输出标准 JSON 结果,彻底解决电商评论批量处理的效率痛点,适合运营、开发人员直接复用。
一、方案整体设计
1.1 核心功能
-
目录实时监控:自动监听
input目录,捕获新增 TXT 评论文件,无需手动触发处理 -
评论智能解析:读取 TXT 文件,按行分割评论,自动过滤空行、纯空格等无效内容
-
大模型情感分析:对接 Coze 大模型,完成情感分类(好评/需要改进/差评)、改进点提取、无脑喷识别
-
标准化结果输出:单条评论生成独立 JSON 文件,统一存储至
output目录,便于后续统计分析 -
文件自动归档:处理完成的 TXT 文件自动移至
process目录,避免重复处理,规范文件管理 -
容错兜底机制:大模型调用异常(如权限、超时)时,本地逻辑自动补全分析结果,确保流程不中断
1.2 技术栈
-
开发语言:Python 3.8+(兼容 3.8-3.12 所有版本)
-
大模型平台:Coze(扣子),无需本地部署,调用 API 即可实现情感分析
-
核心依赖库:requests(用于 API 调用)
-
文件架构:3个核心目录(自动创建,无需手动操作)
-
input:存放待处理的 TXT 评论文件(每行一条评论) -
process:存放已处理完成的 TXT 文件,用于归档 -
output:存放生成的 JSON 分析结果(单条评论对应一个 JSON 文件)
-
1.3 运行流程
-
启动 Python 脚本,开始监控
input目录 -
将 TXT 评论文件(每行一条评论)放入
input目录 -
脚本自动读取文件,分割评论,逐条调用 Coze API 进行分析
-
分析完成后,单条评论生成独立 JSON 文件,存入
output目录 -
原始 TXT 文件自动移至
process目录,完成归档 -
若 Coze API 调用失败,触发本地兜底逻辑,确保分析结果正常输出
二、Coze 工作流配置(核心步骤)
无需修改 Coze 底层代码,仅需配置提示词和输入输出格式,即可对接 Python 脚本,实现结构化情感分析。
2.1 角色与任务提示词(直接复制到 Coze)
# 角色定义
你是专业的电商评论分析专家,专注于电商客户评论的情感分析与洞察提取,具备丰富的电商行业知识和消费者心理理解能力。
# 任务目标
分析单条电商客户评论,准确判断情感类型,识别改进方向或不满意点,并输出结构化JSON结果。
# 工作流上下文
- **Input**:单条电商评论文本字符串
- **Process**:
1. 解析评论文本,识别情感倾向与关键词
2. 根据规则判断情感类型(好评/需要改进/差评)
3. 提取具体改进点或不满意点
4. 判断差评是否为无脑喷
5. 生成结构化JSON结果
- **Output**:标准化的情感分析JSON对象
# 约束与规则
- 仅返回JSON格式,不要额外说明、解释
- 所有中文内容无需转义,ensure_ascii=False
- 分析结果需贴合真实电商评论场景,避免过度解读
- 严格按照情感类型分类规则执行
- 缺省值使用空列表[]或false
# 情感类型分类规则
1. **好评**:无负面评价,整体表达满意、推荐、回购等正向情绪
2. **需要改进**:有轻微不满,但核心不否定商品/服务,明确提及可优化的具体方向
3. **差评**:强烈不满、抱怨、指责,分为两种情况:
- 无脑喷:仅含情绪化负面词汇(如"垃圾""太差"),无具体不满意的点,且评论长度≤15字
- 有具体不满:明确指出不满意的具体地方(如物流慢、质量差、包装破损等)
# 过程
1. 读取评论文本,进行分词和情感词识别
2. 综合语气与上下文判断总体情感类型
3. 若为"需要改进",提取1-3个具体改进方向
4. 若为"差评":
- 判断评论长度是否≤15字且无具体不满点 → 标记为无脑喷
- 否则提取具体不满意点
5. 生成当前时间戳(格式:YYYY-MM-DD HH:MM:SS)
# 输出格式
仅返回如下JSON结构(严格遵守,缺省值为空列表/False):
{
"comment_content": "待分析的评论原文",
"emotion_type": "好评/需要改进/差评",
"improvement_points": ["具体改进方向1", "具体改进方向2"],
"negative_details": {
"is_unreasonable_rant": true/false,
"dissatisfaction_points": ["具体不满点1", "具体不满点2"]
},
"analysis_time": "当前时间(格式:YYYY-MM-DD HH:MM:SS)"
}
2.2 Coze 配置关键注意事项
-
输入配置:接收单条评论文本(无需接收文件路径),避免触发文件读取权限问题
-
输出配置:严格按照上述 JSON 格式返回,仅输出 JSON,不添加任何额外文字、注释
-
发布配置:将 Coze 工作流发布为 API 调用模式,获取 API 地址(后续填入 Python 脚本)
-
权限配置:生成 Coze Access Token(勾选「工作流运行」权限),用于 Python 脚本调用验证
三、Python 核心脚本(可直接复制运行)
import os
import json
import time
import shutil
import requests
from datetime import datetime
# ===================== 配置项(仅需修改这2个) =====================
# 替换为你的 Coze 工作流 API 地址(从 Coze 发布页复制)
COZE_API_URL = "替换为你的Coze API地址"
# 替换为你的 Coze Access Token(从 Coze 开发者中心获取)
COZE_TOKEN = "替换为你的Coze Token"
# ===================== 目录配置(不用改) =====================
INPUT_DIR = "./input" # 待处理TXT文件目录
PROCESS_DIR = "./process" # 已处理TXT文件归档目录
OUTPUT_DIR = "./output" # 分析结果JSON输出目录
CHECK_INTERVAL = 5 # 目录监控间隔(秒)
# 请求头(固定格式,无需修改)
HEADERS = {
"Authorization": f"Bearer {COZE_TOKEN}",
"Content-Type": "application/json"
}
# 自动创建3个核心目录(无需手动创建)
for d in [INPUT_DIR, PROCESS_DIR, OUTPUT_DIR]:
os.makedirs(d, exist_ok=True)
# ===================== 核心函数:单条评论分析 =====================
def analyze_single_comment(comment):
"""
调用Coze分析单条评论(仅传评论内容,绕开文件操作,避免权限问题)
若Coze调用失败,触发本地兜底分析逻辑
"""
# 构造请求体:txt_file仅为占位,满足Coze必填校验,不实际读取文件
payload = {
"txt_file": {
"url": "/tmp/dummy.txt", # 临时占位路径,Coze可识别且无权限问题
"file_type": "document"
},
"query": comment # 核心:传入单条评论文本
}
try:
# 禁用SSL警告,避免网络环境导致的调用失败
requests.packages.urllib3.disable_warnings()
resp = requests.post(
COZE_API_URL,
json=payload,
headers=HEADERS,
timeout=30, # 超时时间30秒,适配网络波动
verify=False
)
# 解析Coze响应结果
if resp.status_code == 200:
result = resp.json()
# 提取Coze返回的结构化JSON(适配Coze输出格式)
if "messages" in result and len(result["messages"]) > 0:
try:
# 将Coze返回的文本转为JSON对象
return json.loads(result["messages"][0]["content"])
except:
# Coze返回格式异常时,触发本地兜底
return manual_analyze(comment)
else:
# Coze调用失败(非200状态码),触发兜底
print(f"⚠️ 单条评论分析失败(状态码{resp.status_code}):{comment[:20]}...")
return manual_analyze(comment)
except Exception as e:
# 网络异常、超时等情况,触发兜底
print(f"⚠️ 单条评论调用异常:{comment[:20]}... 错误:{str(e)}")
return manual_analyze(comment)
def manual_analyze(comment):
"""
本地兜底分析逻辑(Coze调用失败时启用)
简单高效的情感分类,确保分析流程不中断
"""
# 初始化标准输出结构
result = {
"comment_content": comment,
"emotion_type": "好评",
"improvement_points": [],
"negative_details": {
"is_unreasonable_rant": False,
"dissatisfaction_points": []
},
"analysis_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
# 情感判断关键词(可根据自身场景扩展)
negative_words = ["垃圾", "太差", "破损", "简陋", "瑕疵", "贵", "慢", "一般", "不满意"]
rant_words = ["垃圾", "太差", "千万别买", "一无是处", "恶心", "避雷"]
# 1. 判断是否为差评(无脑喷)
if any(word in comment for word in rant_words) and len(comment) <= 15:
result["emotion_type"] = "差评"
result["negative_details"]["is_unreasonable_rant"] = True
# 2. 判断是否为需要改进(有轻微不满)
elif any(word in comment for word in negative_words):
result["emotion_type"] = "需要改进"
# 自动提取改进点(可扩展)
if "简陋" in comment or "包装" in comment:
result["improvement_points"].append("优化包装")
if "慢" in comment or "延迟" in comment:
result["improvement_points"].append("提升物流速度")
if "贵" in comment or "性价比低" in comment:
result["improvement_points"].append("优化价格,提升性价比")
if "瑕疵" in comment or "质量" in comment:
result["improvement_points"].append("提升商品品控,减少瑕疵")
return result
# ===================== 单个文件处理逻辑 =====================
def process_one_file(filename):
"""处理单个TXT评论文件:读取→分析→保存→归档"""
src_file = os.path.join(INPUT_DIR, filename)
# 1. 读取本地TXT文件,分割评论
try:
with open(src_file, "r", encoding="utf-8") as f:
# 按行分割,过滤空行和纯空格
comments = [line.strip() for line in f if line.strip()]
except Exception as e:
print(f"❌ 读取文件失败:{filename},错误:{str(e)}")
# 读取失败仍归档,避免重复处理
shutil.move(src_file, os.path.join(PROCESS_DIR, filename))
return
# 无有效评论时,直接归档
if not comments:
print(f"⚠️ {filename} 无有效评论,直接归档")
shutil.move(src_file, os.path.join(PROCESS_DIR, filename))
return
# 2. 逐条分析评论,生成JSON结果
print(f"\n🔍 开始处理 {filename},共 {len(comments)} 条评论")
for idx, comment in enumerate(comments):
# 调用分析函数(Coze+本地兜底)
analysis_result = analyze_single_comment(comment)
# 3. 保存单条评论的分析结果
base_name = os.path.splitext(filename)[0]
json_filename = f"{base_name}_评论{idx+1}.json"
json_filepath = os.path.join(OUTPUT_DIR, json_filename)
with open(json_filepath, "w", encoding="utf-8") as f:
json.dump(analysis_result, f, ensure_ascii=False, indent=2)
print(f"✅ 已保存:{json_filename}")
# 4. 处理完成,将原始文件归档
shutil.move(src_file, os.path.join(PROCESS_DIR, filename))
print(f"📁 {filename} 处理完成,已移至process目录归档")
# ===================== 目录监控逻辑 =====================
def monitor_input_dir():
"""实时监控input目录,发现新增TXT文件自动处理"""
processed_files = set() # 记录已处理文件,避免重复处理
print("🚀 开始监控 input 目录(检查间隔5秒)...")
print("💡 提示:将TXT评论文件(每行一条)放入input目录即可自动处理")
while True:
# 获取input目录下所有未处理的TXT文件
current_files = [
f for f in os.listdir(INPUT_DIR)
if f.endswith(".txt") and f not in processed_files
]
# 处理新增文件
for file in current_files:
process_one_file(file)
processed_files.add(file)
# 间隔指定时间检查一次
time.sleep(CHECK_INTERVAL)
# ===================== 脚本启动入口 =====================
if __name__ == "__main__":
try:
# 自动安装依赖(若未安装requests)
try:
import requests
except ImportError:
print("📦 未安装requests库,正在自动安装...")
os.system("pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple")
import requests
# 启动目录监控
monitor_input_dir()
except KeyboardInterrupt:
# 捕获Ctrl+C,优雅停止脚本
print("\n🛑 脚本已手动停止")
except Exception as e:
# 捕获其他异常,避免脚本崩溃
print(f"\n💥 脚本运行异常:{str(e)}")
四、使用步骤
-
配置 Coze:
-
登录 Coze,创建新工作流,复制本文「2.1 提示词」粘贴到工作流提示词区域
-
配置工作流输入为「单条评论文本」,输出为「JSON格式」
-
发布工作流,获取 API 地址和 Access Token
-
-
配置 Python 脚本:
-
复制本文「三、Python 核心脚本」,保存为
control.py(任意文件名均可) -
替换脚本中
COZE_API_URL和COZE_TOKEN为自身 Coze 信息
-
-
运行脚本:
-
打开终端,进入脚本所在目录,执行命令:
python control.py -
脚本启动后,自动创建
input、process、output三个目录
-
-
开始分析:
-
创建 TXT 文件,每行写入一条电商评论,保存至
input目录 -
脚本自动识别文件,完成分析后,JSON 结果存入
output,原始文件移至process
-
五、常见问题与解决方案
5.1 Coze API 调用失败(状态码 500)
问题原因:Coze 工作流存在文件读写操作,触发服务器只读目录权限限制。
解决方案:无需修改 Coze 工作流,脚本已通过「传评论内容+占位txt_file」绕开文件读取,确保正常调用。
5.2 脚本运行报错「No module named ‘requests’」
问题原因:未安装 requests 依赖库。
解决方案:脚本会自动安装,若自动安装失败,手动执行命令:pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
5.3 分析结果 JSON 格式异常
问题原因:Coze 输出格式不符合要求,或调用失败未触发兜底逻辑。
解决方案:检查 Coze 提示词,确保仅输出 JSON;脚本兜底逻辑会自动补全格式,无需手动干预。
5.4 文件无法自动归档
问题原因:目录权限不足,或文件被其他程序占用。
解决方案:关闭占用文件的程序,确保脚本所在目录有读写权限。
六、效果演示
6.1 输入(input 目录下的 TXT 文件)
第一次在这家买,没想到这么好,做工精细,没有异味,家人都说好看 / 好用。
发货速度一般,但商品本身质量不错,功能也符合描述,总体可以接受。
包装有点简陋,不过商品没问题,性价比在线,给个中好评鼓励一下。
垃圾东西,太差了
比实体店便宜很多,质量却一点不差,以后买这类东西就认准这家了。
6.2 输出(output 目录下的 JSON 文件)
每条评论对应一个 JSON 文件,示例如下:
{
"comment_content": "第一次在这家买,没想到这么好,做工精细,没有异味,家人都说好看 / 好用。",
"emotion_type": "好评",
"improvement_points": [],
"negative_details": {
"is_unreasonable_rant": false,
"dissatisfaction_points": []
},
"analysis_time": "2026-03-22 17:59:03"
}
{
"comment_content": "包装有点简陋,不过商品没问题,性价比在线,给个中好评鼓励一下。",
"emotion_type": "需要改进",
"improvement_points": [
"优化包装"
],
"negative_details": {
"is_unreasonable_rant": false,
"dissatisfaction_points": []
},
"analysis_time": "2026-03-22 17:59:05"
}
七、扩展建议
-
关键词扩展:在
manual_analyze函数中,扩展负面词汇、改进点关键词,适配自身电商品类(如服装、3C、美妆) -
批量统计:新增 JSON 结果汇总功能,统计好评率、核心改进点,生成可视化报表
-
定时任务:结合 Windows 任务计划或 Linux crontab,实现脚本定时启动,无需手动运行
-
多目录监控:修改脚本,支持同时监控多个目录,适配多店铺评论处理场景
总结
本文搭建的自动化评论分析系统,彻底解决了电商评论批量处理的效率痛点,通过 Python 实现全流程自动化,结合 Coze 大模型保证分析准确性,同时加入兜底逻辑确保稳定性。脚本可直接复用,仅需替换 Coze 配置信息,适合运营人员、开发人员快速落地,助力电商店铺优化商品与服务,提升用户满意度。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)