3

Итак, я работаю над дампом в Википедии, чтобы вычислить страницы, содержащие около 5 700 000 страниц. Файлы предварительно обработаны и, следовательно, не находятся в XML.
Они взяты из http://haselgrove.id.au/wikipedia.htm и формат:Как справиться с огромной структурой разреженных матриц с использованием Scipy?

from_page(1): to(12) to(13) to(14).. 
from_page(2): to(21) to(22).. 
. 
. 
. 
from_page(5,700,000): to(xy) to(xz) 

так далее. Так. в основном это конструкция матрицы [5,700,000*5,700,000], которая просто сломала бы 4 гигабайта оперативной памяти. Так как, это очень-очень разреженный, что делает его легче хранить, используя scipy.lil.sparse или scipy.dok.sparse, теперь мой вопрос:

Как на земле я могу идти о преобразовании файла .txt с информацией о связи с разреженной матрицей? Прочитайте его и вычислите его как нормальную матрицу N * N, затем преобразуйте ее или что? Я понятия не имею.

Кроме того, ссылки иногда охватывают разные линии, так что будет правильным способом справиться с этим?
например: случайная строка как ..

[ 
1: 2 3 5 64636 867 
2:355 776 2342 676 232 
3: 545 64646 234242 55455 141414 454545 43 
4234 5545345 2423424545 
4:454 6776 
] 

точно так: нет запятых & нет разделителей.

Любая информация о разреженной конструкции матрицы и обработке данных по линиям будет полезна.

ответ

1

Scipy предлагает несколько реализаций разреженных матриц. Каждый из них имеет свои преимущества и недостатки. Вы можете найти информацию о матричных форматах here:

Есть несколько способов добраться до нужной разреженной матрицы. Вычисление полной матрицы NxN, а затем преобразование, вероятно, невозможно, из-за высоких требований к памяти (около 10^12 записей!).

В вашем случае я подготовил ваши данные для построения coo_matrix.

coo_matrix((data, (i, j)), [shape=(M, N)]) 

data[:] the entries of the matrix, in any order 
i[:] the row indices of the matrix entries 
j[:] the column indices of the matrix entries 

Вы также можете захотеть взглянуть на lil_matrix, которая может быть использована для постепенного создания вашей матрицы.

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

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

+0

Есть ли способ напрямую построить 'lil_matrix' из списка разреженных строк (каждая строка является списком пар (столбца, значения))? Это похоже на очевидный подход, но, похоже, не поддерживается. – nealmcb