Поиск 3 основных доминирующих тем для модели LDA topi c - PullRequest
0 голосов
/ 03 августа 2020

Я создаю datatable с помощью этого руководства по моделированию LDA (https://www.machinelearningplus.com/nlp/topic-modeling-visualization-how-to-present-results-lda-models/), и вместо того, чтобы просто найти одну наиболее доминирующую вершину c, я хочу расширить, чтобы найти 3 самых доминирующих темы, вместе с каждым их процентным вкладом и ключевыми словами topi c.

Для этого лучше всего создать 2 дополнительные функции для создания 3 отдельных фреймов данных и добавить каждый из результатов? Или есть более простой способ изменить функцию format_topics_sentence, чтобы вытащить 3 верхних темы из перечисленного пакета слов?

def format_topics_sentences(ldamodel=None, corpus=corpus, texts=data):
# Init output
sent_topics_df = pd.DataFrame()

# Get main topic in each document
for i, row_list in enumerate(ldamodel[corpus]):
    row = row_list[0] if ldamodel.per_word_topics else row_list            
    # print(row)
    row = sorted(row, key=lambda x: (x[1]), reverse=True)
    # Get the Dominant topic, Perc Contribution and Keywords for each document
    for j, (topic_num, prop_topic) in enumerate(row):
        if j == 0:  # => dominant topic
            wp = ldamodel.show_topic(topic_num)
            topic_keywords = ", ".join([word for word, prop in wp])
            sent_topics_df = sent_topics_df.append(pd.Series([int(topic_num), round(prop_topic,4), topic_keywords]), ignore_index=True)
        else:
            break
sent_topics_df.columns = ['Dominant_Topic', 'Perc_Contribution', 'Topic_Keywords']

# Add original text to the end of the output
contents = pd.Series(texts)
sent_topics_df = pd.concat([sent_topics_df, contents], axis=1)
return(sent_topics_df)

df_topic_sents_keywords = format_topics_sentences(ldamodel=lda_model, corpus=corpus, texts=data_ready)

# Format
df_dominant_topic = df_topic_sents_keywords.reset_index()
df_dominant_topic.columns = ['Document_No', 'Dominant_Topic', 'Topic_Perc_Contrib', 'Keywords', 'Text']
df_dominant_topic.head(10)

вывод таблицы

...