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

如何清洗pandas应用评论数据集中的无意义文本用于情感分析

Pandas大规模应用评论乱码文本过滤方案

你可以根据自己对准确率和速度的需求,选择以下组合方案处理253万行数据集:

首先在Colab环境安装所需依赖:

# 仅首次运行需要执行
!pip install langdetect swifter
import pandas as pd
import re
import nltk
from nltk.corpus import words
from langdetect import detect
nltk.download('words')
english_word_set = set(words.words())

1. 已知乱码黑名单快速过滤

如果已经有确定的无意义词汇列表,可以先做精确匹配过滤,速度最快:

# 你问题中提到的已知乱码可以直接加入黑名单
gibberish_blacklist = {'wefcxz', 'dfghjja', 'udsx nnnn 012mmmm'}
# 过滤掉完全匹配黑名单的行
df = df[~df['content'].str.strip().isin(gibberish_blacklist)]

2. 基于规则的模糊过滤(适合特征明显的未知乱码)

针对连续无意义字符、重复字符、字母数字无意义拼接这类典型乱码,用正则规则快速筛选:

def is_gibberish(text):
    # 空值直接判定为无效
    if pd.isna(text):
        return True
    text = text.strip()
    # 过短内容(小于3个字符,阈值可根据需求调整)
    if len(text) < 3:
        return True
    # 匹配全是重复字符的情况:比如aaaaa、mmmm
    if re.match(r'^(.)\1+$', text):
        return True
    # 匹配无空格纯字母组合且长度超过7,同时不在英文词典中的内容
    if re.match(r'^[a-zA-Z]{7,}$', text) and text.lower() not in english_word_set:
        return True
    # 元音字母占比低于15%的长文本大概率是乱码(正常英文元音占比约30%-40%)
    vowel_ratio = len(re.findall(r'[aeiouAEIOU]', text)) / len(text)
    if vowel_ratio < 0.15:
        return True
    return False

# 过滤乱码行
df_clean = df[~df['content'].apply(is_gibberish)].copy()

3. 基于英文校验的精准过滤(适合高准确率需求)

如果规则过滤漏判较多,可以结合英文单词占比和语言检测,判断内容是不是有效英文:

def is_valid_review(text):
    if pd.isna(text):
        return False
    text = text.strip().lower()
    # 拆分文本为单词
    word_list = re.findall(r'[a-zA-Z]+', text)
    if len(word_list) == 0:
        return False
    # 有效英文单词占比超过60%判定为有效内容,阈值可调整
    valid_ratio = sum(1 for word in word_list if word in english_word_set) / len(word_list)
    if valid_ratio > 0.6:
        return True
    # 语言检测校验是否为英文
    try:
        return detect(text) == 'en'
    except:
        return False

df_clean = df[df['content'].apply(is_valid_review)].copy()

4. 大规模数据性能优化建议

  • 用swifter库替代原生apply,自动利用CPU多核心并行处理,250万行数据处理时间可缩短到分钟级:
import swifter
df_clean = df[~df['content'].swifter.apply(is_gibberish)].copy()
  • 如果后续数据量继续增大,可以转用PySpark分布式处理,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:42:03