Я хочу преобразовать файл CSV (в формате матрицы терминов документа (TDM) (столбцы: документы; строки: термины; частота терминов ячеек в документе)) в файл корпуса для загрузки в модуль Gensim для применение тематического моделирования.
В настоящее время это делается с помощью этого кода ({ids} является словарем и отлично работает даже для огромного количества строк):
ids = {}
corpus = []
with open(dateiname_TDM, newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';', quotechar='|')
documente = next(reader, None)[1:]
for rownumber, row in enumerate(reader):
for index, field in enumerate(row):
if index == 0:
if rownumber > 0:
ids[rownumber-1] = field
else:
if rownumber == 0:
corpus.append([])
else:
try:
corpus[index-1].append((rownumber-1, int(field)))
except ValueError:
corpus[index-1].append((rownumber-1, 0))
Когда TDM состоит из слишком большого количества строк и / или столбцов, возникает проблема, связанная с тем, что на моем компьютере заканчивается ОЗУ и не удается добавить дополнительные значения в список корпусов.
Список корпусов имеет следующий вид [[(i, j), (i + 1, k), ...], [(,), ...], [...]]. Файл корпуса имеет длину номеров документов и в каждом кортеже находится индекс (i) терминов, начиная с 0 до последнего. j - частота термина i в корпусе документа [x].
Есть ли возможность добавить список корпусов кусками от количества документов, например, 10 документов за раз?
Поскольку код сильно внедрен, я понятия не имею, где и как реализовать в нем функцию чанка.
В моем предыдущем вопросе я пытался решить его с помощью генератора вне встраивания, который не работал ( Как реализовать функцию chunksize в код чтения csv ).