Как оптимизировать код для матрицы совпадений для масштабирования? - PullRequest
0 голосов
/ 11 июня 2019

Я хочу использовать следующий код для расчета совпадения и создания матрицы совпадения: https://stackoverflow.com/a/42814963.

from collections import OrderedDict

document = [['A', 'B'], ['C', 'B'], ['A', 'B', 'C', 'D']]
names = ['A', 'B', 'C', 'D']

occurrences = OrderedDict((name, OrderedDict((name, 0) for name in names)) for name in names)

# Find the co-occurrences:
for l in document:
    for i in range(len(l)):
        for item in l[:i] + l[i + 1:]:
            occurrences[l[i]][item] += 1

К сожалению, мой набор данных состоит из 2Mio.+ документы.Поэтому я хочу разделить анализ на куски и объединить данные через pandas.DataFrame после каждого куска.Я попробовал это в следующем коде:

k=3000
df_final = pandas.DataFrame()
for i in range(0, (len(vocabulary)//k)+k):
    vocabulary_chunk = []
    vocabulary_chunk = vocabulary[(k*i):((i+1)*k)] 

    occurrences = OrderedDict((name, OrderedDict((name, 0) for name in vocabulary)) for name in vocabulary_chunk)

    # Find the co-occurrences:
    for l in term_constellation:
        for i in range(len(l)):
            for item in l[:i] + l[i + 1:]:
                occurrences[l[i]][item] += 1

    df = pandas.DataFrame(data=occurrences)
    df_final = df_final + df


pandas.DataFrame(data=df_final).to_csv("Output.csv", sep=";", decimal=',')

В моем логическом мышлении это должно работать.К сожалению, я получаю следующую ошибку:

occurrences[l[i]][item] += 1

KeyError: 'factor'

Я применил код к меньшему количеству документов, и ошибки не возникло, но выходной файл содержал не только имена строк и столбцов, но и никаких значений.

Чего не хватает в моем коде?

...