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

NLP多类别语料处理仅输出最后一类结果的问题求助

政策语料按类别清理高频词后合并数据集失败的解决方法

问题背景

作为NLP初学者,正在处理27类政策描述语料的相关任务:已算出Top100高频词列表,需要移除那些在**类别中出现占比低于50%**的词汇。但执行代码后只能得到最后一类的处理结果,无法合并所有类别的数据,拿不到完整的处理后数据集。

错误原因

  1. 临时变量未留存结果:循环处理每个类别时,df_class是临时变量,每次循环都会被覆盖,最终只保留了最后一个类别的处理数据
  2. 合并逻辑错误:合并阶段用最后一次循环的df_class去筛选类别,自然只能获取最后一类的数据
  3. 未正确处理数据修改:直接对切片后的DataFrame操作,可能因pandas的视图/副本机制,导致修改未被有效保存

修正后的代码

# 初始化清洗后列,复制原始语料内容
dfen['corpus3_clean'] = dfen['corpus3'].copy()

# 遍历所有高频词
for term in most_common_words_list:
    # 遍历每个政策类别
    for class_num in arr2:
        # 生成当前类别的筛选掩码
        class_mask = dfen['Policycat1'] == class_num
        class_data = dfen[class_mask]
        
        # 计算该词在当前类别的出现占比
        term_count = class_data['corpus3'].str.contains(term, case=False).sum()
        total_count = len(class_data)
        occurrence_rate = term_count / total_count
        
        # 占比低于50%时,在对应类别的清洗列中移除该词
        if occurrence_rate < 0.5:
            dfen.loc[class_mask, 'corpus3_clean'] = dfen.loc[class_mask, 'corpus3_clean'].str.replace(term, '', case=False)

# 计算清洗后语料的词数
dfen['totalwords_c3cl'] = dfen['corpus3_clean'].str.split().str.len()

# 查看完整数据集
display(dfen)

# 保存结果到CSV
dfen.to_csv('all_classes.csv', index=False)

关键修改说明

  • 提前初始化corpus3_clean列,确保所有类别的原始语料都被正确复制,避免循环中丢失数据
  • 使用loc结合掩码修改原数据的对应行,保证每个类别的修改都被持久化保存
  • 无需额外合并步骤,处理完成后dfen就是包含所有类别处理结果的完整数据集,直接使用即可
  • 用sum()统计包含词汇的记录数,比len()更简洁高效,且能自动处理空值情况

内容的提问来源于stack exchange,提问作者Isabel Parras Pancorbo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:50:32