Extraer puntajes de temas para documentos LDA Gensim Python
Estoy tratando de extraer las puntuaciones de tema para los documentos en mi conjunto de datos después de usar un modelo LDA. Específicamente, he seguido la mayor parte del código de aquí: https://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/
He completado el modelo de tema y tengo los resultados que quiero, pero el código proporcionado solo muestra el tema más dominante para cada documento. ¿Hay alguna manera simple de modificar el siguiente código para darme las puntuaciones de, por ejemplo, los 5 temas más dominantes?
## tema dominante para cada documento
def format_topics_sentences(ldamodel=optimal_model, corpus=corpus, texts=data):
# Iniciar salida
sent_topics_df = pd.DataFrame()
# Obtener el tema principal en cada documento
for i, row in enumerate(ldamodel[corpus]):
row = sorted(row, key=lambda x: (x[1]), reverse=True)
# Obtener el tema dominante, contribución porcentual y palabras clave para cada documento
for j, (num_tema, prop_tema) in enumerate(row):
if j == 0: # => tema dominante
wp = ldamodel.show_topic(num_tema)
palabras_clave = ", ".join([palabra for palabra, prop in wp])
sent_topics_df = sent_topics_df.append(pd.Series([int(num_tema), round(prop_tema, 4), palabras_clave]), ignore_index=True)
else:
break
sent_topics_df.columns = ['Tema_Dominante', 'Contribución_Porcentual', 'Palabras_Clave']
# Agregar el texto original al final de la salida
contenido = pd.Series(texts)
sent_topics_df = pd.concat([sent_topics_df, contenido], axis=1)
return sent_topics_df
df_temas_sentencias_palabras_clave = format_topics_sentences(ldamodel=optimal_model, corpus=corpus, texts=data)
# Formato
df_tema_dominante = df_temas_sentencias_palabras_clave.reset_index()
df_tema_dominante.columns = ['Documento_No', 'Tema_Dominante', 'Contribución_Porcentual', 'Palabras_Clave', 'Texto']
# Mostrar
df_tema_dominante.head(10)
davy.ai
Para obtener los 5 temas principales y sus puntajes para cada documento, puedes modificar el código reemplazando el bucle interno por el siguiente código:
Aquí, estamos iterando sobre los primeros 5 temas en lugar del tema dominante y agregando su información al marco de datos
sent_topics_df
. El resto del código puede permanecer igual.Esto te proporcionará un marco de datos con los 5 temas principales y sus puntajes para cada documento.