← 返回教程目录
第 8 章 · 第 2 节 数据清洗

去重与去噪:过滤水军 / 刷屏 / 模板评论

Deduplication: Remove Spam and Templates

电商评论里 30% 是模板刷屏 — 好评返现 5 星、物流很快包装完整 这种。词频统计前必须清掉,否则分析结论全被带偏。

1. 完全重复

df_clean = df.drop_duplicates(subset=['clean'], keep='first')


print(f'完全去重: {len(df) - len(df_clean)} 条')

2. 近似重复(85% 相似度)

from difflib import SequenceMatcher





def is_similar(a, b, threshold=0.85):


    return SequenceMatcher(None, a, b).ratio() > threshold





seen = set()


unique = []


for text in df_clean['clean']:


    is_dup = False


    for kept in seen:


        if is_similar(text, kept):


            is_dup = True


            break


    if not is_dup:


        seen.add(text)


        unique.append(text)


print(f'近似去重后剩 {len(unique)} 条')

3. 短句模板刷屏(关键句列表)

SPAM_TEMPLATES = [


    '好评返现',


    '五星好评',


    '物流很快包装完整',


    '物超所值',


    '客服态度很好',


    '非常满意的一次购物',


    '会回购的',


    '必须好评',


]





def is_spam(text, templates):


    for t in templates:


        if t in text and len(text) < 30:


            return True


    return False





df_clean['is_spam'] = df_clean['clean'].apply(lambda t: is_spam(t, SPAM_TEMPLATES))


df_quality = df_clean[~df_clean['is_spam']]


print(f'过滤水军后剩 {len(df_quality)} 条')
实际项目里:SPAM_TEMPLATES 要从数据里挖掘 — 先跑一次词频,找那些高频但又短得可疑的句子,人工判定后再加进黑名单。

去重 + 去水军,是文本分析质量门。这一节跑完,数据从 10 万 → 7 万干净语料,可以进下一步分析。

想跳过写代码,直接清洗 10 万条评论?

配套软件内置 12 项清洗规则 + 批量改名,导入即出干净语料

查看淘宝软件 →