我的最终目标是为每个文档生成一个* .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)与适当的向量不匹配。
我假设一种更简单,更优雅的方法是可能的。但过了一段时间,我一直无法找到它。也许这里有人可以提供帮助,或者指出一些我错过的基本信息。
答案 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")