首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按主题选择文本(LDA)

按主题选择文本(LDA)
EN

Stack Overflow用户
提问于 2020-06-17 07:57:20
回答 1查看 231关注 0票数 3

是否可以查找特定主题内的文本(由LDA确定)?

我有一个5个主题的列表,每个主题有10个单词,通过使用lda找到。

我已经分析了dataframe列中的文本。我想选择/过滤某个特定主题中的行/文本。

如果您需要更多信息,我将为您提供。

我指的是返回以下输出的步骤:

代码语言:javascript
复制
[(0,
  '0.207*"house" + 0.137*"apartment" + 0.118*"sold" + 0.092*"beach" + '
  '0.057*"kitchen" + 0.049*"rent" + 0.033*"landlord" + 0.026*"year" + '
  '0.024*"bedroom" + 0.023*"home"'),
 (1,
  '0.270*"school" + 0.138*"homeworks" + 0.117*"students" + 0.084*"teacher" + '
  '0.065*"pen" + 0.038*"books" + 0.022*"maths" + 0.020*"exercise" + '
  '0.020*"friends" + 0.020*"college"'),
 ... ]

创建者

代码语言:javascript
复制
# LDA Model

lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,
                                           id2word=id2word,
                                           num_topics=num_topics, 
                                           random_state=100,
                                           update_every=1,
                                           chunksize=100,
                                           passes=10,
                                           alpha='auto', 
                                           # alpha=[0.01]*num_topics,
                                           per_word_topics=True,
                                           eta=[0.01]*len(id2word.keys()))

打印10个主题中的关键字

代码语言:javascript
复制
from pprint import pprint
pprint(lda_model.print_topics())
doc_lda = lda_model[corpus]

包含已分析文本的原始专栏名为Texts,它看起来如下所示:

代码语言:javascript
复制
Texts 

"Children are happy to go to school..."
"The average price for buying a house is ... "
"Our children love parks so we should consider to buy an apartment nearby"

etc etc...

我的预期输出将是

代码语言:javascript
复制
Texts                                            Topic 
    "Children are happy to go to school..."         2
    "The average price for buying a house is ... "  1
    "Our children love parks so we should consider to buy an apartment nearby"                                   

      2

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 23:42:09

doc_lda包含每个句子的(主题,分数)元组列表。因此,您可以使用任何启发式方法灵活地将主题分配给句子,例如,一个简单的启发式方法将通过分配具有最高分数的主题来实现。

我们可以通过这样做来提取每句话的主题分数:

代码语言:javascript
复制
topic_scores = [[topic_score[1] for topic_score in sent] for sent in doc_lda]

您还可以将上述内容转换为pandas dataframe,其中每行是一个句子,每列是主题id。数据帧数据结构通常允许对主题-得分句子关系进行更灵活和更复杂的操作

代码语言:javascript
复制
df_topics = pd.DataFrame(topic_scores)

如果你只想分配一个句子得分最高的主题,你可以这样做:

代码语言:javascript
复制
max_topics = [max(sent, key=lambda x: x[1])[0] for sent in doc_lda]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62419353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档