【问题标题】:Word Labels for Document Matrix in GensimGensim中文档矩阵的词标签
【发布时间】: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


    【解决方案1】:

    这是你想要的吗?

    %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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 2016-07-11
      • 2015-01-29
      • 2017-07-06
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多