es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
Tags:  , , ,

Answer

  1. Avatar for 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:

    # Obtener los 5 temas principales, la contribución porcentual y las palabras clave de cada documento
    for j, (topic_num, prop_topic) in enumerate(row[:5]):
        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)
    

    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.

Comments are closed.