【发布时间】:2015-03-16 18:03:10
【问题描述】:
我的最终目标是为每个文档生成一个包含标记二进制术语向量的 *.csv 文件。本质上,一个术语文档矩阵。
使用 gensim,我可以生成一个带有未标记术语矩阵的文件。
我基本上是通过从这里复制和粘贴代码来做到这一点的:http://radimrehurek.com/gensim/tut1.html
给定一个名为“文本”的文档列表。
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus)
[(0, 1), (1, 1), (2, 1)]
[(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)]
[(2, 1), (5, 1), (7, 1), (8, 1)]
[(1, 1), (5, 2), (8, 1)]
[(3, 1), (6, 1), (7, 1)]
[(9, 1)]
[(9, 1), (10, 1)]
[(9, 1), (10, 1), (11, 1)]
[(4, 1), (10, 1), (11, 1)]
要将上述向量转换为 numpy 矩阵,我使用:
scipy_csc_matrix = gensim.matutils.corpus2csc(corpus)
然后我将稀疏的 numpy 矩阵转换为完整的数组:
full_matrix = csc_matrix(scipy_csc_matrix).toarray()
最后,我把它输出到一个文件中:
with open('file.csv','wb') as f:
writer = csv.writer(f)
writer.writerows(full_matrix)
这会产生一个二项式向量矩阵,但我不知道哪个向量代表哪个单词。有没有准确的方法将单词与向量匹配?
我已经尝试解析字典来创建一个单词列表,我会粘到上面的 full_matrix 上。
#Retrive dictionary
tokenIDs = dictionary.token2id
#Retrieve keys from dictionary and concotanate those to full_matrix
for key, value in tokenIDs.iteritems():
temp1 = unicodedata.normalize('NFKD', key).encode('ascii','ignore')
temp = [temp1]
dictlist.append(temp)
Keys = np.asarray(dictlist)
#Combine Keys and Matrix
labeled_full_matrix = np.concatenate((Keys, full_matrix), axis=1)
但是,这不起作用。单词 id(键)与适当的向量不匹配。
我假设一种更简单、更优雅的方法是可能的。但是一段时间后,我一直找不到它。也许这里有人可以提供帮助,或者指出我错过的基本内容。
【问题讨论】:
标签: python-2.7 numpy gensim