topic modulation and word graph

Hello everyone.

I modulated the topics of responses to an open question asked in a survey. However, my interest is to be able to create a network of words for each topic independently and subsequently create a network of words for all the topics, where the connections between the topics obtained can be observed.

Below I attach my code, hoping that someone can guide me in building word networks.

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()

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.