首页 > 解决方案 > 处理内存中的大量文本数据

问题描述

我正在尝试在具有 64 GB RAM 的 Ubuntu 系统上处理约 20 GB 的数据。

此步骤是生成用于训练 ML 算法的特征向量的一些预处理步骤的一部分。

最初的实现(由我团队中的某个人编写)中有列表。随着我们添加更多的训练数据,它不能很好地扩展。是这样的。

all_files = glob("./Data/*.*")
file_ls = []

for fi in tqdm(all_files):
    with open(file=fi, mode="r", encoding='utf-8', errors='ignore') as f:
        file_ls.append(f.read())

这会遇到内存错误(进程被杀死)。所以我虽然我应该尝试用尝试替换基于列表的东西

def insert(word):
    cur_node = trie_root
    for letter in word:
        if letter in cur_node:
            cur_node = cur_node[letter] 
        else:
            cur_node[letter] = {} 
            cur_node = cur_node[letter]
    cur_node[None] = None

trie_root = {}

for fi in tqdm(all_files):
    with open(file=fi, mode="r", encoding='utf-8', errors='ignore') as f:
        insert(f.read().split())

这也被杀了。以上是我为捕获对象的内存占用而编写的演示代码。更糟糕的是 list 的演示代码独立运行,但 trie 的演示代码被杀死,让我相信这个实现比 list 实现更糟糕。

我的目标是用 Python 编写一些高效的代码来解决这个问题。

请帮我解决这个问题。

编辑:响应@Paul Hankin,数据处理包括首先占用每个文件并为标准化术语频率大于0.01的术语添加一个通用占位符,然后将每个文件拆分为一个列表并计算一个词汇表,将所有处理过的文件考虑在内。

标签: pythonalgorithmdata-structuresbigdata

解决方案


这个问题的简单解决方案之一可能是不在列表或任何数据结构中存储数据。您可以在读取时尝试将这些数据写入文件。


推荐阅读