Векторизация результатов LDA из столбца текста Pandas в несколько столбцов - PullRequest
0 голосов
/ 02 декабря 2018

Имея большой столбец текста для панд, я хочу сначала обучить модели 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)]

Это означает, что твит1 принадлежит теме 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

Есть ли какой-либо питонический способ выполнить последнюю часть (т. е. заполнить50 колонок) быстро?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я написал следующий код, и он работает правильно.Но не уверен, что это самый эффективный способ:

Сначала я создаю 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]
0 голосов
/ 02 декабря 2018

Это хорошее комплексное руководство, охватывающее ваши потребности с помощью используемых вами инструментов, панд и LDA: https://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/

Часть, которую вы ищете - 18. Поиск доминирующей темы в каждомпредложение, 19. Найдите наиболее представительный документ для каждой темы и 20. Распределение тем по документам.

...