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

如何使用Pandas基于文本相似度百分比实现CSV重复行检测与删除

基于文本相似度的CSV去重实现方案

实现思路

  • 优先保留数据中顺序靠前的行,后续行仅在和所有已保留行的text相似度都低于设定阈值时才会被保留
  • 可选对text内容做预处理,移除末尾的无关链接,避免无关内容干扰相似度计算
  • 采用莱文斯坦距离计算文本相似度,支持自定义阈值,适配不同去重严格度需求

前置依赖

需要先安装相似度计算相关库:

pip install fuzzywuzzy python-Levenshtein

完整实现代码

import re
import pandas as pd
from fuzzywuzzy import fuzz

# 配置项:相似度阈值,范围0-100,比如70代表相似度≥70%判定为重复
SIMILARITY_THRESHOLD = 70

# 预处理函数:移除文本中的链接,不需要可删除该函数相关调用
def remove_url(text):
    return re.sub(r'https?://\S+', '', str(text)).strip()

# 读取数据
df = pd.read_csv('data/resultsg_small.csv')
df = df[['id','created_at','text','author_id']]
# 先做完全去重,减少后续相似度计算量
df.drop_duplicates(subset ="text",keep = 'first', inplace = True)
df.reset_index(drop=True, inplace=True)

# 存储已保留的预处理后的文本
kept_texts = []
# 存储要保留的行索引
keep_indexes = []

for idx, row in df.iterrows():
    current_text = remove_url(row['text'])
    # 标记当前行是否为重复
    is_duplicate = False
    for kept in kept_texts:
        # 计算相似度
        similarity = fuzz.ratio(current_text, kept)
        if similarity >= SIMILARITY_THRESHOLD:
            is_duplicate = True
            break
    if not is_duplicate:
        keep_indexes.append(idx)
        kept_texts.append(current_text)

# 筛选保留的行
df_result = df.loc[keep_indexes]
# 输出结果
df_result.to_csv('new.csv', index=False)

参数调整说明

  • 修改SIMILARITY_THRESHOLD的数值即可调整去重严格程度,数值越高去重越松,反之越严格
  • 若不需要预处理移除链接,直接删除remove_url相关调用,直接用原始text计算相似度即可
  • 若数据量极大(超过10万行),可改用向量检索类方案提升计算效率,当前实现适配万级以下小批量数据使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:57:02