Обработка огромного количества текстовых данных в памяти - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь обработать ~ 20 ГБ данных в системе Ubuntu с 64 ГБ ОЗУ.

Этот шаг является частью некоторых этапов предварительной обработки для генерации векторов элементов для обучения ML al go.

В исходной реализации (написанной кем-то из моей команды) были списки , Это не хорошо масштабируется, так как мы добавляем больше обучающих данных. Это что-то вроде этого.

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())

Это тоже будет убито. Выше приведен демонстрационный код, который я написал для захвата памяти объектов. Хуже всего то, что демонстрационный код для списка работает автономно, но демонстрационный код для tr ie убивается, что заставляет меня поверить, что эта реализация хуже, чем реализация списка.

Моя цель - написать эффективный код на Python для решения этой проблемы.

Пожалуйста, помогите мне решить эту проблему.

РЕДАКТИРОВАТЬ: Отвечая @Paul Hankin, обработка данных включает в себя сначала взятие каждого файла и добавление обобщенного c заполнителя для терминов с нормализованным термином частота больше 0,01, после чего каждый файл разбивается на список и вычисляется словарь с учетом всех обработанных файлов.

1 Ответ

0 голосов
/ 23 марта 2020

Одним из простых решений этой проблемы может быть НЕ хранить данные в списке или любой структуре данных. Вы можете попробовать записать эти данные в файл во время чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...