我正在对包含大约 135k 文档(每个文档几页)和大约 800k 单词的词汇表的文本语料库进行分析。我注意到大约一半的词汇是频率为 1 或 2 的单词,所以我想删除它们。所以我正在运行这样的东西:remove_indices = np.array(index_df[index_df['frequency'] <= 2]['index']).astype(int)for file_name in tqdm(corpus): content = corpus[file_name].astype(int) content = [index for index in content if index not in remove_indices] corpus[file_name] = np.array(content).astype(np.uint32)哪里corpus看起来像:{ 'filename1.txt': np.array([43, 177718, 3817, ...., 28181]).astype(np.uint32), 'filename2.txt': ....}并且每个单词之前都被编码为正整数索引。问题在于每次迭代content = [index for index in content if index not in remove_indices]需要进行多少次检查。len(remove_indices) * len(content)这将花费很长时间(tqdm 告诉我 100h+)。关于如何加快速度的任何提示?到目前为止我试过的利用如果单词只有频率 1 或 2 的事实,我们可以在它remove_indices从语料库中删除后将其删除。仍然需要永远...
1 回答

哈士奇WWW
TA贡献1799条经验 获得超6个赞
您可以使用numpy.isin()
方法
或者,您可以创建一个set
现有的单词/索引。那么这个in
操作将是一个 O(1) 而不是 O(n) (其中 n 是数组的长度)。
添加回答
举报
0/150
提交
取消