我有一个包含以下类型的架构的SQLite数据库:
termcount(doc_num, term , count)
此表包含在文档中各自的计数术语。 喜欢
(doc1 , term1 ,12)
(doc1, term 22, 2)
.
.
(docn,term1 , 10)
这个矩阵可以看作是稀疏矩阵,因为每个文件包含将有一个非零值很少条款。
我将如何使用numpy的,因为我要计算使用余弦相似性文件之间的相似性创建这个稀疏矩阵密集矩阵。
这稠密矩阵看起来像已经DOCID为第一列和所有条款将被列为第一row.and剩余的细胞会包含计数的表。
from scipy.sparse import csr_matrix
A = csr_matrix([[1,0,2],[0,3,0]])
>>>A
<2x3 sparse matrix of type '<type 'numpy.int64'>'
with 3 stored elements in Compressed Sparse Row format>
>>> A.todense()
matrix([[1, 0, 2],
[0, 3, 0]])
>>> A.toarray()
array([[1, 0, 2],
[0, 3, 0]])
这是如何将一个稀疏矩阵转换为从截取的密集矩阵的示例SciPy的
我用熊猫解决了这个问题。 因为我们希望保持文档ID和长期的ID。
from pandas import DataFrame
# A sparse matrix in dictionary form (can be a SQLite database). Tuples contains doc_id and term_id.
doc_term_dict={('d1','t1'):12, ('d2','t3'):10, ('d3','t2'):5}
#extract all unique documents and terms ids and intialize a empty dataframe.
rows = set([d for (d,t) in doc_term_dict.keys()])
cols = set([t for (d,t) in doc_term_dict.keys()])
df = DataFrame(index = rows, columns = cols )
df = df.fillna(0)
#assign all nonzero values in dataframe
for key, value in doc_term_dict.items():
df[key[1]][key[0]] = value
print df
输出:
t2 t3 t1
d2 0 10 0
d3 5 0 0
d1 0 0 12