Modulado de Tópicos y Redes en R

Hola a todos.

He realizado un modulado de tópicos de respuestas a una pregunta abierta realizada en una encuesta. SIn embargo, mi interés es poder crear una red de palabras de cada tópico de manera independiente y crear posteriormente una red de palabras de todos los temas, donde se puedan observar las conexiones entre los tópicos obtenidos.

A continuación adjunto mi código, con la esperanza de que alguien me pueda orientar en la construcción de redes de palabras

options(repos = c(CRAN = "https://cloud.r-project.org"))
library(tidyverse)
library(tidytext)                                        
library(readxl)
library(dplyr)
library(topicmodels)
library(udpipe)

encuesta <- read_xlsx("D:/University/Ayudantías/Trabajo con BD final/Nueva carpeta/Socialización digital adultos. Base en crudo (1).xlsx")
glimpse(encuesta)


##Preprocesamiento del texto##
#Cargo el modelo udpipe#
modelo_sp <- udpipe_load_model(file = "D:/University/Ayudantías/Trabajo con BD final/Nueva carpeta/spanish-ancora-ud-2.5-191206.udpipe") # cargamos el modelo en memoria

encuesta_anotadas <- udpipe_annotate( 
  object = modelo_sp, # el modelo de idioma
  x = encuesta$significado_particip, # el texto a anotar, 
  doc_id = encuesta$id, # el id de cada oracion (el resultado tendrá 1 palabra x fila)
  trace = 20
) %>% as.data.frame(.) # convertimos el resultado en data frame

#Filtro palabras m'as significativas#
library(stopwords)
encuesta_anotadas2 <- encuesta_anotadas %>% 
  filter(upos=="ADJ"| upos=="VERB"| upos=="NOUN") %>% # filtramos por tipo de palabra
  select( doc_id, lemma ) %>% # seleccionamos solo las columnas que nos interesan, esto no es necesario
  filter(!lemma %in% stopwords::stopwords(language = "es")) %>% # filtrar las que no están en la tabla de stopwords
  filter(!lemma %in% c("d", "dar", "Dar", "día", "pais", "q", "ver", "y", "o",  "ser", "decir", "tener", "haber", "estar", "hacer", "ver", "leer","ir")) %>% # filtramos verbos muy comunes
  filter(!lemma %in% c("año","dia","vez")) # filtramos palabras típicas del género de los documentos
glimpse(encuesta_anotadas2)


###Vectorizacion del texto#####
encuesta_dtm <- encuesta_anotadas2 %>%
  count(doc_id, lemma, sort = TRUE) %>% # contamos palabras x documento
  cast_dtm(doc_id, lemma, n) # convertimos a vector
encuesta_dtm


###APLICAR LDA##
library(topicmodels)
k_topics <- 7 # numero de topicos
encuesta_tm <- topicmodels::LDA(
  encuesta_dtm, # vector de terminos por documentos
  k = k_topics, # cantidad de topicos
  method = "Gibbs", # metodo de sampleo de los documentos
  control = list(seed = 1:5, nstart=5, verbose=1000))
encuesta_tm

####Exportar resultados en formato beta y gamma###
encuesta_tm_beta <- tidy(encuesta_tm, matrix = "beta")
encuesta_tm_gamma <- tidy(encuesta_tm, matrix = "gamma")
glimpse(encuesta_tm_beta)
glimpse(encuesta_tm_gamma)



####listamos los terminos que mas contribuyen a cada topico####
encuesta_tm_beta %>% # principales términos en cada tópico
  group_by(topic) %>%
  top_n(15) %>%
  ungroup() %>%
  arrange(topic, -beta) %>% # vamos a mostrarlo como grafico
  ggplot(aes(x=reorder(term, (beta)),y=beta)) + 
  geom_col() +
  facet_wrap(~topic, scales = "free_y") +
  coord_flip() +
  theme_minimal()

Nota: Por favor intenta hacer tus preguntas en inglés, ya que es el idioma preferido aquí y al usar español estás excluyendo a la mayoría de la conversación, reduciendo así tus posibilidades de obtener ayuda.


Note: Please try to make your questions in English, since it is the preferred language here and by using Spanish you are excluding most people from the conversation, thus lowering your chances of getting help.

thanks, i will do it that way

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.