前言

在电商运营(尤其是跨境电商)场景中,用户评论的情感分析、改进点提取是优化商品、提升服务的核心抓手。手动处理海量评论效率低下、易出错,本文将搭建一套零人工干预的自动化评论分析系统,通过 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 运行流程

  1. 启动 Python 脚本,开始监控 input 目录

  2. 将 TXT 评论文件(每行一条评论)放入 input 目录

  3. 脚本自动读取文件,分割评论,逐条调用 Coze API 进行分析

  4. 分析完成后,单条评论生成独立 JSON 文件,存入 output 目录

  5. 原始 TXT 文件自动移至 process 目录,完成归档

  6. 若 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)}")

四、使用步骤

  1. 配置 Coze:

    • 登录 Coze,创建新工作流,复制本文「2.1 提示词」粘贴到工作流提示词区域

    • 配置工作流输入为「单条评论文本」,输出为「JSON格式」

    • 发布工作流,获取 API 地址和 Access Token

  2. 配置 Python 脚本:

    • 复制本文「三、Python 核心脚本」,保存为 control.py(任意文件名均可)

    • 替换脚本中 COZE_API_URLCOZE_TOKEN 为自身 Coze 信息

  3. 运行脚本:

    • 打开终端,进入脚本所在目录,执行命令:python control.py

    • 脚本启动后,自动创建inputprocessoutput三个目录

  4. 开始分析:

    • 创建 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 配置信息,适合运营人员、开发人员快速落地,助力电商店铺优化商品与服务,提升用户满意度。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐