Gensim中文档矩阵的单词标签

时间:2015-03-16 18:03:11

标签: python-2.7 numpy gensim

我的最终目标是为每个文档生成一个* .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)

然而,这不起作用。单词ids(Keys)与适当的向量不匹配。

我假设一种更简单,更优雅的方法是可能的。但过了一段时间,我一直无法找到它。也许这里有人可以提供帮助,或者指出一些我错过的基本信息。

1 个答案:

答案 0 :(得分:0)

这是你想要的吗?

%time lda1 = models.LdaModel(corpus1, num_topics=20, id2word=dictionary1, update_every=5, chunksize=10000, passes=100)

import pandas

mixture = [dict(lda1[x]) for x in corpus1]

pandas.DataFrame(mixture).to_csv("output.csv")