NLP多类别语料处理仅输出最后一类结果的问题求助
政策语料按类别清理高频词后合并数据集失败的解决方法
问题背景
作为NLP初学者,正在处理27类政策描述语料的相关任务:已算出Top100高频词列表,需要移除那些在**类别中出现占比低于50%**的词汇。但执行代码后只能得到最后一类的处理结果,无法合并所有类别的数据,拿不到完整的处理后数据集。
错误原因
- 临时变量未留存结果:循环处理每个类别时,
df_class是临时变量,每次循环都会被覆盖,最终只保留了最后一个类别的处理数据 - 合并逻辑错误:合并阶段用最后一次循环的
df_class去筛选类别,自然只能获取最后一类的数据 - 未正确处理数据修改:直接对切片后的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
相关产品推荐
相关产品推荐

