如何基于上下文将WhatsApp聊天内容拆分为多个独立对话块?
实现WhatsApp聊天记录拆分对话块的完整步骤
第一步:数据预处理
- 清洗原始CSV文件,过滤所有非用户发送的系统通知(比如好友添加提醒、消息撤回提示、通话记录等),保留核心字段:
消息发送时间、发送人标识、消息内容、引用消息标记(WhatsApp导出的CSV会带回复引用的关联标识) - 把
消息发送时间统一转换为毫秒级时间戳,发送人标识统一映射为U1、U2两类固定标签,消息内容做标准化处理:去除多余换行符、统一emoji编码、清理无意义的特殊符号 - 按时间戳正序对所有消息做全量排序,确保聊天时序完全正确
第二步:特征提取
- 计算每条消息与上一条消息的时间间隔差,单位统一为分钟
- 对所有消息内容做分词、向量化处理,计算单条消息与上一个对话块所有内容的语义相似度
- 标记每条消息的行为特征:是否带引用回复标记、是否包含上一个对话块的核心关键词、是否为典型的新会话发起话术
第三步:对话块划分与校验
- 逐行遍历所有消息,按照下文的判断规则标记每个对话块的起始与结束边界
- 对初步划分的对话块做二次校验,修正明显的划分错误(比如间隔超过24小时但明确是回复之前对话的内容,重新归到对应块中)
- 输出划分结果,每个对话块可单独存储,标注块发起人、起始/结束时间、核心话题标签
消息承接/新对话的判断规则
按照优先级从高到低排序,满足高优先级规则直接判定,无需匹配低优先级规则:
- 引用回复优先规则:只要当前消息带引用回复标记,无论和上一条消息间隔多久,直接判定为承接上一个对话块
- 新会话发起规则:如果当前消息以典型的新对话开头话术起头(比如「在吗」「忙不」「问你个事」「嗨」),且没有带引用标记,直接判定为开启新对话
- 时间阈值规则:当前消息与上一条消息间隔小于2小时,默认判定为承接旧对话;间隔大于24小时,默认判定为开启新对话;间隔在2~24小时区间,进入语义相似度判断环节
- 语义相似度规则:计算当前消息与上一个对话块所有内容的余弦相似度,相似度≥0.6判定为承接,≤0.3判定为开启新对话,中间区间匹配核心关键词重合度:重合度≥30%判定为承接,否则判定为新对话
- 话题跳转规则:如果当前消息的核心关键词和上一个对话块完全无重合(比如上一个块聊的是「周末聚餐地点」,新消息核心关键词是「笔记本电脑维修」),无论间隔多久,都判定为开启新对话
内容的提问来源于stack exchange,提问作者Wolfox
相关产品推荐
相关产品推荐

