我有一个Sqlite数据库,其中包含以下类型的架构:
termcount(doc_num, term , count)
该表包含术语及其在文档中的各自计数。喜欢
(doc1 , term1 ,12) (doc1, term 22, 2) . . (docn,term1 , 10)
该矩阵可以被视为稀疏矩阵,因为每个文档都包含很少的具有非零值的项。
我将如何使用numpy从稀疏矩阵创建密集矩阵,因为我必须使用余弦相似度来计算文档之间的相似度。
这个密集的矩阵看起来像一个表格,第一列为docid,所有术语列为第一行,其余单元格将包含计数。
我用熊猫解决了这个问题。因为我们要保留文档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