所以,我正在开发一个维基百科转储来计算大约5,700,000页的页面值。 这些文件是经过预处理的,因此不是XML格式 它们取自http://haselgrove.id.au/wikipedia.htm 格式为:
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演出RAM。因为它非常稀疏,使用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
]
完全是这样的:没有逗号和&没有分隔符。
有关稀疏矩阵构造和跨线数据处理的任何信息都会有所帮助。
答案 0 :(得分:1)
Scipy提供了稀疏矩阵的几种实现。他们每个人都有自己的优点和缺点。您可以找到有关矩阵格式here的信息:
有几种方法可以获得所需的稀疏矩阵。由于存储器要求很高(约10 ^ 12个条目!),计算完整的NxN矩阵然后转换可能是不可能的。
在您的情况下,我会准备您的数据以构建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,它可用于逐步构建矩阵。
创建矩阵后,您可以将其转换为更适合的计算格式,具体取决于您的使用情况。
我不认识数据格式,可能有解析器,可能没有。但是,编写自己的解析器应该不是很困难。每行包含冒号开始一个新行,冒号后的所有索引和没有冒号的连续行都是该行的列条目。