在大熊猫文本列中,我想首先对该列的整个文本训练一个LDA模型,并确定50个主题:
doc_clean = df['tweet_tokenized'].tolist()
dictionary = corpora.Dictionary(doc_clean)
doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
lda = LdaMulticore(doc_term_matrix, id2word=dictionary, num_topics=50)
然后,我想创建与每个主题相关的50列,并遍历每一行,并将其属于任何一个主题的概率放入其对应的主题,并为其余主题设置零。 >
例如,如果在第一行上应用经过训练的LDA的结果是:
new_doc = dictionary.doc2bow(tweet1)
results = lda(new_doc)
results:
[(1, 0.92), (4,0.42)]
这意味着tweet1属于主题1的概率为0.92,属于主题4的概率为0.42,我想要有50个与主题1,主题2,...,主题50相关的新列,然后是主题1的值为0.92,主题4为0.42,其他所有主题为零:
topic1 topic2 topic3 topic4 topic5 ... topic50
tweet1 0.92 0 0 0.42 0 ... 0
是否有任何Python方法快速完成最后一部分(即填充50列)?
答案 0 :(得分:0)
有一个很好的端到端教程,涵盖了您使用的工具,熊猫和LDA的需求: https://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/
您要寻找的部分是18.在每个句子中找到主要主题,19.为每个主题找到最具代表性的文档,以及20.跨文档的主题分布。
答案 1 :(得分:0)
我编写了以下代码,它可以正常工作。但不确定这是否是最有效的方法:
首先,我创建50个零列:
for i in range(50):
col_name = 'tweet_topic_'+str(i)
df[col_name] = 0
然后我使用iterrows()
遍历它:
for row_index, row in df.iterrows():
row = row.copy()
new_doc = dictionary.doc2bow(row['tweet_tokenized'])
lda_result = lda[new_doc]
for tpc in lda_result:
col_name = 'tweet_topic_'+(str(tpc[0]).strip())
print(row_index,col_name, tpc[1])
df.loc[row_index,col_name] = tpc[1]