如何高效移除大规模文本中的稀有词?现有代码运行过慢求助
优化大规模文本稀有词移除代码的方案
原代码的核心低效点
- 稀有词判断效率极低:
rare_words是列表,idx in rare_words属于线性查找(O(n)),百万级单词反复执行该操作会直接拖慢整体速度。 - 词频统计存在冗余步骤:将Counter的keys和values转为列表后再通过索引筛选,多了不必要的中间环节,增加内存占用与处理时间。
- 循环操作开销冗余:原函数逐个处理样本时反复创建列表、拼接字符串,未利用更高效的数据结构简化流程。
优化后的代码实现
第一步:高效统计词频并筛选稀有词
from collections import Counter # 从数据集提取所有单词并统计词频(替换原冗余的get_unique+Counter逻辑) all_words = [] for item in ds: all_words.extend(item[0].split()) # 统计每个单词的出现次数 word_counts = Counter(all_words) # 直接筛选稀有词并转为集合(关键优化:集合的成员查找是O(1)) rare_words_set = {word for word, count in word_counts.items() if count < 20}
第二步:优化稀有词移除函数
def remove_jnk(dataset, rare_words): processed_ds = [] for item in dataset: # 用生成器表达式替代列表推导,减少内存占用 filtered_words = (word if word not in rare_words else " " for word in item[0].split()) processed_text = " ".join(filtered_words) processed_ds.append([processed_text]) return processed_ds # 调用优化后的函数 ds = remove_jnk(ds, rare_words_set)
额外提速建议
- 用pandas矢量化处理:如果数据集是DataFrame格式,可借助矢量化操作进一步压缩耗时:
import pandas as pd df = pd.DataFrame(ds, columns=["text"]) def filter_rare(text): return " ".join(word if word not in rare_words_set else " " for word in text.split()) df["text"] = df["text"].apply(filter_rare) ds = df.values.tolist() - 跳过重复拆分:若原数据集已存储拆分好的单词列表,直接处理列表即可省去
split()和join()的开销。 - 分批处理大数据:若数据集超出内存承载,可分批次加载处理,避免一次性占用过多内存。
内容的提问来源于stack exchange,提问作者mucho
相关产品推荐
相关产品推荐

