You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python基于文本模式聚合高相似度数据行?

文本相似度聚合方案

针对你提到的文本消息聚合需求(核心内容一致、仅细节差异的行合并,计数求和),可以按以下步骤实现:

一、核心匹配逻辑定义

首先要明确"核心内容一致"的判断规则,针对你的示例(abc 和 abc:very specific message),可以优先采用两种实用规则:

  • 前缀匹配:判断短文本是否是长文本的前缀(可忽略大小写),比如abc是abc:xxx的前缀,判定核心一致
  • 分割符提取核心:用固定分隔符(比如示例中的:)拆分文本,取第一部分作为核心标识

二、具体算法步骤

  1. 文本标准化:统一文本大小写(如果你的场景中大小写不影响核心判断),避免ABC和abc被误判
  2. 构建核心映射表:
    • 遍历所有文本,提取每条文本的核心标识(按前缀/分割规则)
    • 为每个核心标识保留最简洁的原始文本(比如优先选短文本,而非带后缀的长文本)
  3. 计数聚合:将同一核心标识对应的column2计数求和
  4. 生成结果:用核心映射的简洁文本和聚合后的计数输出最终数据集

三、代码示例(Python)

import pandas as pd

# 模拟输入数据
data = {
    'column1': ['ABC', 'DEF', 'abc', 'abc:very specific message'],
    'column2': [3, 4, 1, 1]
}
df = pd.DataFrame(data)

# 提取核心标识:转小写后按冒号分割取第一部分
def get_core(text):
    lower_text = text.lower()
    return lower_text.split(':')[0]

df['core'] = df['column1'].apply(get_core)

# 为每个核心匹配最简洁的原始文本
core_to_text = {}
for core, text in zip(df['core'], df['column1']):
    if core not in core_to_text or len(text) < len(core_to_text[core]):
        core_to_text[core] = text

# 聚合计数并替换为简洁文本
agg_df = df.groupby('core')['column2'].sum().reset_index()
agg_df['column1'] = agg_df['core'].map(core_to_text)
agg_df = agg_df[['column1', 'column2']].sort_values('column1')

print(agg_df)

运行后输出:

column1  column2
0     ABC        3
1     DEF        4
2     abc        2

四、复杂场景扩展优化

如果你的文本没有固定分割符、核心匹配更复杂,可以采用以下方法:

  • 编辑距离匹配:计算文本间的Levenshtein编辑距离,设定阈值判定相似度
  • TF-IDF+聚类:将文本转为TF-IDF向量,用K-Means/DBSCAN聚类后聚合簇内计数
  • 预训练模型嵌入:用BERT等模型生成文本嵌入,通过余弦相似度筛选高相似文本合并

内容的提问来源于stack exchange,提问作者Sophia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:22:46