簡體   English   中英

Select 主題文本 (LDA)

[英]Select texts by topic (LDA)

是否可以查找某個主題內的文本(由 LDA 確定)?

我有一個包含 5 個主題的列表,每個主題 10 個單詞,是使用 lda 找到的。

我已經分析了數據框列中的文本。 我想選擇/過濾某個特定主題中的行/文本。

如果您需要更多信息,我會提供給您。

我指的是返回此 output 的步驟:

[(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"'),
 ... ]

由...制作

# 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 個主題中的關鍵字

from pprint import pprint
pprint(lda_model.print_topics())
doc_lda = lda_model[corpus]

包含已分析文本的原始列稱為Texts ,它看起來像:

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...

我預期的 output 將是

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

謝謝

doc_lda包含每個句子的 (topic, score) 元組列表。 因此,您可以使用任何啟發式方法靈活地將主題分配給句子,例如簡單的啟發式方法將分配具有最高分數的主題。

我們可以通過這樣做來提取每個句子的主題分數:

topic_scores = [[topic_score[1] for topic_score in sent] for sent in doc_lda]

您還可以將上述內容轉換為 pandas dataframe ,其中每一行是一個句子,每一列是主題 ID。 dataframe 數據結構通常允許對主題分數句子關系進行靈活且更復雜的操作

df_topics = pd.DataFrame(topic_scores)

如果您只想分配一個句子中得分最高的主題,您可以這樣做:

max_topics = [max(sent, key=lambda x: x[1])[0] for sent in doc_lda]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM