Librerias

library(rvest)
library(magrittr)
library(wordcloud)
## Loading required package: RColorBrewer
library(tm)
## Loading required package: NLP
library(tidyr)
## 
## Attaching package: 'tidyr'
## The following object is masked from 'package:magrittr':
## 
##     extract
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
## 
##     annotate
library(stringr)
library(tidytext)
library(textdata)
library(janeaustenr)
library(dslabs)
library(topicmodels)

FUENTES DE INFORMACIÓN

  • Se realiza webscrapping de manera manual a fuentes de NOTICIAS, GOBIERNO y ASOCIACIONES CIVILES. Las fuentes de informacion se nombran de acuerdo al numero de url que se utiliza, el año y el tipo de fuente. Es importante destacar que se guarda el texto utilizando html.nodes y se especifica l texto principal y el titulo de la noticia, esto con busca de crear una limpieza mas completa.

NOTICIAS.

### AÑO 2018 (NOTICIAS)

# Lista of URLs
url_list_2018 <- c(
  "https://www.dw.com/es/detienen-al-presunto-asesino-de-tres-activistas-lgbti-en-m%C3%A9xico/a-44301325",
  "https://expansion.mx/empresas/2018/11/13/estas-son-las-empresas-en-mexico-mas-incluyentes",
  "https://www.infobae.com/america/mexico/2018/07/26/desnuda-con-huellas-de-tortura-y-un-alambre-de-puas-en-el-cuello-el-brutal-asesinato-de-una-reina-gay-en-mexico/",
  "https://www.infobae.com/america/mexico/2018/07/23/revuelo-en-mexico-un-conductor-de-television-asegura-que-dejo-de-ser-homosexual/",
  "https://www.elsoldemexico.com.mx/doble-via/virales/boxeador-mexicano-llama-plaga-a-la-comunidad-lgbt-me-cagan-los-gays-video-dario-larralde-tokio-2020-2771682.html",
  "https://www.france24.com/es/20180520-mexico-posiciones-candidatos-derechos-lgbti",
  "https://peopleenespanol.com/celebridades/transexual-suicidio-lupita-jones/",
  "https://www.elperiodico.com/es/internacional/20181218/comunidad-lgbt-mexico-derechos-respetados-7207651",
  "https://www.eluniversal.com.mx/espectaculos/una-mujer-jamas-sera-igual-un-transgenero-lupita-jones/",
  "https://www.record.com.mx/futbol-futbol-nacional-seleccion-mexicana/piden-tolerancia-entre-marcha-del-orgullo-gay-y-festejos",
  "https://www.elsoldemexico.com.mx/gossip/omg/carlos-vela-relacion-transexual-amorio-alejandra-salinas-carlos-salcido-2129340.html",
  "https://www.eluniversal.com.mx/colaboracion/mochilazo-en-el-tiempo/nacion/sociedad/40-anos-de-las-marchas-gay/",
  "https://los40.com.mx/los40/2018/06/13/actualidad/1528913209_465819.html",
  "https://www.elsoldemexico.com.mx/gossip/omg/historico.-joven-transexual-engalana-por-primera-vez-una-portada-de-playboy-558024.html",
  "https://www.infobae.com/america/mexico/2018/04/21/los-secretos-del-ultimo-vagon-del-metro-de-la-ciudad-de-mexico-la-cajita-feliz-de-la-comunidad-gay/"
  
  
)

for (i in seq_along(url_list_2018)) {
  url <- url_list_2018[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2018_not_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    # Escribe un error
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2019 (NOTICIAS)

url_list_2019 <- c( "https://www.gq.com.mx/entretenimiento/articulo/soy-gay-estoy-orgulloso-de-decirlo-exclusiva-jorge-luis-martinez-patinador-mexicano",
 "https://www.elfinanciero.com.mx/economia/si-la-comunidad-lgbt-fuera-un-pais-su-economia-seria-3-veces-mas-grande-que-la-de-mexico/",
 "https://politica.expansion.mx/cdmx/2019/06/29/cronica-a-sus-41-anos-la-marcha-lgbt-reune-a-generaciones-en-una-misma-lucha",
 "https://www.infobae.com/america/mexico/2019/10/11/soy-gay-asi-fue-como-un-diputado-pidio-aprobar-el-matrimonio-igualitario-en-sonora/",
 "https://www.gq.com.mx/estilo-de-vida/articulo/historia-y-significado-orgullo-gay",
 "https://www.animalpolitico.com/2019/05/asesinatos-lgbt-crimenes-odio-mexico",
 "https://www.infobae.com/america/entretenimiento/2019/05/30/mauricio-clark-alista-marcha-ex-gay-en-mexico-puedes-dejar-atras-una-vida-homosexual/",
 "https://www.elsoldemexico.com.mx/mexico/sociedad/parejas-gay-ya-podran-casarse-en-consulados-mexicanos-de-todo-el-mundo-3630987.html",
"https://www.elsoldemexico.com.mx/mundo/reprimen-una-inedita-marcha-gay-en-cuba-3611941.html",
 "https://www.forbes.com.mx/no-existe-el-gen-gay-apunta-estudio-sobre-el-adn/",
 "https://mexico.as.com/mexico/2019/05/08/tikitakas/1557332833_619030.html",
 "https://www.milenio.com/politica/comunidad/comunidad-gay-los-cinco-estados-lgbt-mas-incluyentes-en-mexico",
 "https://www.quien.com/politica/2019/05/17/andres-manuel-lopez-obrador-con-la-bandera-del-arcoiris-entre-las-manos",
 "https://mexico.as.com/mexico/2019/06/12/tikitakas/1560353638_361181.html",
"https://www.elsoldemexico.com.mx/mundo/quien-rechaza-a-los-homosexuales-no-tiene-corazon-humano-papa-francisco-3343342.html"
)

for (i in seq_along(url_list_2019)) {
  url <- url_list_2019[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2019_not_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    # Escribe un error
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2020 (NOTICIAS)

# List of URLs for 2020 articles
url_list_2020 <- c(
  "https://www.vogue.mx/estilo-de-vida/articulo/belinda-envia-mensaje-a-la-comunidad-lgtbi-en-marcha-de-orgullo-gay-en-instagram",
  "https://www.milenio.com/politica/comunidad/marcha-orgullo-gay-41-anos-llenar-color-calles-cdmx",
  "https://www.eluniverso.com/noticias/2020/06/27/nota/7887000/activistas-lgbt-mexico-piden-justicia-crimenes-odio-durante-maraton/",
  "https://udgtv.com/noticias/la-comunidad-lgbt-de-mexico-triunfa-con-la-marcha-en-linea-mas-grande-del-mundo/13806",
  "https://politica.expansion.mx/estados/2020/08/12/un-joven-activista-lgbt-es-asesinado-en-zapopan-jalisco",
  "https://www.eluniversal.com.mx/opinion/mochilazo-en-el-tiempo/el-nueve-el-bar-gay-que-desafio-los-prejuicios-en-los-80/",
  "https://expansion.mx/empresas/2020/12/03/el-numero-de-empresas-lgbt-friendly-sube-a-casi-el-doble-este-ano-en-mexico",
  "https://www.espn.com.mx/futbol/mexico/nota/_/id/7093490/america-pumas-orgullo-gay-comunidad-lgbtttiqa",
  "https://www.eluniversal.com.mx/de-ultima/victoria-volkova-es-la-primera-mujer-transgenero-en-aparecer-en-playboy-mexico/",
  "https://www.gq.com.mx/entretenimiento/articulo/luz-noceda-de-the-owl-house-primer-personaje-bisexual-de-disney",
  "https://www.marthadebayle.com/v3/radiov3/sosv3/empresas-gay-friendly-en-mexico-2/",
  "https://www.dw.com/es/m%C3%A9xico-busca-una-cura-para-la-homofobia/a-53735445",
  "https://www.elsoldemexico.com.mx/mundo/benedicto-xvi-compara-al-matrimonio-homosexual-con-el-anticristo-5183682.html",
  "https://expansion.mx/carrera/2020/06/09/ejecutivos-lgbt-orgullosos-e-influyentes",
  "https://elpais.com/mexico/2020-08-13/el-asesinato-de-un-joven-homosexual-en-jalisco-enciende-de-nuevo-las-alarmas-sobre-los-delitos-de-odio-en-mexico.html"
  
)

for (i in seq_along(url_list_2020)) {
  url <- url_list_2020[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2020_not_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2021 (NOTICIAS)

url_list_2021 <- c(
  "https://www.elfinanciero.com.mx/nacional/2021/06/26/en-mexico-11-de-la-poblacion-pertenece-a-la-comunidad-lgbttti-segun-encuesta/",
  "https://www.swissinfo.ch/spa/m%C3%A9xico-lgbt--documentaci%C3%B3n-_los-avances-y-retos-de-la-comunidad-lgbt-en-m%C3%A9xico-en-esta-fiesta-del-orgullo/46736542",
  "https://mexico.as.com/mexico/2021/06/27/tikitakas/1624747409_345975.html",
  "https://politica.expansion.mx/cdmx/2021/12/30/pareja-gay-exige-disculpas-y-reparacion-del-dano-a-six-flags",
  "https://latinus.us/2021/12/30/six-flags-discrimina-pareja-gay-corrige-eliminando-politica-comportamiento-afectuoso/",
  "https://www.telediario.mx/comunidad/denuncian-discriminacion-pareja-gay-parque-diversiones-cdmx",
  "https://www.sandiegouniontribune.com/en-espanol/noticias/mexico/articulo/2021-07-07/el-congreso-de-la-ciudad-de-mexico-aprueba-ley-de-derechos-de-personas-lgbt",
  "https://mexico.as.com/mexico/2021/05/17/actualidad/1621205355_217302.html",
  "https://www.elsoldemexico.com.mx/doble-via/virales/hijo-de-superman-se-declara-bisexual-7327211.html",
  "https://www.latimes.com/espanol/mexico/articulo/2021-06-08/queman-y-asesinan-a-joven-gay-en-caribe-mexicano-tras-revelar-prueba-positiva",
  "https://www.latimes.com/espanol/mexico/articulo/2021-06-28/lopez-obrador-asegura-que-esta-por-la-diversidad-en-el-dia-del-orgullo-lgbt",
  "https://www.nytimes.com/es/2021/07/02/espanol/opinion/homofobia-futbol-mexico.html",
  "https://www.homosensual.com/lgbt/es-delito-ponerle-colores-lgbt-a-la-bandera-de-mexico/",
  "https://www.milenio.com/cultura/homofobia-transfobia-bifobia-celebra-17-mayo",
  "https://www.swissinfo.ch/spa/m%C3%A9xico-lgbt--cr%C3%B3nica-_lady-tacos-de-canasta--la-famosa-vendedora-trans-salta-a-la-pol%C3%ADtica-mexicana/46560754"
)

for (i in seq_along(url_list_2021)) {
  url <- url_list_2021[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2021_not_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2022 (NOTICIAS)

url_list_2022 <- c(
  "https://www.sandiegouniontribune.com/en-espanol/noticias/story/2022-02-18/mexicano-logra-registro-no-binario-en-acta-de-nacimiento",
  "https://agenciapresentes.org/2022/02/17/reconocen-por-primera-vez-la-identidad-de-una-persona-no-binaria-en-mexico/",
  "https://www.televisa.com/noticias/que-dia-se-conmemora-en-mexico-el-orgullo-lgbt/",
  "https://agenciapresentes.org/2022/11/04/mexico-hidalgo-se-convierte-en-el-primer-estado-que-reconoce-a-personas-no-binarias/",
  "https://www.elfinanciero.com.mx/nacional/2022/08/31/viruela-del-mono-organizaciones-gay-piden-acciones-para-frenar-contagios/",
  "https://www.foxsports.com.mx/2022/05/17/futbolistas-que-se-han-declarado-gays-en-los-ultimos-anos/",
  "https://elpais.com/mexico/2022-04-01/radiografia-de-la-transfobia-en-mexico-me-ensenaron-que-ser-yo-era-un-motivo-de-muerte.html",
  "https://www.hrw.org/es/news/2022/05/31/ee-uu-solicitantes-de-asilo-lgbt-en-peligro-en-la-frontera",
  "https://mexico.as.com/actualidad/sre-emite-primer-documento-oficial-para-personas-no-binarias-como-es-y-que-incluye-n/",
  "https://indeporte.cdmx.gob.mx/comunicacion/nota/celebra-gobierno-capitalino-mes-del-orgullo-con-la-iii-copa-lgbt-y-matrimonios-igualitarios",
  "https://www.dgcs.unam.mx/boletin/bdboletin/2022_524.html",
  "https://mexico.as.com/tikitakas/alan-estrada-confiesa-publicamente-que-es-gay-envia-mensaje-a-la-comunidad-lgbt-n/",
  "https://www.elsoldemexico.com.mx/mundo/la-primera-identificacion-oficial-no-binaria-9096871.html",
  "https://politica.expansion.mx/cdmx/2022/05/17/iluminan-monumentos-contra-la-homofobia-transfobia-y-bifobia",
  "https://www.excelsior.com.mx/funcion/jovenes-golpean-hombre-gay-afuera-taqueria-cdmx/1552036",
  "https://www.france24.com/es/am%C3%A9rica-latina/20231114-hallan-sin-vida-a-ociel-baena-primer-magistrade-electoral-no-binario-de-latinoam%C3%A9rica",
  "https://noticias.imer.mx/blog/esto-incomoda-porque-rompe-paradigmas-que-significa-ser-magistrade-en-mexico/",
  
  
  "https://www.eltiempo.com/mundo/latinoamerica/hallan-muerto-a-magistrade-de-genero-no-binario-que-lucho-por-derechos-lgbti-en-mexico-825437",
  "https://www.milenio.com/politica/emiten-primer-pasaporte-no-binario-en-mexico-a-magistrade-ociel-baena",
  "https://www.elfinanciero.com.mx/cdmx/2023/09/16/mujeres-trans-en-los-banos-publicos-activistas-protestan-en-la-cineteca-nacional/",
  "https://aristeguinoticias.com/1507/mexico/fotos-y-videos-ni-hombre-ni-mujer-no-binarie-realizan-primera-marcha-no-binarie-en-cdmx/",
  "https://aristeguinoticias.com/1507/mexico/mexicanes-reconocimiento-legal-de-personas-no-binarias-avanza-en-mexico/",
  "https://elpais.com/mexico/2023-08-14/wendy-guevara-la-actriz-trans-que-ha-convertido-la-casa-de-los-famosos-en-su-propio-show.html",
  "https://aristeguinoticias.com/0703/mexico/cis-trans-no-binarix-glosario-de-diversidad-de-genero-para-el-8m/",
  "https://aristeguinoticias.com/2207/deportes/quinn-primera-persona-trans-no-binaria-que-juega-en-un-mundial-femenil/",
  "https://www.jornada.com.mx/notas/2023/09/16/sociedad/activista-advierte-riesgos-de-la-comunidad-trans-en-mexico/",
  "https://elpais.com/mexico/2023-02-22/una-protesta-por-los-derechos-de-las-personas-trans-enfrenta-a-las-autoridades-con-los-manifestantes-en-el-congreso-de-ciudad-de-mexico.html"
)

for (i in seq_along(url_list_2022)) {
  url <- url_list_2022[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2022_not_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    # Print an error message
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## Articulo 16 scraped correctamente
## Articulo 17 scraped correctamente
## Articulo 18 scraped correctamente
## Articulo 19 scraped correctamente
## Articulo 20 scraped correctamente
## Articulo 21 scraped correctamente
## Articulo 22 scraped correctamente
## Articulo 23 scraped correctamente
## Articulo 24 scraped correctamente
## Articulo 25 scraped correctamente
## Articulo 26 scraped correctamente
## Articulo 27 scraped correctamente

GOBIERNO

## AÑO 2018

url_list_2018_gob <- c(
  "https://www.gob.mx/ceav/documentos/diagnostico-nacional-sobre-la-discriminacion-hacia-personas-lgbti-en-mexico",
  "https://www.gob.mx/ceav/prensa/instituciones-y-organizaciones-civiles-repudiamos-los-recientes-asesinatos-de-personas-de-la-diversidad-sexual-y-de-genero?idiom=es",
  "https://www.gob.mx/conamed/articulos/la-conamed-participa-en-una-reunion-de-pares-en-la-sede-de-la-oms-en-washington-d-c?idiom=es",
  "https://www.gob.mx/conavim/es/articulos/protocolo-de-actuacion-de-la-policia-federal-para-casos-que-involucren-personas-de-la-comunidad-lgbttti?idiom=es",
  "https://www.gob.mx/imjuve/articulos/dia-internacional-del-orgullo-lgbtiq?idiom=es",
  "https://www.gob.mx/cultura/prensa/festival-mix-vuelve-con-amplia-seleccion-de-cine-sobre-diversidad-sexual",
  "https://www.gob.mx/sectur/prensa/la-actividad-turistica-en-mexico-hoy-tiene-una-nueva-dimension-social-232853?idiom=es-MX"
)

for (i in seq_along(url_list_2018_gob)) {
  url <- url_list_2018_gob[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2018_gob_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## AÑO 2019

url_list_2019_gob <- c(
  "https://www.gob.mx/salud%7Cseguropopular/es/articulos/ponencia-el-derecho-a-la-salud-de-las-comunidades-lgbt",
  "https://www.gob.mx/cultura/articulos/breve-historia-de-la-primera-marcha-lgbttti-de-mexico",
  "https://www.gob.mx/inapam/es/articulos/diversidad-sexual-en-personas-adultas-mayores?idiom=es",
  "https://www.gob.mx/sipinna/articulos/que-es-el-bullying-homofobico?idiom=es",
  "https://www.gob.mx/indesol/prensa/visibilizan-movimientos-lgbti-en-el-mundo-y-su-impacto-en-mexico-hacia-poblaciones-diversa",
  "https://www.gob.mx/aprendemx/articulos/mitos-y-realidades-sobre-las-personas-con-orientaciones-sexuales-e-identidades-de-genero-diversas?idiom=es",
  "https://www.gob.mx/sre/prensa/acompanan-embajadas-y-consulados-campana-en-favor-de-la-diversidad-lgbt-200754",
  "https://www.gob.mx/presidencia/prensa/conferencia-de-prensa-del-presidente-andres-manuel-lopez-obrador-del-17-de-mayo-de-2019-200627?idiom=en",
  "https://www.gob.mx/indesol/prensa/discuten-los-derechos-humanos-de-la-poblacion-lgbti-en-condicion-de-migrante",
  "https://www.gob.mx/sfp/documentos/red-de-apoyo-lgbti-de-la-funcion-publica",
  "https://www.gob.mx/imss/articulos/implementa-imss-acciones-que-fomentan-el-respeto-y-garantizan-los-derechos-de-la-diversidad-sexual"
)

for (i in seq_along(url_list_2019_gob)) {
  url <- url_list_2019_gob[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2019_gob_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## AÑO 2020

# List of URLs for 2020 government articles
url_list_2020_gob <- c(
  "https://www.gob.mx/cultura/prensa/con-actividades-artisticas-el-inbal-conmemora-el-dia-internacional-del-orgullo-lgbt",
  "https://www.gob.mx/cultura/prensa/cortometrajes-para-conmemorar-el-dia-del-orgullo-lgbt",
  "https://www.gob.mx/indesol/prensa/colectivo-jotos-de-guerrero-en-la-lucha-por-visibilizar-los-derechos-de-las-poblaciones-diversas",
  "https://www.gob.mx/inmujeres/articulos/discriminacion-de-la-comunidad-lgbt-en-los-centros-de-trabajo-una-realidad-en-mexico",
  "https://www.gob.mx/segob/prensa/gobierno-de-mexico-comprometido-para-eliminar-discriminacion-por-orientacion-sexual-e-identidad-de-genero-senala-secretaria-de-gobernacion",
  "https://www.gob.mx/cultura/prensa/conmemorara-el-cecut-el-dia-internacional-del-orgullo-gay-con-conversatorio-a-distancia",
  "https://www.gob.mx/sectur/prensa/concluyo-exitosamente-miguel-torruco-su-participacion-en-la-feria-internacional-de-turismo-de-espana?idiom=es-MX",
  "https://www.gob.mx/sectur/prensa/la-actividad-turistica-en-mexico-hoy-tiene-una-nueva-dimension-social-232853?idiom=es-MX"
)

for (i in seq_along(url_list_2020_gob)) {
  url <- url_list_2020_gob[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2020_gob_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## AÑO 2021

url_list_2021_gob <- c(
  "https://www.gob.mx/inapam/es/articulos/vejeces-diversas-personas-mayores-lgbtttiqa-lesbianas-gay-bisexuales-transgenero-transexuales-intersexuales-queer-y-asexuales?idiom=es",
  "https://www.gob.mx/inpi/es/articulos/muxes-y-la-comunidad-lgbtttiqa?idiom=es",
  "https://www.gob.mx/salud/cnegsr/es/articulos/recursos-contra-la-discriminacion-y-la-violencia-por-orientacion-sexual-identidad-o-expresion-de-genero?idiom=es",
  "https://www.gob.mx/salud/es/articulos/blog-275701?idiom=es"
)

for (i in seq_along(url_list_2021_gob)) {
  url <- url_list_2021_gob[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2021_gob_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## AÑO 2022

url_list_2022_gob <- c(
  "https://www.gob.mx/semar/acciones-y-programas/derechos-humanos-de-las-personas-lgtb",
  "https://www.gob.mx/imss/documentos/protocolo-de-atencion-lgbttti-en-el-imss",
  "https://www.gob.mx/sre/documentos/personas-lgbtiq-94153",
  "https://www.gob.mx/imss/prensa/celebra-imss-resolucion-por-pension-de-viudez-entre-parejas-del-mismo-sexo",
  "https://www.gob.mx/conasami/prensa/conasami-presenta-brecha-salarial-para-grupos-de-interes-por-potencial-discriminacion-laboral?idiom=es",
  "https://www.gob.mx/sectur/prensa/sectur-impulsa-acreditacion-en-el-segmento-lgbtq-para-destinos-y-empresas-en-mexico",
  "https://www.gob.mx/salud/prensa/vincular-viruela-simica-con-la-poblacion-lgbtttiq-genera-estigma-y-discriminacion",
  "https://www.gob.mx/sre/prensa/second-meeting-of-lgbtq-mexican-communities-abroad?idiom=en",
  "https://www.gob.mx/cultura/prensa/la-actriz-luz-maria-jerez-leera-fragmentos-de-familias-monstruosas-como-parte-de-quieres-que-te-lo-lea-otra-vez",
  "https://www.gob.mx/segob/prensa/llaman-conapred-fmf-y-liga-mx-a-reconocer-y-respetar-diversidad-sexual-en-el-futbol",
  "https://www.gob.mx/sre/prensa/sre-celebra-encuentro-con-comunidades-mexicanas-residentes-en-el-exterior",
  "https://www.gob.mx/sre/prensa/the-foreign-ministry-meets-with-representatives-of-mexican-communities-in-the-us?idiom=en",
  "https://www.gob.mx/cultura/prensa/la-galeria-jose-maria-velasco-comparte-la-tradicion-de-la-vela-muxe-en-la-ciudad-de-mexico",
  "https://www.gob.mx/cultura/articulos/nancy-cardenas-guerrillera-disfrazada-de-artista",
  "https://www.gob.mx/cultura/prensa/el-museo-casa-de-carranza-desarrollara-jornada-cultural-por-el-dia-internacional-del-orgullo-lgbtttiq"
)

for (i in seq_along(url_list_2022_gob)) {
  url <- url_list_2022_gob[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1,  p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2022_gob_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
ASOCIACION CIVIL
## AÑO 2018

url_list_2018_ac <- c(
  "https://www.yaajmexico.org/blog/descargables/encuesta-nacional-sobre-discriminacion-y-juventudes-lgbti/",
  "https://www.yaajmexico.org/blog/articulos/la-homofobia-esta-viva-y-coleando-la-prohibicion-a-las-curas-lgbt/",
  "https://www.yaajmexico.org/blog/notas/hawai-prohibe-las-terapias-de-conversion-para-la-juventud-lgbtq/",
  "https://www.yaajmexico.org/blog/notas/embajadas-se-reuniran-para-fijar-postura-sobre-derechos-humanos-lgbti-en-mexico/",
  "https://www.yaajmexico.org/blog/notas/el-parlamento-europeo-toma-una-posicion-contra-las-terapias-de-conversion-lgbti-por-primera-vez/",
  "https://www.yaajmexico.org/blog/notas/se-dijo-que-no-era-enfermedad-nunca-se-dijo-que-la-homosexualidad-que-fuera-saludable-psicologo/",
  "https://www.yaajmexico.org/blog/articulos/el-rechazo-familiar-puede-causar-danos-irreversibles-a-la-salud-de-las-personas-lgbt/",
  "https://www.yaajmexico.org/blog/ecosig/presentacion-del-dossier-ecosig/",
  "https://www.yaajmexico.org/blog/notas/la-cndh-se-pronuncia-en-contra-de-las-practicas-de-conversion/",
  "https://www.yaajmexico.org/blog/notas/ganan-juicio-contra-las-terapias-de-conversion-en-china/"
)

for (i in seq_along(url_list_2018_ac)) {
  url <- url_list_2018_ac[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2018_ac_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## AÑO 2019

url_list_2019_ac <- c(
  "https://www.yaajmexico.org/blog/notas/resultados-fortalecete-lgbti-2019/",
  "https://www.yaajmexico.org/blog/instrumentos/guia-universidades-libres-de-violencia-y-discriminacion-por-orientacion-sexual-e-identidad-de-genero/",
  "https://www.yaajmexico.org/blog/ecosig/guia-nada-que-curar/",
  "https://www.yaajmexico.org/blog/comunicados/informe-rendicion-de-cuentas-2018/",
  "https://www.yaajmexico.org/blog/instrumentos/manual-para-estudiantes-universidades-incluyentes-y-libres-de-discriminacion/",
  "https://infanciastrans.org/testimonio-luis-en-foro-de-infancias-trans/",
  "https://infanciastrans.org/testimonio-sofia-en-foro-de-infancias-trans/",
  "https://infanciastrans.org/somos-diversidad-retratos-de-genero/",
  "https://infanciastrans.org/infancias-trans-por-genaro-lozano/",
  "https://infanciastrans.org/10-de-octubre-iniciativa-para-la-via-administrativa-de-la-identidad-de-genero-en-personas-menores-de-18-anos-en-la-ciudad-de-mexico/",
  "https://infanciastrans.org/resguardo-de-actas-de-nacimiento/",
  "https://infanciastrans.org/decalogo-para-madres-y-padres/",
  "https://infanciastrans.org/modificacion-de-genero-e-identidad/",
  "https://infanciastrans.org/que-hacer-si-tengo-una-hija-hijo-o-hije-trans/"
)

for (i in seq_along(url_list_2019_ac)) {
  url <- url_list_2019_ac[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2019_ac_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## AÑO 2020

url_list_2020_ac <- c(
  "https://infanciastrans.org/materiales-audiovisuales-sobre-infancias-y-adolescencias-trans/",
  "https://infanciastrans.org/camino-a-jalisco/", 
  "https://infanciastrans.org/personas-trans-en-la-cdmx-panorama-actual-2/",
  "https://infanciastrans.org/activismo-dentro-de-la-escuela/",
  "https://infanciastrans.org/por-que-y-como-podemos-ayudar-a-las-infancias-y-adolescencias-trans/",
  "https://infanciastrans.org/repuesta-a-obispo-de-cuernavaca-culpa-a-ninez-trans-por-coronavirus/",
  "https://infanciastrans.org/rechazo-durante-la-cuarentena/",
  "https://infanciastrans.org/mitos-y-realidades-de-la-iniciativa-de-infancias-trans/",
  "https://infanciastrans.org/que-significa-ser-mujer-nina/",
  "https://infanciastrans.org/infancias-trans-en-la-ciudad-de-mexico-la-antesala-de-la-desjudicializacion-2/",
  "https://infanciastrans.org/miderechoaexistir-2/",
  "https://infanciastrans.org/cuando-una-persona-trans-se-enferma/",
  "https://infanciastrans.org/alerta-no-al-retroceso/",
  "https://www.yaajmexico.org/blog/nuestrasplumas/historico-esta-semana-avanzo-ley-de-identidad-de-genero-en-el-edomex/",
  "https://www.yaajmexico.org/blog/articulos/cientos-de-lideres-religiosos-piden-prohibir-las-terapias-de-conversion-sexual/",
  "https://www.yaajmexico.org/blog/articulos/morena-presenta-iniciativa-de-ley-para-sancionar-ecosig-en-guanajuato/",
  "https://www.yaajmexico.org/blog/articulos/se-busca-prohibir-ecosig-en-sinaloa/",
  "https://www.yaajmexico.org/blog/articulos/prohiben-ecosig-en-el-edomex/"
)


for (i in seq_along(url_list_2020_ac)) {
  url <- url_list_2020_ac[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1, p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2020_ac_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## Articulo 16 scraped correctamente
## Articulo 17 scraped correctamente
## Articulo 18 scraped correctamente
## AÑO 2021

url_list_2021_ac <- c(
  "https://infanciastrans.org/adultocentrismo-un-obstaculo-mas-para-las-infancias-trans/",
  "https://infanciastrans.org/el-reconocimiento-a-la-identidad-en-ninas-ninos-nines-y-adolescentes-transgenero-en-mexico-un-derecho-humano-pendiente/",
  "https://www.yaajmexico.org/blog/articulos/ratzinger-lanza-discursos-de-odio-contra-comunidad-lgbti/",
  "https://www.yaajmexico.org/blog/articulos/violencia-acida-el-verdadero-borrado-de-mujeres/",
  "https://www.yaajmexico.org/blog/articulos/gobierno-de-australia-apuesta-por-inclusion/",
  "https://www.yaajmexico.org/blog/comunicados/nada-que-curar-en-yucatan/",
  "https://www.yaajmexico.org/blog/nuestrasplumas/la-visibilizacion-de-puebos-indigenas-y-la-comunidad-lgbti/",
  "https://www.yaajmexico.org/blog/uncategorized/the-prom-mexico-obraconrepresentacionlesbica/",
  "https://www.yaajmexico.org/blog/articulos/discapacidad-y-diversidad-sexual/",
  "https://www.yaajmexico.org/blog/comunicados/a-un-ano-de-prohibirse-los-ecosig-cdmx/",
  "https://www.yaajmexico.org/blog/articulos/por-que-conmemoramos-el-mes-del-orgullo/",
  "https://www.yaajmexico.org/blog/articulos/deconstruyendo-lo-no-binario/"
)

for (i in seq_along(url_list_2021_ac)) {
  url <- url_list_2021_ac[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1,  p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2021_ac_", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## AÑO 2022

url_list_2022_combined <- c(
  "https://www.yaajmexico.org/blog/notas/ley-contra-terapias-de-conversion-es-presentada-en-la-camara-de-diputados/",
  "https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-terapia-hormonal-para-personas-trans-en-mexico-con-maximo-carrasco/",
  "https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-terapia-hormonal-modelantes-y-arvs-de-vih-para-personas-trans-en-mexico-con-tanya-vazquez/",
  
  "https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-pastillas-abortifacientes-en-mexico-con-dahlia-de-la-cerda/",
  "https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-pastillas-abortifacientes-en-mexico-con-isabel-fulda/",
  "https://www.yaajmexico.org/blog/uncategorized/sexualidades-quimicas-antirretrovirales-de-vih-en-mexico-con-ruben-barba/",
  "https://infanciastrans.org/la-apropiacion-de-la-vida-hablemos-de-opresiones-y-normatividades/",
  "https://infanciastrans.org/conoce-a-nuestro-consejo-consultivo/",
  "https://www.yaajmexico.org/blog/articulos/la-importancia-de-tomar-las-calles/",
  "https://www.yaajmexico.org/blog/articulos/la-alegria/",
  "https://www.yaajmexico.org/blog/articulos/trans-formando-las-acciones-afirmativas-en-mexico/",
  "https://www.yaajmexico.org/blog/articulos/ser-nuu-savi-y-o-ser-gay/",
  "https://www.yaajmexico.org/blog/comunicados/encuentro-de-liderazgos-politicos-lgbti-de-las-americas-y-el-caribe/"

)

for (i in seq_along(url_list_2022_combined)) {
  url <- url_list_2022_combined[i]
  tryCatch({
    pagina <- read_html(url)
    texto <- pagina %>%
      html_nodes("h1,  p") %>%
      html_text() %>%
      str_squish()
    nombre_archivo <- paste0("2022_ac", i, ".txt")
    writeLines(texto, nombre_archivo)
    cat("Articulo", i, "scraped correctamente\n")
  }, error = function(e) {
    cat("Error al intentar scrapeo de articulo", i, ":", conditionMessage(e), "\n")
  })
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente

Funciones Centrales Por Año Noticias

se identifican los archivos de texto con su tipo de fuente y año. Al realizaresto, los archivos se guardan en una variable denominada de acuerdo al tipo de fuente y el conjunto de año que estan revisando.

# NOTICIAS
art_2018 <- list.files(pattern = "^2018_not.*\\.txt$", full.names = TRUE)
art_2019 <- list.files(pattern = "^2019_not.*\\.txt$", full.names = TRUE)
art_2020 <- list.files(pattern = "^2020_not.*\\.txt$", full.names = TRUE)
art_2021 <- list.files(pattern = "^2021_not.*\\.txt$", full.names = TRUE)
art_2022 <- list.files(pattern = "^2022_not.*\\.txt$", full.names = TRUE)

# GOBIERNO
gob_2018 <- list.files(pattern = "^2018_gob.*\\.txt$", full.names = TRUE)
gob_2019 <- list.files(pattern = "^2019_gob.*\\.txt$", full.names = TRUE)
gob_2020 <- list.files(pattern = "^2020_gob.*\\.txt$", full.names = TRUE)
gob_2021 <- list.files(pattern = "^2021_gob.*\\.txt$", full.names = TRUE)
gob_2022 <- list.files(pattern = "^2022_gob.*\\.txt$", full.names = TRUE)


# ASOCIACION CIVIL
civil_2018 <- list.files(pattern = "^2018_ac.*\\.txt$", full.names = TRUE)
civil_2019 <- list.files(pattern = "^2019_ac.*\\.txt$", full.names = TRUE)
civil_2020 <- list.files(pattern = "^2020_ac.*\\.txt$", full.names = TRUE)
civil_2021 <- list.files(pattern = "^2021_ac.*\\.txt$", full.names = TRUE)
civil_2022 <- list.files(pattern = "^2022_ac.*\\.txt$", full.names = TRUE)

LIMPIEZA

Se realiza una limpieza central, identifiando frases, signos y palabras que pueden crear ruido en el analisis. Es importante destacar que la limpieza de los archivos fue hecha antes gracias al html.nodes

limpiar_texto <- function(archivo) {
  tryCatch({
    texto <- readLines(archivo, warn = FALSE)
    texto <- paste(texto, collapse = " ")
    texto <- tolower(texto) 
    codigo_a_eliminar <- "var SubGroup = '.*?console.log\\(true\\);\\s*"
    texto <- gsub(codigo_a_eliminar, "", texto, perl = TRUE) 
    texto <- gsub("http\\S+|www\\.\\S+","",texto) 
    texto <- gsub("<.*?>","",texto) 
    texto <- gsub("[[:punct:]]","",texto)
    texto <- gsub("\\d+","",texto) 
    texto <- gsub("\\s+"," ",texto) 
  remove_numbers_es <- function(texto) gsub("\\b(uno|dos|tres|cuatro|cinco|seis|siete|ocho|nueve|diez)\\b", "", texto)
  remove_nexos <- function(texto) {
    nexos <- c("a", "ante", "bajo", "cabe", "con", "contra", "de", "desde", "en", "entre", "hacia", "hasta", "para", "por", "según", "sin", "so", "sobre", "tras", "y", "o", "u", "ni", "pero", "porque", "pues", "ya", "aunque", "si", "como", "cuando", "donde")
    words <- unlist(strsplit(texto, " ")) 
    words <- words[!tolower(words) %in% nexos]  
    paste(words, collapse = " ")
}

remove_palabras_tiempo <- function(texto) {
  palabras_tiempo <- c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo",
                       "ayer", "hoy", "mañana", "ahora", "tarde", "noche", "tiempo" ,"tardes" ,"buenas" ,"buenos" ,"noches" , "días" ,"semanas","meses","años")
  words <- unlist(strsplit(texto, " ")) 
  words <- words[!tolower(words) %in% palabras_tiempo]
  paste(words, collapse = " ")
}

remove_question_words <- function(texto) gsub("\\b(quién|qué|cómo|dónde|cuándo|por qué)\\b", "", texto)


  texto <- remove_nexos(texto) 
  texto <- remove_numbers_es(texto) 
  texto <- remove_question_words(texto) 
  texto <- remove_palabras_tiempo(texto) 
  
  stopwords_es <- stopwords("es")
  palabras <- unlist(strsplit(texto, " "))
  palabras_filtradas <- palabras[!palabras %in% stopwords_es]
  
  texto <- paste(palabras_filtradas, collapse = " ")
  return(texto)
  
  }, error = function(e) {
    cat("Error al leer el archivo", archivo, ":", conditionMessage(e), "\n")
    return(NULL)  # Retorna NULL en caso de error
  })
}

MATRIZ

Se aplica la limpieza central a cada variable de la fuente por año.

## NOTICIAS

limpiar_archivos <- function(archivos) {
  textos_limpios <- lapply(archivos, limpiar_texto)
  return(textos_limpios)
}
noticias_2018 <- limpiar_archivos(art_2018)
noticias_2019 <- limpiar_archivos(art_2019)
noticias_2020 <- limpiar_archivos(art_2020)
noticias_2021 <- limpiar_archivos(art_2021)
noticias_2022 <- limpiar_archivos(art_2022)
## GOBIERNO
limpiar_archivos <- function(archivos) {
  textos_limpios <- lapply(archivos, limpiar_texto)
  return(textos_limpios)
}
gobierno_2018 <- limpiar_archivos(gob_2018)
gobierno_2019 <- limpiar_archivos(gob_2019)
gobierno_2020 <- limpiar_archivos(gob_2020)
gobierno_2021 <- limpiar_archivos(gob_2021)
gobierno_2022 <- limpiar_archivos(gob_2022)
## ASOCIACION CIVIL
limpiar_archivos <- function(archivos) {
  textos_limpios <- lapply(archivos, limpiar_texto)
  return(textos_limpios)
}
ac_2018 <- limpiar_archivos(civil_2018)
ac_2019 <- limpiar_archivos(civil_2019)
ac_2020 <- limpiar_archivos(civil_2020)
ac_2021 <- limpiar_archivos(civil_2021)
ac_2022 <- limpiar_archivos(civil_2022)

CORPUS POR FUENTE.

Se crean corpus centrales de cada fuente y se dividen por año.

NOTICIAS

palabras_eliminar <- c("null", "gtagset", "function", "var", "pagetype", "presidente", "interlocutos", "pues", "aquí","ver","ahora", "también", "window._wpemojiSettings","baseUrl", "img.wp-smiley", "img.emoji", "display", "inline", "auto", "important", "backgroundcolor", " color", "for", "margin", "compartir", "presetcolor", "search", "socialfeedcontainer", "islayoutconstrained", "content", "fontsize", "islayoutconstrained", "none", "socialfeedelement", "tfbaaccesstoken", "yaaj", "body", "pullright", "pullright", "center", "fff", "center", "black", "importantbody", "importantmarginright", "have", "padding", "not", "show", "mediabody", "wp-block-audio", "textalign", "varwppresetcolorblack", "varwppresetcolorluminousvividamber", "varwppresetcolorcyanbluishgray", "varwppresetcolorlightgreencyan", "varwppresetcolorpalecyanblue", "varwppresetcolorpalecyanblue", "varwppresetcolorluminousvividorange", "varwppresetcolorpalepink", "varwppresetcolorvividcyanblue", "varwppresetcolorvividred", "varwppresetcolorvividgreencyan", "sure", "varwppresetcolorwhite", "varwppresetcolorvividpurple", "width", "the", " textwrapper", " tfbaprivateaccesstoken ", "stqpush", "aligncentermarginleft ", "alignleftfloat", "absolute ", "aligncentermarginleft", "alignleftfloat", "aligncentermarginleft", " alignleftfloat ", "alignrightfloat", "app", "color", "eaf", "alignrightfloat", "string", "textwrapper", "tfbaprivateaccesstoken", "instagramquerystring" ,"islayoutflow", "jetpacklazyimagesjsenabled", "left", "leftmargininlinestart", "make", "marginbottom"," margininlineend","position", "previous", "post", "wherewpblockcolumnsislayoutflexgap", "psocialfeedtext","readonly", "rgba", "rightmargininlinestart","scroll", "this", "wherewpblockcolumnsislayoutflexgap", "your", "square", "instagramlimit", "helvetica", " extended", "boxshadow",  "emwherewpblockposttemplateislayoutgridgap", "emwherewpblockcolumnsislayoutgridgap", "emmargininlineend", "daaeabcbbcdbe", "daaeabcbbcdbe", "embody", "ffffff", "helvetica", "ecosig", "absoluteheader", "accounts","absoluteheader", "alignwidemaxwidth", "all", "arial", "arialreturn", "attribute", "authortitle", "autogenerated", "backgroundposition",     "backgroundrepeat", "backgroundsize", "base","baseurl","block bodycustombackground", "block", "bodycustombackground", "borderbottom","borderradius","button","categories","centerbody", "awherenotwpelementbuttoncolor", "background", "backgroundimage", "cover", "copyright", "consumersecret", "consumerkey", "contacto", "clip", "class", "clicktrackerinit", "consolelogmomentlocaletfbadatepostedlang", "change", "cetryvar", "rights", "curve", "customheaderbefore", "date", "dateformat", "datelocale", "datevalueof", "datevalueofsessionstoragesetitemojsonstringifytcatchefunction", "ddwemcggrzpvreqmmqbhpq", "default", "directorio", "displaynone", "documentdocumentelementclasslistadd", "emwherewpblockposttemplateislayoutflexgap", "emlineheight", "emhasblackcolorcolor", " ellipsis", "emhasblackcolorcolor",
"does","dona", "eee", "eforeachfunctioneoetaenofunction", "either", "enumbertypeof",  "ejsonparsesessionstoragegetitemoifobjecttypeof","ellipsis","ertfunction","etimestampnew","facebook", "fetnvar", "fffa", "file", "flexbody", "float", "fontfamily", "footer", "footerwidgetareabefore", "format", "functioninvar", "gridbody", "hashtag", "height", "hidden", "html", "htmlnot","iftfbaprivateaccesstoken", "iftfbashowphotosfrom", "images", "imgwpstatsdisplaynone", "importanthasblackbackgroundcolorbackgroundcolor", "importanthasblackbordercolorbordercolor",      "importanthasblushbordeauxgradientbackgroundbackground", "importanthasblushlightpurplegradientbackgroundbackground", "importanthascooltowarmspectrumgradientbackgroundbackground", "importanthascyanbluishgraybackgroundcolorbackgroundcolor", "importanthascyanbluishgraybordercolorbordercolor", "importanthascyanbluishgraycolorcoloe", "importanthaselectricgrassgradientbackgroundbackground", "importanthaslargefontsizefontsize", "importanthaslightgreencyanbackgroundcolorbackgroundcolor", "importanthaslightgreencyanbordercolorbordercolor", "importanthaslightgreencyancolorcolor", "importanthaslightgreencyantovividgreencyangradientbackgroundbackground", "importanthasluminousduskgradientbackgroundbackground", "importanthascyanbluishgraycolorcolor", "importanthasluminousvividamberbackgroundcolorbackgroundcolor", "importanthasluminousvividamberbordercolorbordercolor", "importanthasluminousvividambercolorcolor", "importanthasluminousvividambertoluminousvividorangegradientbackgroundbackground","importanthasluminousvividorangebackgroundcolorbackgroundcolor", "importanthasluminousvividorangebordercolorbordercolor", "importanthasluminousvividorangecolorcolor", "importanthasluminousvividorangetovividredgradientbackgroundbackground", "importanthasmediumfontsizefontsize", "importanthasmidnightgradientbackgroundbackground", "importanthaspalecyanbluebackgroundcolorbackgroundcolor","importanthaspalecyanbluebordercolorbordercolor", "importanthaspalecyanbluecolorcolor", "importanthaspaleoceangradientbackgroundbackground", "importanthaspalepinkbackgroundcolorbackgroundcolor", "importanthaspalepinkbordercolorbordercolor", "importanthaspalepinkcolorcolor", "importanthassmallfontsizefontsize", "importanthasverylightgraytocyanbluishgraygradientbackgroundbackground", "importanthasvividcyanbluebackgroundcolorbackgroundcolor", "importanthasvividcyanbluebordercolorbordercolor", "importanthasvividcyanbluecolorcolor", "importanthasvividcyanbluetovividpurplegradientbackgroundbackground", "importanthasvividgreencyanbackgroundcolorbackgroundcolor", "importanthasvividgreencyanbordercolorbordercolor", "importanthasvividgreencyancolorcolor", "importanthasvividpurplebackgroundcolorbackgroundcolor", "importanthasvividpurplebordercolorbordercolor", "importanthasvividpurplecolorcolor", "importanthasvividredbackgroundcolorbackgroundcolor", "importanthasvividredbordercolorbordercolor", "importanthasvividredcolorcolor", "importanthaswhitebackgroundcolorbackgroundcolor", "importanthaswhitebordercolorbordercolor","importanthaswhitecolorcolor","importanthasxlargefontsizefontsize",   "inherit", "instagram","instanceof", "integer", "islayoutflex", "islayoutflexdisplay", "islayoutflexflexwrap", "islayoutgrid", "islayoutgriddisplay","ittimeagoitauthornameittext","jetpacklazyimage", "lazy", "jquerydocumentreadyfunction", "lengthtfbalimitpostcharacters", "limit", "length", "jquerysocialfeedcontainersocialfeed", " jquerydocumentreadyfunction", "lineheight", "linkedin", "loaded", "longer", "mainnavigation", "mediaobject", "neue", "neudcudffufefuduaufefudcudffufefubuaufefneudcuddfaudcuddfudcuddfaubudcuddfneudcudffudbudcudbudcudbudcudbudceudbudcudbudcfudcudffubudbudcubudbudcubudbudcubudbudceubudbudcubudbudcfcaseemojireturnneudeudefudcudffbududeudefudcudfffudeudefudcudffbubudeudefudcudfffreturnfunction", "moreitattachment", "menu", "momentlocaletfbadatepostedlang", "navegación", "news", "nfunctiontryvar","norepeat", "offscreencanvasicreateelementcanvasargetcontextdwillreadfrequentlyoatextbaselinetopafont", "opacity", "osefunction", "paypaldonations", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations","petneclearrectecanvaswidthecanvasheightefilltexttvar", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations", "than", "mediabody", "socialfeedcontainer", "width", "px", "important", "margin", "auto", "socialfeedcontainer", "socialfeedelement", "marginbottom", "rgba", "transition", "s",  "webkitbackfacevisibility", "hidden", "authortitle", "fontsize", "textalign", "p", "tfbadatepostedlang", "settimeoutfunction","tfbaaccesstoken","tfbashowphotosfrom", "userid", "instagramquerystring", "yaajmexico", "var", "instagramlimit","tfbathemeselection", "tfbalimitpostcharacters", "jquerydocumentreadyfunction", "iftfbaprivateaccesstoken", "tfbaaccesstoken", "daaeabcbbcdbe", "else", "tfbaaccesstoken", "tfbaprivateaccesstoken", "iftfbashowphotosfrom", "hashtag ", "tfbaaccesstoken", "daaeabcbbcdbe", "jquerysocialfeedcontainersocialfeed", "twitter", "proxy" ,"accounts", "instagramquerystring", "limit", "instagramlimit", "consumerkey" ,"dwemcggrzpvreqmmqbhpq","sure", "to" ,"readonly", "uehcftypmomjduomcazqomezwqntfyvfrjhnvwesjunw","readonly", "tweetmode", "extended", "string change to extended to show the whole tweet templatehtml ittimeagoitauthornameittext read moreitattachment dateformat ll string display format of the date attribute see datelocale general settings lengthtfbalimitpostcharacters integer for posts with text longer than this length show an ellipsis showmediatrue momentlocaletfbadatepostedlang consolelogmomentlocaletfbadatepostedlang copyright yaaj transformando vida ac all rights reserved política privacidad verity by catch themes scroll up stq windowstq stqpush view vextblogposttzsrv stqpush clicktrackerinit","promiseowpemojisettingssupportssflagemojinsupportseverythingeverythingexceptflagenew", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations",
                                                   


"muy","ahí","gagobtrackerset","entonces","gracias","además","vamos","mil","bueno","así","versión","estenográfica","gaset","voy","van","conferencia","contentgroup","organizationname","interlocutora","ser","hacer","pagesgroup","señor", "prensa", "puede", "país", "méxico", "diminsión", "millones", "jesús", "ramírez", "luego", "pregunta", "dimension", "tema", "todas", "presidencia","gobierno","bue", "pesos", "caso", "nacional", "ciento", "hace", "sólo", "else", "email", "gobmx", "data", "lang", "properties", "section", "subgroup", "type", "leer", "méxico", "kcmykprocess", "además", "mil", "kcmykprocess", "presidente", "presidente", "sexual", "personas", "puede", "julio", "enero", "febrero", "marzo", "abril", "mayo", "junio", "agosto", "septiembre", "octubre", "noviembre", "diciembre", "blog", "comment", "tania", "vez",

"pxwpblockjetpacktiledgalleryisstylecircle", "imgborderradiuspxwpblockjetpacktiledgalleryhasroundedcorners", " tiledgallerycolwidthcalc", "tiledgallerycolwpblockjetpacktiledgalleryisstylesquare", " tiledgalleryitem", " tiledgalleryrowcolumns", "text", "temas", "tipo", "plumas", "tal", "través", "obra", "embargo", "ello", "día", "yucatán", "tal", "gran", "mismo", "largo", "sitio", "hecho", "general", "equipo", "veces", "muchas", "cuenta", "mauricio", "rafa", "wpblockjetpackslideshowpaginationswiperpaginationbullets", "wpblockjetpackslideshowpaginationswiperpaginationcustom", "wpblockjetpackslideshow", "wpblockjetpackslideshowcontainer", "wpblockjetpackslideshowbuttonnextwpblockjetpackslideshow", "wpblockjetpackslideshowbuttonpausewpblockjetpackslideshow", "swiperpaginationbulletfocuswpblockjetpackslideshow", "américas", "wpblockjetpackslideshowslide", "cdmx", "manera", "ana", "mejores", "entradas", "hernández", " yaajmexicogmailcom", "xmlns", "wpblockjetpackslideshowbuttonplayfocuswpblockjetpackslideshow", "ampcarouselbuttonfocuswpblockjetpackslideshow", "brasil", "wpblockjetpackslideshowbuttonplaybackgroundimageurldataimagesvgxmlcharsetutfcsvg", "wpblockjetpackslideshowbuttonplaybackgroundimageurldataimagesvgxmlcharsetutfcsvg", "swiperbuttonnextafterwpblockjetpackslideshow", " heightecpath", "institute", "luna", "swipercontainerrtl", "swiperpaginationbulletactivewpblockjetpackslideshow", "ulwpblockjetpackslideshowswiperwrapperisemail", "wpblockjetpackslideshowbuttonnextfocuswpblockjetpackslideshow","wpblockjetpackslideshowbuttonpausefocuswpblockjetpackslideshow", "wpblockjetpackslideshowbuttonplaybackgroundimageurldataimagesvgxmlcharsetutfcsvg","wpblockjetpackslideshowbuttonplayfocuswpblockjetpackslideshow", "heightecpath", "fillnone", "maíz", "caribe", "fillnone", "sol", "chiapas", "casi",

"holainfanciastransorg", "reply", "again", "américa", "ajaxurl", "haga", "rangel", "hacemos", "haga", "privacidadconsulta", "please", "pclearrectiwidthiheightpfilltextaapplythisteitodataurlfunction", "nroiacreateelementcanvaspigetcontextigetcontextdfunction", "manténte", "navegador", "leave", "laterfancyboxplaystartstart", "inlineblock", "kcoffnoticedisplay", "home", "guardar", "functioneatvar", "favor", "envíanos", "distrito", "astringfromcharcodepclearrectiwidthiheightpfilltextaapplythiseeitodataurlreturn", "web", "videocategorías", "try", "tacreateelementscripttsrcetdeferttypetextjavascriptagetelementsbytagnameheadappendchildtforoarrayflagemojitsupportseverythingeverythingexceptflagrr", "slideshowfancyboxplaystoppause", "slideshowfancyboxfullscreenfull", "setvar", "screenfancyboxthumbsthumbnailsfancyboxdownloaddownloadfancyboxsharesharefancyboxzoomzoomsettingspopupgalleryvendorphotoswipeshowarrowstrueshowcountertrueshowzoombuttontrueshowfullscreenbuttontrueshowsharebuttontrueshowclosebuttontrueshowdownloadbuttonfalseshowslideshowfalseshowthumbstruescreensizes", "kcscriptdataajaxurl", "cada", "sé", "solamente", "momento", "remwppresetspacing", "lineargradientdegrgb", "figcaptioncolorfontsizepxtextaligncenterisdarktheme", "rgb", "notitrans", "incluso", "casos", "después", "biblioteca", " wpblockaudio", "ejemplo", "lineargradientdegrgba", "parte", "miguel", "tener", "ejemplo", "poder", "kccss", "forma", "buscar", "bien", "últimos", "año", "casos", "menos", "solid", "tan", "correo", "twitter", "aviso", "ciudad", "nombre", "prácticas", "aviso", "creo", "conócenos", "decir", "cosas", "mejor", "igual", "electrónico", " yaajmexico", "fines", "lucro", "fortalécete", "hacen", "youtube", "siempre", "dicen", "serie", "tweet", "solo", "sino","null", "gtagset", "function", "var", "pagetype", "presidente", "interlocutos", "pues", "aquí","ver","ahora", "también", "muy","ahí","gagobtrackerset","entonces","gracias","además","vamos","mil","bueno","así","versión","estenográfica","gaset","voy","van","conferencia","contentgroup","organizationname","interlocutora","ser","hacer","pagesgroup","señor", "prensa", "puede", "país", "méxico", "diminsión", "millones", "jesús", "ramírez", "luego", "pregunta", "dimension", "tema", "todas", "presidencia","gobierno","bue", "pesos", "caso", "nacional", "ciento", "hace", "sólo", "else", "email", "gobmx", "data", "lang", "properties", "section", "subgroup", "type", "leer", "méxico", "kcmykprocess", "además", "mil", "kcmykprocess", "presidente", "presidente", "sexual", "personas", "puede","farfalla","giuliana","larralde","publicación","compartida","Error al leer el archivo","giulianafarfalla","pst","you", "septiembre","human","rights","watch","carlos","carlosv","dariolarralde","december","pdt","dario","vela","instagram","the","sociales","parte","ciudad","nov","this","cuenta","redes","primera","vez","txt","gob","2018","2019","2020","2021","2022")



# Corpus y DTM para 2018
corpus_2018 <- Corpus(VectorSource(noticias_2018))
corpus_2018 <- tm_map(corpus_2018,removeWords,stopwords("es"))
corpus_2018 <- tm_map(corpus_2018,removeWords,palabras_eliminar)
dtm_2018 <- DocumentTermMatrix(corpus_2018)
conteo_2018 <- colSums(as.matrix(dtm_2018))
inspect(dtm_2018)
## <<DocumentTermMatrix (documents: 30, terms: 2193)>>
## Non-/sparse entries: 5557/60233
## Sparsity           : 92%
## Maximal term length: 30
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad conapred derechos discriminación gay gente lgbt marcha mujer
##   11        13       10        0              2   4     4    5      0     0
##   18         0        0        0              0   0     2    0      0     0
##   19         2        0        3              2   8     4    2     16     2
##   21         0        0        0              2   0     0    0      0     4
##   22         4        0        0              0   5     5    0      0     0
##   26        13       10        0              2   4     4    5      0     0
##   3          0        0        0              0   0     2    0      0     0
##   4          2        0        3              2   8     4    2     16     2
##   6          0        0        0              2   0     0    0      0     4
##   7          4        0        0              0   5     5    0      0     0
##     Terms
## Docs odio
##   11    8
##   18    0
##   19    0
##   21    0
##   22    0
##   26    8
##   3     0
##   4     0
##   6     0
##   7     0
# Corpus y DTM para 2019
corpus_2019 <- Corpus(VectorSource(noticias_2019))
corpus_2019 <- tm_map(corpus_2019,removeWords,stopwords("es"))
corpus_2019 <- tm_map(corpus_2019,removeWords,palabras_eliminar)
dtm_2019 <- DocumentTermMatrix(corpus_2019)
conteo_2019 <- colSums(as.matrix(dtm_2019))
inspect(dtm_2019)
## <<DocumentTermMatrix (documents: 15, terms: 2290)>>
## Non-/sparse entries: 3143/31207
## Sparsity           : 91%
## Maximal term length: 35
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad deporte derechos gay gente lgbt marcha matrimonio mundo sexo
##   1          5      18        0   4    12    2      0          0     5    0
##   10         4       0        4   4     0    3      0         15     0    5
##   11         3       0        2   9     1    1      0          0     0    2
##   12         4       0        2   0     0   11      0          0     0    0
##   14         2       0        6   7     0    4      2          8    12    8
##   15         0       0        4   5     0    0     11          2     5    0
##   5          2       0        5   0     0    4      0          1     0    0
##   7          0       0        0  10     4    0      0          0     5    0
##   8          8       0        0   0     0    9      0          0     3    0
##   9          0       0        1   1     1    4      7          1     0    0
# Corpus y DTM para 2020
corpus_2020 <- Corpus(VectorSource(noticias_2020))
corpus_2020 <- tm_map(corpus_2020,removeWords,stopwords("es"))
corpus_2020 <- tm_map(corpus_2020,removeWords,palabras_eliminar)
dtm_2020 <- DocumentTermMatrix(corpus_2020)
conteo_2020 <- colSums(as.matrix(dtm_2020))
inspect(dtm_2020)
## <<DocumentTermMatrix (documents: 15, terms: 2777)>>
## Non-/sparse entries: 3671/37984
## Sparsity           : 91%
## Maximal term length: 30
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad derechos empresas gay henri homosexual lgbt marcha mundo papa
##   10         3        7        0   1     0          0    4      5     4    0
##   12         0        1        0   6    20          1    1      0     1    0
##   14        11        0        0   6     0          0   10      0     0    0
##   2          1        0        0   2     0          1    0      0     1    0
##   3          0        1       10   1     0          0    8      0     1    0
##   4          1        2        0   1     0          1    0      0     2    0
##   5          2        0        0   0     0          7    2      0    12   20
##   7          1        3        0   0     0          2    0      0     0    0
##   8          5        2        0   4     0          9    4     12     0    0
##   9          1        4        0   3     0          2    1      3     0    0
# Corpus y DTM para 2021
corpus_2021 <- Corpus(VectorSource(noticias_2021))
corpus_2021 <- tm_map(corpus_2021,removeWords,stopwords("es"))
corpus_2021 <- tm_map(corpus_2021,removeWords,palabras_eliminar)
dtm_2021 <- DocumentTermMatrix(corpus_2021)
conteo_2021 <- colSums(as.matrix(dtm_2021))
inspect(dtm_2021)
## <<DocumentTermMatrix (documents: 15, terms: 2180)>>
## Non-/sparse entries: 3140/29560
## Sparsity           : 90%
## Maximal term length: 23
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad derechos dic discriminación ley lgbt noticias orgullo parque
##   10         1        2   0              6   3    2        0       1     13
##   11         0        2   0              4   1    0        0       0      7
##   13         0        2  12              4  11    3       20       1      0
##   14         6        0   0              0   0    8        0       0      0
##   15         6        4   0              0   0    2        0       0      0
##   2          5        3  10              1   0    2        1       1      0
##   4          3        0   0              2   0    0        0       1      0
##   5          3        1   0              0   4    8        0       0      0
##   7          2        0   2              1   0    3        3       1      0
##   8          5        3   2              6   2    9        3       3      0
##     Terms
## Docs tacos
##   10     0
##   11     0
##   13     0
##   14     0
##   15     0
##   2      0
##   4      0
##   5      0
##   7     18
##   8      0
# Corpus y DTM para 2022
corpus_2022 <- Corpus(VectorSource(noticias_2022))
corpus_2022 <- tm_map(corpus_2022,removeWords,stopwords("es"))
corpus_2022 <- tm_map(corpus_2022,removeWords,palabras_eliminar)
dtm_2022 <- DocumentTermMatrix(corpus_2022)
conteo_2022 <- colSums(as.matrix(dtm_2022))
inspect(dtm_2022)
## <<DocumentTermMatrix (documents: 27, terms: 3869)>>
## Non-/sparse entries: 6193/98270
## Sparsity           : 94%
## Maximal term length: 30
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs asilo binaria derechos discriminación género identidad lgbt noticias
##   12     0       9        1              0     12        15    2        0
##   13     0       0        3              5     10         5    1        1
##   16     0       0        0              2      0         0    1        0
##   19     0       0       12              3      3         2    2        0
##   25     0       2        2              4      4         5    1        0
##   26    52       0        4              3      7         4   22        0
##   3      0       3        1              2      5         1    0        0
##   4      0       0        0              0      0         0    3        0
##   5      0      11        4              6     10        12    2        0
##   8      0       4        7              5      2         2    0        1
##     Terms
## Docs persona trans
##   12       8     7
##   13       2    23
##   16       0     9
##   19       2     9
##   25       2    18
##   26       2     2
##   3        1     4
##   4        0     0
##   5        6     8
##   8        7     2
#Corpus y DTM FINAL

todas_las_noticias <- c(noticias_2018, noticias_2019, noticias_2020, noticias_2021, noticias_2022)
corpus_final_noticias <- Corpus(VectorSource(todas_las_noticias))
corpus_final_noticias <- tm_map(corpus_final_noticias, removeWords, stopwords("es"))
corpus_final_noticias <- tm_map(corpus_final_noticias, removeWords, palabras_eliminar)
dtm_final <- DocumentTermMatrix(corpus_final_noticias)
conteo_final_noticias <- colSums(as.matrix(dtm_final))
inspect(dtm_final)
## <<DocumentTermMatrix (documents: 102, terms: 8485)>>
## Non-/sparse entries: 21704/843766
## Sparsity           : 97%
## Maximal term length: 35
## Weighting          : term frequency (tf)
## Sample             :
##      Terms
## Docs  comunidad derechos discriminación gay género identidad lgbt marcha mundo
##   101         1        4              3   1      7         4   22      0     0
##   11         13        0              2   4      0         0    5      0     2
##   19          2        3              2   8      0         0    2     16     1
##   26         13        0              2   4      0         0    5      0     2
##   31          5        0              0   4      0         0    2      0     5
##   37          0        0              0  10      0         0    0      0     5
##   4           2        3              2   8      0         0    2     16     1
##   45          0        4              0   5      0         0    0     11     5
##   80          0        4              6   0     10        12    2      0     4
##   83          3        7              5   0      2         2    0      0     0
##      Terms
## Docs  trans
##   101     2
##   11      0
##   19      0
##   26      0
##   31      0
##   37      0
##   4       0
##   45      0
##   80      8
##   83      2

GOBIERNO

# Corpus y DTM para 2018
corpus_2018_gob <- Corpus(VectorSource(gobierno_2018))
corpus_2018_gob <- tm_map(corpus_2018_gob,removeWords,stopwords("es"))
corpus_2018_gob <- tm_map(corpus_2018_gob,removeWords,palabras_eliminar)
dtm_2018_gob <- DocumentTermMatrix(corpus_2018_gob)
conteo_2018_gob <- colSums(as.matrix(dtm_2018_gob))
inspect(dtm_2018_gob)
## <<DocumentTermMatrix (documents: 7, terms: 1148)>>
## Non-/sparse entries: 1530/6506
## Sparsity           : 81%
## Maximal term length: 23
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs derechos discriminación diversidad género humanos información lgbt puedes
##    1        5              0          1      0       1           2    2      2
##    2        4              9         12      6       4           3    4      2
##    3        3              0          0      1       2           2    2      2
##    4        6              5          0      5       4           2    0      2
##    5        1              0          0      3       0           2    0      2
##    6        0              0          2      0       0           3    1      2
##    7        1              0          1      0       0           2    3      0
##     Terms
## Docs seleccionar turismo
##    1           2       0
##    2           2       0
##    3           2       0
##    4           2       0
##    5           2       0
##    6           2       0
##    7           0      16
# Corpus y DTM para 2019
corpus_2019_gob <- Corpus(VectorSource(gobierno_2019))
corpus_2019_gob <- tm_map(corpus_2019_gob,removeWords,stopwords("es"))
corpus_2019_gob <- tm_map(corpus_2019_gob,removeWords,palabras_eliminar)
dtm_2019_gob <- DocumentTermMatrix(corpus_2019_gob)
conteo_2019_gob <- colSums(as.matrix(dtm_2019_gob))
inspect(dtm_2019_gob)
## <<DocumentTermMatrix (documents: 11, terms: 2873)>>
## Non-/sparse entries: 3755/27848
## Sparsity           : 88%
## Maximal term length: 19
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs andrés derechos discriminación diversidad información lópez manuel obrador
##   1       0        1              0          4           2     0      0       0
##   10     34       12             19          8           4    35     34      34
##   11      0        7              3          1           3     0      0       0
##   3       0        2              0          3           2     0      0       0
##   4       0        3              2          3           2     0      0       0
##   5       0        1              2          7           2     0      0       0
##   6       0        0              2          1           2     0      0       0
##   7       0        5              1          2           2     0      0       0
##   8       0       15              0          2           2     0      0       0
##   9       0        0              1          3           2     0      0       0
##     Terms
## Docs salud social
##   1      6      1
##   10    16      6
##   11     3      2
##   3      0      2
##   4      0      2
##   5      1      6
##   6      1      0
##   7      0      3
##   8      1      2
##   9      0      0
# Corpus y DTM para 2020
corpus_2020_gob <- Corpus(VectorSource(gobierno_2020))
corpus_2020_gob <- tm_map(corpus_2020_gob,removeWords,stopwords("es"))
corpus_2020_gob <- tm_map(corpus_2020_gob,removeWords,palabras_eliminar)
dtm_2020_gob <- DocumentTermMatrix(corpus_2020_gob)
conteo_2020_gob <- colSums(as.matrix(dtm_2020_gob))
inspect(dtm_2020_gob)
## <<DocumentTermMatrix (documents: 8, terms: 1655)>>
## Non-/sparse entries: 2284/10956
## Sparsity           : 83%
## Maximal term length: 32
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad discriminación gay información lgbt participación puedes
##    1         3              0   4           2    6             1      2
##    2         0              0   1           4    2             1      2
##    3         2              0   1           2    1             1      2
##    4         4              4   0           2    3             1      2
##    5         0             11   2           2    0             1      2
##    6         4              0   3           2    2             2      2
##    7         0              0   0           2    1             3      0
##    8         0              0   1           2    3             2      0
##     Terms
## Docs secretaría trabajo turismo
##    1          3       1       0
##    2          3       0       0
##    3          0       1       0
##    4          0       7       0
##    5          7       2       0
##    6          3       0       1
##    7          2       0      10
##    8          5       5      16
# Corpus y DTM para 2021
corpus_2021_gob <- Corpus(VectorSource(gobierno_2021))
corpus_2021_gob <- tm_map(corpus_2021_gob,removeWords,stopwords("es"))
corpus_2021_gob <- tm_map(corpus_2021_gob,removeWords,palabras_eliminar)
dtm_2021_gob <- DocumentTermMatrix(corpus_2021_gob)
conteo_2021_gob <- colSums(as.matrix(dtm_2021_gob))
inspect(dtm_2021_gob)
## <<DocumentTermMatrix (documents: 4, terms: 885)>>
## Non-/sparse entries: 1081/2459
## Sparsity           : 69%
## Maximal term length: 30
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad discriminación género identidad lgbtttiqa mayores mujeres
##    1         7              9      9         6        15      23       3
##    2         8              0      9         4         3       0       8
##    3         0              1      4         2         0       0       0
##    4         0             13      4         2         0       0       0
##     Terms
## Docs orientación salud vida
##    1           6     4   11
##    2           1     0    1
##    3           2     1    0
##    4           2    17    0
# Corpus y DTM para 2022
corpus_2022_gob <- Corpus(VectorSource(gobierno_2022))
corpus_2022_gob <- tm_map(corpus_2022_gob,removeWords,stopwords("es"))
corpus_2022_gob <- tm_map(corpus_2022_gob,removeWords,palabras_eliminar)
dtm_2022_gob <- DocumentTermMatrix(corpus_2022_gob)
conteo_2022_gob <- colSums(as.matrix(dtm_2022_gob))
inspect(dtm_2022_gob)
## <<DocumentTermMatrix (documents: 15, terms: 2030)>>
## Non-/sparse entries: 2922/27528
## Sparsity           : 90%
## Maximal term length: 30
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs and calidad cárdenas derechos información nancy puedes secretaría
##   10   0       1        0        6           2     0      2          0
##   11   0       1        0        0           2     0      2          0
##   13   0       2        0        2           2     0      2          3
##   14  16       1        0        0           1     0      0          1
##   15   0       1        0        0           2     0      2          2
##   3    0       1        0        0           2     0      2          3
##   4   13       1        0        0           1     0      0          1
##   6    0       1       28        7           2    20      2          1
##   7    0       1        0        1           2     0      2          2
##   9    1       1        0        2           6     0      2          6
##     Terms
## Docs seleccionar social
##   10           2      9
##   11           2      0
##   13           2      1
##   14           0      1
##   15           2      0
##   3            2      0
##   4            0      0
##   6            2      3
##   7            2      1
##   9            2      6
#Corpus y DTM FINAL

todo_gob <- c(gobierno_2018, gob_2019, gob_2020, gob_2021, gob_2022)
corpus_final_gob <- Corpus(VectorSource(todo_gob))
corpus_final_gob <- tm_map(corpus_final_gob, removeWords, stopwords("es"))
corpus_final_gob <- tm_map(corpus_final_gob, removeWords, palabras_eliminar)
dtm_final_gob <- DocumentTermMatrix(corpus_final_gob)
conteo_final_gob <- colSums(as.matrix(dtm_final_gob))
inspect(dtm_final_gob)
## <<DocumentTermMatrix (documents: 45, terms: 1153)>>
## Non-/sparse entries: 1606/50279
## Sparsity           : 97%
## Maximal term length: 23
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt puedes
##   1     0        5              0          1      0   0           2    2      2
##   10    0        0              0          0      0   1           0    0      0
##   2     0        4              9         12      6   0           3    4      2
##   3     0        3              0          0      1   0           2    2      2
##   4     0        6              5          0      5   0           2    0      2
##   5     0        1              0          0      3   0           2    0      2
##   6     0        0              0          2      0   0           3    1      2
##   7     0        1              0          1      0   0           2    3      0
##   8     0        0              0          0      0   1           0    0      0
##   9     0        0              0          0      0   1           0    0      0
##     Terms
## Docs turismo
##   1        0
##   10       0
##   2        0
##   3        0
##   4        0
##   5        0
##   6        0
##   7       16
##   8        0
##   9        0

ASOCIACION CIVIL

# Corpus y DTM para 2018
corpus_2018_ac <- Corpus(VectorSource(ac_2018))
corpus_2018_ac <- tm_map(corpus_2018_ac,removeWords,stopwords("es"))
corpus_2018_ac <- tm_map(corpus_2018_ac,removeWords,palabras_eliminar)
dtm_2018_ac <- DocumentTermMatrix(corpus_2018_ac)
conteo_2018_ac <- colSums(as.matrix(dtm_2018_ac))
inspect(dtm_2018_ac)
## <<DocumentTermMatrix (documents: 10, terms: 1140)>>
## Non-/sparse entries: 1646/9754
## Sparsity           : 86%
## Maximal term length: 23
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs conversión defender derechos humanos lgbti organización proteger terapia
##   1           0        1        3       3     4            1        1       0
##   10          1        1        5       5     1            1        1       0
##   2           6        1        4       2     1            1        1       1
##   3           4        1        1       1     1            1        1       0
##   4          10        1        1       1     1            3        2       7
##   5           0        2        4       2     2            3        1       0
##   6           4        1        9       2    10            1        2       1
##   7           0        1        2       1     1            1        1       1
##   8           0        1        1       1     1            1        1       0
##   9           2        1        3       3     1            1        1       2
##     Terms
## Docs terapias vida
##   1         0    1
##   10        1    1
##   2        11    1
##   3         3    2
##   4         5    3
##   5         0    3
##   6         3    3
##   7         0    1
##   8         0    1
##   9         0    1
# Corpus y DTM para 2019
corpus_2019_ac <- Corpus(VectorSource(ac_2019))
corpus_2019_ac <- tm_map(corpus_2019_ac,removeWords,stopwords("es"))
corpus_2019_ac <- tm_map(corpus_2019_ac,removeWords,palabras_eliminar)
dtm_2019_ac <- DocumentTermMatrix(corpus_2019_ac)
conteo_2019_ac <- colSums(as.matrix(dtm_2019_ac))
inspect(dtm_2019_ac)
## <<DocumentTermMatrix (documents: 14, terms: 1610)>>
## Non-/sparse entries: 2317/20223
## Sparsity           : 90%
## Maximal term length: 22
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs acta civil derechos género humanos identidad infancias nacimiento persona
##   11    5     1        1      2       0         2         2          5       5
##   12    2     0        1      1       0         0         2          4       2
##   13    0     0        2      8       0         3         6          0       3
##   14    3     1        1      9       0         8         2          3       3
##   2     3     6       13      7       7         4         2          3       3
##   3    11     4        2      3       1         6         1         10       0
##   5     0     6        5      1       2         2         2          5       1
##   6     0     0        1      2       0         2         2          0       3
##   8     0     0        1      1       1         1         0          0       0
##   9     0     1        3      1       2         0         0          0       0
##     Terms
## Docs trans
##   11     1
##   12     8
##   13    13
##   14     7
##   2      1
##   3      0
##   5      2
##   6     10
##   8      0
##   9      0
# Corpus y DTM para 2020
corpus_2020_ac <- Corpus(VectorSource(ac_2020))
corpus_2020_ac <- tm_map(corpus_2020_ac,removeWords,stopwords("es"))
corpus_2020_ac <- tm_map(corpus_2020_ac,removeWords,palabras_eliminar)
dtm_2020_ac <- DocumentTermMatrix(corpus_2020_ac)
conteo_2020_ac <- colSums(as.matrix(dtm_2020_ac))
inspect(dtm_2020_ac)
## <<DocumentTermMatrix (documents: 18, terms: 2746)>>
## Non-/sparse entries: 4644/44784
## Sparsity           : 91%
## Maximal term length: 23
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs derechos familias género identidad infancias iniciativa niñas persona
##   11        1       12      1         2         4          0     1       1
##   13        3        0      8         8         1          0     0       6
##   14        4        7     17        14        14          0     4       3
##   17        6        5      9        11         3          5     2       8
##   18        1        0     24        12         6          0     5       0
##   2        12        2     11        14         6          1     6       2
##   3         6        1      7         1        13          2     4       3
##   6         2        0      3         3         1          6     0       0
##   7         2        0      3         2         0          0     0       1
##   9         6        0      5         5         0          3     1       0
##     Terms
## Docs salud trans
##   11     0     5
##   13     0    13
##   14     4    15
##   17     1     4
##   18     1     5
##   2      7    27
##   3      0    23
##   6      2    15
##   7      1     0
##   9      4     0
# Corpus y DTM para 2021
corpus_2021_ac <- Corpus(VectorSource(ac_2021))
corpus_2021_ac <- tm_map(corpus_2021_ac,removeWords,stopwords("es"))
corpus_2021_ac <- tm_map(corpus_2021_ac,removeWords,palabras_eliminar)
dtm_2021_ac <- DocumentTermMatrix(corpus_2021_ac)
conteo_2021_ac <- colSums(as.matrix(dtm_2021_ac))
inspect(dtm_2021_ac)
## <<DocumentTermMatrix (documents: 12, terms: 3287)>>
## Non-/sparse entries: 5042/34402
## Sparsity           : 87%
## Maximal term length: 24
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs comunidad derecho derechos género historia humanos identidad lgbti persona
##   1          0       2        4     19        0       2         7     1       2
##   10         9       0        1      0        7       1         0     6       2
##   11         2       0        4      1        6       5         0     4       1
##   12         1       1        1      0       10       1         0     5       7
##   2          2       1        9      2        1       6         0     5       0
##   3          4       1        4      0        1       2         0     6       1
##   4          7       0        1      9        3       1         5     6       9
##   5          1      26       17     30        0       4        37     0      13
##   7          5       5        7      5        2       5         0     5       1
##   8          5       0       10      1        0       7         0     4       0
##     Terms
## Docs vida
##   1    10
##   10    3
##   11    4
##   12    9
##   2     1
##   3     3
##   4     3
##   5     4
##   7     6
##   8     1
# Corpus y DTM para 2022
corpus_2022_ac <- Corpus(VectorSource(ac_2022))
corpus_2022_ac <- tm_map(corpus_2022_ac,removeWords,stopwords("es"))
corpus_2022_ac <- tm_map(corpus_2022_ac,removeWords,palabras_eliminar)
dtm_2022_ac <- DocumentTermMatrix(corpus_2022_ac)
conteo_2022_ac <- colSums(as.matrix(dtm_2022_ac))
inspect(dtm_2022_ac)
## <<DocumentTermMatrix (documents: 13, terms: 5486)>>
## Non-/sparse entries: 8809/62509
## Sparsity           : 88%
## Maximal term length: 25
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs aborto acceso derechos mifepristona misoprostol mujeres persona salud
##   1       0      0        5            0           0       0       2     5
##   10      0      3        5            0           0       0      11     7
##   11      0      0        1            0           0       2      10     0
##   13      0      0        4            0           0       1       1     0
##   4       0      0        3            0           0       0       1     1
##   5       0      0        5            0           0       1       0     0
##   6       0      2        2            0           0       0       7     5
##   7       0      7        6            0           0      29      14    16
##   8      47     14       10           47          98      49       5    13
##   9      56     32        4           12          22      10       5    18
##     Terms
## Docs trans vida
##   1      0    2
##   10     0    7
##   11    15    7
##   13     0    2
##   4      1    2
##   5      3    2
##   6     23    4
##   7     72   17
##   8      0   16
##   9      0   12
todo_ac <- c(ac_2018, ac_2019, ac_2020, ac_2021, ac_2022)
corpus_final_ac <- Corpus(VectorSource(todo_ac))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, stopwords("es"))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, palabras_eliminar)
dtm_final_ac <- DocumentTermMatrix(corpus_final_ac)
conteo_final_ac <- colSums(as.matrix(dtm_final_ac))

inspect(dtm_final_ac)
## <<DocumentTermMatrix (documents: 67, terms: 9335)>>
## Non-/sparse entries: 22458/602987
## Sparsity           : 96%
## Maximal term length: 25
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs derechos género humanos identidad lgbti misoprostol mujeres persona trans
##   42        1     24       0        12     0           0      13       0     5
##   43        4     19       2         7     1           0       5       2    12
##   47       17     30       4        37     0           0       6      13     0
##   49        7      5       5         0     5           0      13       1     8
##   60        2      2       2         0     1           0       0       7    23
##   61        6      8       3         4     1           0      29      14    72
##   62       10      1       8         1     1          98      49       5     0
##   63        4      2       1         0     1          22      10       5     0
##   64        5      1       5         0     1           0       0      11     0
##   65        1     18       0        13     0           0       2      10    15
##     Terms
## Docs vida
##   42    0
##   43   10
##   47    4
##   49    6
##   60    4
##   61   17
##   62   16
##   63   12
##   64    7
##   65    7

CREACION DE MATRIZ CONJUNTA DE TODAS LAS FUENTES

La siguiente parte del codigo se asegura de crear un corpus central, juntando las 3 fuentes.

# Function to pad the matrix with zeros
pad_matrix <- function(mat, target_cols) {
  if (ncol(mat) < target_cols) {
    diff_cols <- target_cols - ncol(mat)
    mat <- cbind(mat, matrix(0, nrow = nrow(mat), ncol = diff_cols))
  }
  return(mat)
}

# Set the target number of columns (use the maximum number of columns among DTMs)
target_cols <- max(ncol(dtm_2018), ncol(dtm_2018_gob), ncol(dtm_2018_ac),
                   ncol(dtm_2019), ncol(dtm_2019_gob), ncol(dtm_2019_ac),
                   ncol(dtm_2020), ncol(dtm_2020_gob), ncol(dtm_2020_ac),
                   ncol(dtm_2021), ncol(dtm_2021_gob), ncol(dtm_2021_ac),
                   ncol(dtm_2022), ncol(dtm_2022_gob), ncol(dtm_2022_ac))


padded_dtm_2018 <- pad_matrix(as.matrix(dtm_2018), target_cols)
padded_dtm_2018_gob <- pad_matrix(as.matrix(dtm_2018_gob), target_cols)
padded_dtm_2018_ac <- pad_matrix(as.matrix(dtm_2018_ac), target_cols)

padded_dtm_2019 <- pad_matrix(as.matrix(dtm_2019), target_cols)
padded_dtm_2019_gob <- pad_matrix(as.matrix(dtm_2019_gob), target_cols)
padded_dtm_2019_ac <- pad_matrix(as.matrix(dtm_2019_ac), target_cols)

padded_dtm_2020 <- pad_matrix(as.matrix(dtm_2020), target_cols)
padded_dtm_2020_gob <- pad_matrix(as.matrix(dtm_2020_gob), target_cols)
padded_dtm_2020_ac <- pad_matrix(as.matrix(dtm_2020_ac), target_cols)

padded_dtm_2021 <- pad_matrix(as.matrix(dtm_2021), target_cols)
padded_dtm_2021_gob <- pad_matrix(as.matrix(dtm_2021_gob), target_cols)
padded_dtm_2021_ac <- pad_matrix(as.matrix(dtm_2021_ac), target_cols)

padded_dtm_2022 <- pad_matrix(as.matrix(dtm_2022), target_cols)
padded_dtm_2022_gob <- pad_matrix(as.matrix(dtm_2022_gob), target_cols)
padded_dtm_2022_ac <- pad_matrix(as.matrix(dtm_2022_ac), target_cols)

dtm_combined_2018 <- rbind(padded_dtm_2018, padded_dtm_2018_gob, padded_dtm_2018_ac)
dtm_combined_2019 <- rbind(padded_dtm_2019, padded_dtm_2019_gob, padded_dtm_2019_ac)
dtm_combined_2020 <- rbind(padded_dtm_2020, padded_dtm_2020_gob, padded_dtm_2020_ac)
dtm_combined_2021 <- rbind(padded_dtm_2021, padded_dtm_2021_gob, padded_dtm_2021_ac)
dtm_combined_2022 <- rbind(padded_dtm_2022, padded_dtm_2022_gob, padded_dtm_2022_ac)

conteo_combined_2018 <- colSums(dtm_combined_2018)
conteo_combined_2019 <- colSums(dtm_combined_2019)
conteo_combined_2020 <- colSums(dtm_combined_2020)
conteo_combined_2021 <- colSums(dtm_combined_2021)
conteo_combined_2022 <- colSums(dtm_combined_2022)

dtm_combined_all_years <- rbind(dtm_combined_2018, dtm_combined_2019, dtm_combined_2020, dtm_combined_2021, dtm_combined_2022)

conteo_todo <- colSums(dtm_combined_all_years)
Visualizaciones

DICCIONARIO DE PALABRAS

Creamos dos diccionarios de palabras para identificar adecuadamente los terminos que pueden diferenciar palabras de identidad

# Definir diccionarios
diccionario_identidad <- list( 
  transgenero = c( "transgenero","mujer trans", "hombre trans", "trans no binario","transgeneros","transgénero","transgéneros"),
  transexual = c("transexual","transexuales"),
  no_binario = c( "demigenero", "pangenero", "bigenero", "trigenero", "poligenero", "intergenero", "agenero", "maverique","no binario","fluido","demigénero","pangénero","bigénero","trigénero","poligénero")
)

diccionario_orientacion <- list(
  lesbiana = c("lesbianas", "lesbiana","lesbiandad"),
  gay = c("gays", "gay", "homosexual", "homosexuales", "homos","homosexualidad"),
  bisexual = c("bi", "bisexual", "bisexuales", "bisexualidad", "omnisexual", "polisexual"),
  pansexual = c("pansexual", "pansexuales","pansexualidad"),
  asexual = c("asexualidad","asexual")
)
VISUALIZACIONES.

La siguiente visualizacin compara la repeticion de los idccionarios en un lapso de 5 años.

library(ggplot2)
# Filtrar palabras de conteo_final por categoría
palabras_identidad <- names(conteo_todo)[names(conteo_todo) %in% unlist(diccionario_identidad)]
palabras_orientacion <- names(conteo_todo)[names(conteo_todo) %in% unlist(diccionario_orientacion)]

# Sumar frecuencias por categoría
frecuencia_identidad <- sum(conteo_todo[palabras_identidad])
frecuencia_orientacion <- sum(conteo_todo[palabras_orientacion])

# Calcular porcentaje total de cada categoría
porcentaje_identidad <- frecuencia_identidad / sum(c(frecuencia_identidad, frecuencia_orientacion)) * 100
porcentaje_orientacion <- frecuencia_orientacion / sum(c(frecuencia_identidad, frecuencia_orientacion)) * 100

# Crear un data frame con los porcentajes totales para cada categoría
df_porcentaje <- data.frame(Categoria = c("Identidad", "Orientacion"),
                            Porcentaje = c(porcentaje_identidad, porcentaje_orientacion))

# Crear un gráfico de barras para los porcentajes con eje y hasta 100
library(ggplot2)
ggplot(df_porcentaje, aes(x = Categoria, y = Porcentaje, fill = Categoria)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4) +  # Agregar etiquetas con los porcentajes
  labs(title = "Variables de Identidad y Orientación (2018-2022)", x = "Diccionario", y = " ") +
  theme_minimal() +
  scale_fill_manual(values = c("#3498db", "#FF6384")) +
  coord_cartesian(ylim = c(0, 100))  # Establecer el rango del eje y

Frecuencia de diccionario identidad (separado por noticias, gobierno y ac en %)

La siguiente grafica muestra una comparacion desagregada de las variabes y su comparacion de diccionarios.

palabras_identidad_noticias <- names(conteo_final_noticias)[names(conteo_final_noticias) %in% unlist(diccionario_identidad)]
palabras_orientacion_noticias <- names(conteo_final_noticias)[names(conteo_final_noticias) %in% unlist(diccionario_orientacion)]

palabras_identidad_gobierno <- names(conteo_final_gob)[names(conteo_final_gob) %in% unlist(diccionario_identidad)]
palabras_orientacion_gobierno <- names(conteo_final_gob)[names(conteo_final_gob) %in% unlist(diccionario_orientacion)]

palabras_identidad_ac <- names(conteo_final_ac)[names(conteo_final_ac) %in% unlist(diccionario_identidad)]
palabras_orientacion_ac <- names(conteo_final_ac)[names(conteo_final_ac) %in% unlist(diccionario_orientacion)]

frecuencia_identidad_noticias <- sum(conteo_final_noticias[palabras_identidad_noticias])
frecuencia_orientacion_noticias <- sum(conteo_final_noticias[palabras_orientacion_noticias])

frecuencia_identidad_gobierno <- sum(conteo_final_gob[palabras_identidad_gobierno])
frecuencia_orientacion_gobierno <- sum(conteo_final_gob[palabras_orientacion_gobierno])

frecuencia_identidad_ac <- sum(conteo_final_ac[palabras_identidad_ac])
frecuencia_orientacion_ac <- sum(conteo_final_ac[palabras_orientacion_ac])


# PORCENTAJES
porcentaje_identidad_noticias <- frecuencia_identidad_noticias / (frecuencia_identidad_noticias + frecuencia_orientacion_noticias) * 100
porcentaje_orientacion_noticias <- frecuencia_orientacion_noticias / (frecuencia_identidad_noticias + frecuencia_orientacion_noticias) * 100
porcentaje_identidad_gobierno <- frecuencia_identidad_gobierno / (frecuencia_identidad_gobierno + frecuencia_orientacion_gobierno) * 100
porcentaje_orientacion_gobierno <- frecuencia_orientacion_gobierno / (frecuencia_identidad_gobierno + frecuencia_orientacion_gobierno) * 100
porcentaje_identidad_ac <- frecuencia_identidad_ac / sum(c(frecuencia_identidad_ac, frecuencia_orientacion_ac)) * 100
porcentaje_orientacion_ac <- frecuencia_orientacion_ac / sum(c(frecuencia_identidad_ac, frecuencia_orientacion_ac)) * 100

porcentaje_identidad_ac_manual <- 42
porcentaje_orientacion_ac_manual <- 58

df_porcentaje <- data.frame(
  Categoria = rep(c("Noticias", "Gobierno", "Asociación Civil"), each = 2),
  Tipo = rep(c("Identidad", "Orientacion"), times = 3),
  Porcentaje = c(
    porcentaje_identidad_noticias, porcentaje_orientacion_noticias,
    porcentaje_identidad_gobierno, porcentaje_orientacion_gobierno,
    porcentaje_identidad_ac_manual, porcentaje_orientacion_ac_manual
  )
)


ggplot(df_porcentaje, aes(x = Categoria, y = Porcentaje, fill = Tipo)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4, position = position_dodge(width = 0.9)) +
  labs(title = "Variables de Identidad y Orientación (2018-2022)", x = "", y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#3498db", "#FF6384")) +
  coord_cartesian(ylim = c(0, 100))

IDENTIDAD

La siguiente grafica es una comparación de las variables dentro del diccionario de identidad y su comparativa en las tres fuentes de informacion.

# ... (código anterior)

# NOTICIAS
palabras_transgenero_noticias <- names(conteo_combined_2018[diccionario_identidad$transgenero])
palabras_transgenero_noticias <- palabras_transgenero_noticias[palabras_transgenero_noticias %in% names(conteo_combined_2018)]
palabras_transexual_noticias <- names(conteo_combined_2018[diccionario_identidad$transexual])
palabras_transexual_noticias <- palabras_transexual_noticias[palabras_transexual_noticias %in% names(conteo_combined_2018)]
palabras_no_binario_noticias <- names(conteo_combined_2018[diccionario_identidad$no_binario])
palabras_no_binario_noticias <- palabras_no_binario_noticias[palabras_no_binario_noticias %in% names(conteo_combined_2018)]

# GOBIERNO
palabras_transgenero_gobierno <- names(conteo_combined_2019[diccionario_identidad$transgenero])
palabras_transgenero_gobierno <- palabras_transgenero_gobierno[palabras_transgenero_gobierno %in% names(conteo_combined_2019)]
palabras_transexual_gobierno <- names(conteo_combined_2019[diccionario_identidad$transexual])
palabras_transexual_gobierno <- palabras_transexual_gobierno[palabras_transexual_gobierno %in% names(conteo_combined_2019)]
palabras_no_binario_gobierno <- names(conteo_combined_2019[diccionario_identidad$no_binario])
palabras_no_binario_gobierno <- palabras_no_binario_gobierno[palabras_no_binario_gobierno %in% names(conteo_combined_2019)]

# AC
palabras_transgenero_ac <- names(conteo_combined_2020[diccionario_identidad$transgenero])
palabras_transgenero_ac <- palabras_transgenero_ac[palabras_transgenero_ac %in% names(conteo_combined_2020)]
palabras_transexual_ac <- names(conteo_combined_2020[diccionario_identidad$transexual])
palabras_transexual_ac <- palabras_transexual_ac[palabras_transexual_ac %in% names(conteo_combined_2020)]
palabras_no_binario_ac <- names(conteo_combined_2020[diccionario_identidad$no_binario])
palabras_no_binario_ac <- palabras_no_binario_ac[palabras_no_binario_ac %in% names(conteo_combined_2020)]

# SUMA
frecuencia_transgenero_noticias <- sum(conteo_combined_2018[palabras_transgenero_noticias])
frecuencia_transexual_noticias <- sum(conteo_combined_2018[palabras_transexual_noticias])
frecuencia_no_binario_noticias <- sum(conteo_combined_2018[palabras_no_binario_noticias])

frecuencia_transgenero_gobierno <- sum(conteo_combined_2019[palabras_transgenero_gobierno])
frecuencia_transexual_gobierno <- sum(conteo_combined_2019[palabras_transexual_gobierno])
frecuencia_no_binario_gobierno <- sum(conteo_combined_2019[palabras_no_binario_gobierno])

frecuencia_transgenero_ac <- sum(conteo_combined_2020[palabras_transgenero_ac])
frecuencia_transexual_ac <- sum(conteo_combined_2020[palabras_transexual_ac])
frecuencia_no_binario_ac <- sum(conteo_combined_2020[palabras_no_binario_ac])

# PORCENTAJES
porcentaje_transgenero_noticias <- frecuencia_transgenero_noticias / (frecuencia_transgenero_noticias + frecuencia_transexual_noticias + frecuencia_no_binario_noticias) * 100
porcentaje_transexual_noticias <- frecuencia_transexual_noticias / (frecuencia_transgenero_noticias + frecuencia_transexual_noticias + frecuencia_no_binario_noticias) * 100
porcentaje_no_binario_noticias <- frecuencia_no_binario_noticias / (frecuencia_transgenero_noticias + frecuencia_transexual_noticias + frecuencia_no_binario_noticias) * 100

porcentaje_transgenero_gobierno <- frecuencia_transgenero_gobierno / (frecuencia_transgenero_gobierno + frecuencia_transexual_gobierno + frecuencia_no_binario_gobierno) * 100
porcentaje_transexual_gobierno <- frecuencia_transexual_gobierno / (frecuencia_transgenero_gobierno + frecuencia_transexual_gobierno + frecuencia_no_binario_gobierno) * 100
porcentaje_no_binario_gobierno <- frecuencia_no_binario_gobierno / (frecuencia_transgenero_gobierno + frecuencia_transexual_gobierno + frecuencia_no_binario_gobierno) * 100

porcentaje_transgenero_ac <- frecuencia_transgenero_ac / (frecuencia_transgenero_ac + frecuencia_transexual_ac + frecuencia_no_binario_ac) * 100
porcentaje_transexual_ac <- frecuencia_transexual_ac / (frecuencia_transgenero_ac + frecuencia_transexual_ac + frecuencia_no_binario_ac) * 100
porcentaje_no_binario_ac <- frecuencia_no_binario_ac / (frecuencia_transgenero_ac + frecuencia_transexual_ac + frecuencia_no_binario_ac) * 100

# DATA FRAME
df_porcentaje <- data.frame(
  Categoria = rep(c("Noticias", "Gobierno", "Asociación Civil"), each = 3),
  Tipo = rep(c("Transgénero", "Transexual", "No Binario"), times = 3),
  Porcentaje = c(
    porcentaje_transgenero_noticias, porcentaje_transexual_noticias, porcentaje_no_binario_noticias,
    porcentaje_transgenero_gobierno, porcentaje_transexual_gobierno, porcentaje_no_binario_gobierno,
    porcentaje_transgenero_ac, porcentaje_transexual_ac, porcentaje_no_binario_ac
  )
)



# Crear un gráfico de barras para los porcentajes con eje y hasta 100
ggplot(df_porcentaje, aes(x = Categoria, y = Porcentaje, fill = Tipo)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4, position = position_dodge(width = 0.9)) +
  labs(title = "Identidades de género por categoría (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#3498db", "#FF6384", "#FFA07A")) +
  coord_cartesian(ylim = c(0, 100))  # Establecer el rango del eje y

IDENTIDAD.

La siguiente grafica es una comparación de las variables dentro del diccionario de orientación y su comparativa en las tres fuentes de informacion.

# ... (código anterior)

# NOTICIAS
palabras_gay_noticias <- names(conteo_combined_2018[diccionario_orientacion$gay])
palabras_gay_noticias <- palabras_gay_noticias[palabras_gay_noticias %in% names(conteo_combined_2018)]
palabras_lesbiana_noticias <- names(conteo_combined_2018[diccionario_orientacion$lesbiana])
palabras_lesbiana_noticias <- palabras_lesbiana_noticias[palabras_lesbiana_noticias %in% names(conteo_combined_2018)]
palabras_bisexual_noticias <- names(conteo_combined_2018[diccionario_orientacion$bisexual])
palabras_bisexual_noticias <- palabras_bisexual_noticias[palabras_bisexual_noticias %in% names(conteo_combined_2018)]
palabras_pansexual_noticias <- names(conteo_combined_2018[diccionario_orientacion$pansexual])
palabras_pansexual_noticias <- palabras_pansexual_noticias[palabras_pansexual_noticias %in% names(conteo_combined_2018)]
palabras_asexual_noticias <- names(conteo_combined_2018[diccionario_orientacion$asexual])
palabras_asexual_noticias <- palabras_asexual_noticias[palabras_asexual_noticias %in% names(conteo_combined_2018)]

# GOBIERNO
palabras_gay_gobierno <- names(conteo_combined_2019[diccionario_orientacion$gay])
palabras_gay_gobierno <- palabras_gay_gobierno[palabras_gay_gobierno %in% names(conteo_combined_2019)]
palabras_lesbiana_gobierno <- names(conteo_combined_2019[diccionario_orientacion$lesbiana])
palabras_lesbiana_gobierno <- palabras_lesbiana_gobierno[palabras_lesbiana_gobierno %in% names(conteo_combined_2019)]
palabras_bisexual_gobierno <- names(conteo_combined_2019[diccionario_orientacion$bisexual])
palabras_bisexual_gobierno <- palabras_bisexual_gobierno[palabras_bisexual_gobierno %in% names(conteo_combined_2019)]
palabras_pansexual_gobierno <- names(conteo_combined_2019[diccionario_orientacion$pansexual])
palabras_pansexual_gobierno <- palabras_pansexual_gobierno[palabras_pansexual_gobierno %in% names(conteo_combined_2019)]
palabras_asexual_gobierno <- names(conteo_combined_2019[diccionario_orientacion$asexual])
palabras_asexual_gobierno <- palabras_asexual_gobierno[palabras_asexual_gobierno %in% names(conteo_combined_2019)]

# AC
palabras_gay_ac <- names(conteo_combined_2020[diccionario_orientacion$gay])
palabras_gay_ac <- palabras_gay_ac[palabras_gay_ac %in% names(conteo_combined_2020)]
palabras_lesbiana_ac <- names(conteo_combined_2020[diccionario_orientacion$lesbiana])
palabras_lesbiana_ac <- palabras_lesbiana_ac[palabras_lesbiana_ac %in% names(conteo_combined_2020)]
palabras_bisexual_ac <- names(conteo_combined_2020[diccionario_orientacion$bisexual])
palabras_bisexual_ac <- palabras_bisexual_ac[palabras_bisexual_ac %in% names(conteo_combined_2020)]
palabras_pansexual_ac <- names(conteo_combined_2020[diccionario_orientacion$pansexual])
palabras_pansexual_ac <- palabras_pansexual_ac[palabras_pansexual_ac %in% names(conteo_combined_2020)]
palabras_asexual_ac <- names(conteo_combined_2020[diccionario_orientacion$asexual])
palabras_asexual_ac <- palabras_asexual_ac[palabras_asexual_ac %in% names(conteo_combined_2020)]

# SUMA
frecuencia_gay_noticias <- sum(conteo_combined_2018[palabras_gay_noticias])
frecuencia_lesbiana_noticias <- sum(conteo_combined_2018[palabras_lesbiana_noticias])
frecuencia_bisexual_noticias <- sum(conteo_combined_2018[palabras_bisexual_noticias])
frecuencia_pansexual_noticias <- sum(conteo_combined_2018[palabras_pansexual_noticias])
frecuencia_asexual_noticias <- sum(conteo_combined_2018[palabras_asexual_noticias])

frecuencia_gay_gobierno <- sum(conteo_combined_2019[palabras_gay_gobierno])
frecuencia_lesbiana_gobierno <- sum(conteo_combined_2019[palabras_lesbiana_gobierno])
frecuencia_bisexual_gobierno <- sum(conteo_combined_2019[palabras_bisexual_gobierno])
frecuencia_pansexual_gobierno <- sum(conteo_combined_2019[palabras_pansexual_gobierno])
frecuencia_asexual_gobierno <- sum(conteo_combined_2019[palabras_asexual_gobierno])

frecuencia_gay_ac <- sum(conteo_combined_2020[palabras_gay_ac])
frecuencia_lesbiana_ac <- sum(conteo_combined_2020[palabras_lesbiana_ac])
frecuencia_bisexual_ac <- sum(conteo_combined_2020[palabras_bisexual_ac])
frecuencia_pansexual_ac <- sum(conteo_combined_2020[palabras_pansexual_ac])
frecuencia_asexual_ac <- sum(conteo_combined_2020[palabras_asexual_ac])

# PORCENTAJES
porcentaje_gay_noticias <- frecuencia_gay_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_lesbiana_noticias <- frecuencia_lesbiana_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_bisexual_noticias <- frecuencia_bisexual_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_pansexual_noticias <- frecuencia_pansexual_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_asexual_noticias <- frecuencia_asexual_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100

porcentaje_gay_gobierno <- frecuencia_gay_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_lesbiana_gobierno <- frecuencia_lesbiana_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_bisexual_gobierno <- frecuencia_bisexual_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_pansexual_gobierno <- frecuencia_pansexual_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_asexual_gobierno <- frecuencia_asexual_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100

porcentaje_gay_ac <- frecuencia_gay_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_lesbiana_ac <- frecuencia_lesbiana_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_bisexual_ac <- frecuencia_bisexual_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_pansexual_ac <- frecuencia_pansexual_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_asexual_ac <- frecuencia_asexual_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100

# DATA FRAME
df_porcentaje_orientacion <- data.frame(
  Categoria = rep(c("Noticias", "Gobierno", "Asociación Civil"), each = 5),
  Tipo = rep(c("Gay", "Lesbiana", "Bisexual", "Pansexual", "Asexual"), times = 3),
  Porcentaje = c(
    porcentaje_gay_noticias, porcentaje_lesbiana_noticias, porcentaje_bisexual_noticias, porcentaje_pansexual_noticias, porcentaje_asexual_noticias,
    porcentaje_gay_gobierno, porcentaje_lesbiana_gobierno, porcentaje_bisexual_gobierno, porcentaje_pansexual_gobierno, porcentaje_asexual_gobierno,
    porcentaje_gay_ac, porcentaje_lesbiana_ac, porcentaje_bisexual_ac, porcentaje_pansexual_ac, porcentaje_asexual_ac
  )
)

# Crear un gráfico de barras para los porcentajes con eje y hasta 100
ggplot(df_porcentaje_orientacion, aes(x = Categoria, y = Porcentaje, fill = Tipo)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4, position = position_dodge(width = 0.9)) +
  labs(title = "Distribución de Identidades de Orientación por Categoría (2018-2022)", x = "", y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#3498db", "#FF6384", "#FFA07A", "#FFD700", "#C71585")) +
  coord_cartesian(ylim = c(0, 100))  # Establecer el rango del eje y

Evolucion por año de las variables dentro del diccionario identidad

NOTICIAS

# Definir la función para calcular la frecuencia de una categoría en un año
calcular_frecuencia <- function(conteo, diccionario_palabras) {
  palabras_categoria <- unlist(diccionario_palabras)
  palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
  frecuencia_categoria <- sum(conteo[palabras_en_conteo])
  return(frecuencia_categoria)
}

library(dplyr)


# Crear un data frame con las frecuencias para Transgénero y Transexual
df_frecuencias_identidad_total <- data.frame(
  Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 2),
  Variable = rep(c("Transgénero", "Transexual"), times = 5),
  Frecuencia = c(
    calcular_frecuencia(conteo_2018, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2018, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2019, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2019, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2020, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2020, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2021, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2021, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2022, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2022, diccionario_identidad$transexual)
  )
)

# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_identidad_total <- df_frecuencias_identidad_total %>%
  group_by(Año) %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)

# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_identidad_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
  labs(title = "Comparación de Identidades en Noticias (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#FFB14E", "#FF6384"), name = "Variable") +
  coord_cartesian(xlim = c(0, 100))  # Establecer el rango del eje x

#NOTICIAS

# Función para calcular la frecuencia de una categoría en un año (para orientación)
calcular_frecuencia_orientacion <- function(conteo, diccionario_palabras) {
  palabras_categoria <- unlist(diccionario_palabras)
  palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
  frecuencia_categoria <- sum(conteo[palabras_en_conteo])
  return(frecuencia_categoria)
}

# Crear un data frame con las frecuencias para Gay, Lesbiana y Bisexual
df_frecuencias_orientacion_total <- data.frame(
  Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 3),
  Variable = rep(c("Gay", "Lesbiana", "Bisexual"), times = 5),
  Frecuencia = c(
    calcular_frecuencia_orientacion(conteo_2018, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2018, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2018, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2019, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2019, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2019, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2020, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2020, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2020, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2021, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2021, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2021, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2022, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2022, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2022, diccionario_orientacion$bisexual)
  )
)

# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_orientacion_total <- df_frecuencias_orientacion_total %>%
  group_by(Año) %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)

# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_orientacion_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
    geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
  labs(title = "Comparación de Orientaciones en Noticias (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50"), name = "Variable") +
  coord_cartesian(xlim = c(0, 100))  # Establecer el rango del eje x

# GOBIERNO

library(dplyr)
# Definir la función para calcular la frecuencia de una categoría en un año
calcular_frecuencia <- function(conteo, diccionario_palabras) {
  palabras_categoria <- unlist(diccionario_palabras)
  palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
  frecuencia_categoria <- sum(conteo[palabras_en_conteo])
  return(frecuencia_categoria)
}

# Crear un data frame con las frecuencias para Transgénero y Transexual
df_frecuencias_identidad_total <- data.frame(
  Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 2),
  Variable = rep(c("Transgénero", "Transexual"), times = 5),
  Frecuencia = c(
    calcular_frecuencia(conteo_2018_gob, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2018_gob, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2019_gob, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2019_gob, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2020_gob, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2020_gob, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2021_gob, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2021_gob, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2022_gob, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2022_gob, diccionario_identidad$transexual)
  )
)

# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_identidad_total <- df_frecuencias_identidad_total %>%
  group_by(Año) %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)

# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_identidad_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
  labs(title = "Comparación de Identidades en Gobierno (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#FFB14E", "#FF6384"), name = "Variable") +
  coord_cartesian(xlim = c(0, 105))  # Establecer el rango del eje x

### Gobierno

# Función para calcular la frecuencia de una categoría en un año (para orientación)
calcular_frecuencia_orientacion <- function(conteo, diccionario_palabras) {
  palabras_categoria <- unlist(diccionario_palabras)
  palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
  frecuencia_categoria <- sum(conteo[palabras_en_conteo])
  return(frecuencia_categoria)
}

# Crear un data frame con las frecuencias para Gay, Lesbiana y Bisexual
df_frecuencias_orientacion_total <- data.frame(
  Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 3),
  Variable = rep(c("Gay", "Lesbiana", "Bisexual"), times = 5),
  Frecuencia = c(
    calcular_frecuencia_orientacion(conteo_2018_gob, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2018_gob, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2018_gob, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2019_gob, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2019_gob, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2019_gob, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2020_gob, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2020_gob, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2020_gob, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2021_gob, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2021_gob, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2021_gob, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2022_gob, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2022_gob, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2022_gob, diccionario_orientacion$bisexual)
  )
)

# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_orientacion_total <- df_frecuencias_orientacion_total %>%
  group_by(Año) %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)

# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_orientacion_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
  labs(title = "Comparación de Orientaciones en Gobierno (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50"), name = "Variable") +
  coord_cartesian(xlim = c(0, 105))  # Establecer el rango del eje x

# ASOCIACION CIVIL

library(dplyr)
# Definir la función para calcular la frecuencia de una categoría en un año
calcular_frecuencia <- function(conteo, diccionario_palabras) {
  palabras_categoria <- unlist(diccionario_palabras)
  palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
  frecuencia_categoria <- sum(conteo[palabras_en_conteo])
  return(frecuencia_categoria)
}

# Crear un data frame con las frecuencias para Transgénero y Transexual
df_frecuencias_identidad_total <- data.frame(
  Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 2),
  Variable = rep(c("Transgénero", "Transexual"), times = 5),
  Frecuencia = c(
    calcular_frecuencia(conteo_2018_ac, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2018_ac, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2019_ac, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2019_ac, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2020_ac, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2020_ac, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2021_ac, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2021_ac, diccionario_identidad$transexual),
    calcular_frecuencia(conteo_2022_ac, diccionario_identidad$transgenero),
    calcular_frecuencia(conteo_2022_ac, diccionario_identidad$transexual)
  )
)

# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_identidad_total <- df_frecuencias_identidad_total %>%
  group_by(Año) %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)

# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_identidad_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
  labs(title = "Comparación de Identidades en Asociaciones Civiles (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#FFB14E", "#FF6384"), name = "Variable") +
  coord_cartesian(xlim = c(0, 105))  # Establecer el rango del eje x

ASOCIACION CIVIL

# Función para calcular la frecuencia de una categoría en un año (para orientación)
calcular_frecuencia_orientacion <- function(conteo, diccionario_palabras) {
  palabras_categoria <- unlist(diccionario_palabras)
  palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
  frecuencia_categoria <- sum(conteo[palabras_en_conteo])
  return(frecuencia_categoria)
}

# Crear un data frame con las frecuencias para Gay, Lesbiana y Bisexual
df_frecuencias_orientacion_total <- data.frame(
  Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 3),
  Variable = rep(c("Gay", "Lesbiana", "Bisexual"), times = 5),
  Frecuencia = c(
    calcular_frecuencia_orientacion(conteo_2018_ac, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2018_ac, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2018_ac, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2019_ac, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2019_ac, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2019_ac, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2020_ac, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2020_ac, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2020_ac, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2021_ac, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2021_ac, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2021_ac, diccionario_orientacion$bisexual),
    calcular_frecuencia_orientacion(conteo_2022_ac, diccionario_orientacion$gay),
    calcular_frecuencia_orientacion(conteo_2022_ac, diccionario_orientacion$lesbiana),
    calcular_frecuencia_orientacion(conteo_2022_ac, diccionario_orientacion$bisexual)
  )
)

# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_orientacion_total <- df_frecuencias_orientacion_total %>%
  group_by(Año) %>%
  mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)

# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_orientacion_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
  geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
  labs(title = "Comparación de Orientaciones en Asociaciones Civiles (2018-2022)",
       x = "",
       y = "") +
  theme_minimal() +
  scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50"), name = "Variable") +
  coord_cartesian(xlim = c(0, 105))  # Establecer el rango del eje x

WORDCLOUD TODOS LOS AÑOS

set.seed(123)
top_words_final <- head(sort(conteo_final_noticias, decreasing = TRUE), 35)
top_words_final_ac <- head(sort(conteo_final_ac, decreasing = TRUE), 35)
top_words_final_gob <- head(sort(conteo_final_gob, decreasing = TRUE), 35)

# Combinar las tres listas de palabras
all_top_words <- unique(c(names(top_words_final), names(top_words_final_ac), names(top_words_final_gob)))

# Seleccionar las frecuencias correspondientes a las palabras seleccionadas
freq_final <- conteo_final_noticias[all_top_words]
freq_final_ac <- conteo_final_ac[all_top_words]
freq_final_gob <- conteo_final_gob[all_top_words]

# Sumar las frecuencias de las tres variables
freq_combined <- freq_final + freq_final_ac + freq_final_gob
# Eliminar posibles valores NA
freq_combined <- freq_combined[!is.na(freq_combined)]
# Verificar si hay frecuencias para evitar el error
if (length(freq_combined) > 0) {
  # Instalar y cargar bibliotecas necesarias
  library(wordcloud)

  # Crear el Word Cloud
  wordcloud(words = names(freq_combined), freq = freq_combined, scale = c(3, 0.5), colors = brewer.pal(8, "Dark2"))
} else {
  print("No hay suficientes datos para crear el Word Cloud.")
}

GRAFICO 10 PALABRAS MAS MENCIONADAS EN 5 AÑOS

palabras mencionada mas en noticias.

library(ggplot2)

# Obtener las 10 palabras más comunes
top_10_terminos <- head(sort(conteo_final_noticias, decreasing = TRUE), 10)

# Crear un data frame con los datos
data_top_10 <- data.frame(termino = names(top_10_terminos), repeticiones = top_10_terminos)

# Ordenar el data frame de mayor a menor
data_top_10$termino <- factor(data_top_10$termino, levels = data_top_10$termino[order(data_top_10$repeticiones, decreasing = TRUE)])

# Verificar si hay suficientes datos para graficar
if (nrow(data_top_10) > 1) {
  # Crear un gráfico de barras horizontal con colores más suaves y etiquetas de repeticiones
  ggplot(data_top_10, aes(x = repeticiones, y = termino, fill = termino)) +
    geom_bar(stat = "identity") +
    labs(title = "Top 10 Palabras Más Repetidas Noticias (2018-2022)",
         x = "  ",
         y = "") +
    theme_minimal() +
    scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50", "#3498db", "#9b59b6", "#FFD700", "#FF69B4", "#00CED1", "#FF4500", "#ADFF2F",
  "#FFA07A", "#87CEEB", "#FF6347", "#20B2AA", "#DDA0DD", "#FF8C00", "#8A2BE2", "#32CD32", "#FF00FF", "#00FF7F")
, name = "Palabra") +
    coord_cartesian(xlim = c(0, max(data_top_10$repeticiones) + 10))  # Establecer el rango del eje x
} else {
  print("No hay suficientes datos para graficar.")
}

gobierno

palabras mencionadas en gobierno

library(ggplot2)

set.seed(123)
# Obtener las 10 palabras más comunes excluyendo "gob"
top_10_terminos <- head(sort(conteo_final_gob[!names(conteo_final_gob) %in% "gob"], decreasing = TRUE), 10)

# Crear un data frame con los datos
data_top_10 <- data.frame(termino = names(top_10_terminos), repeticiones = top_10_terminos)

# Ordenar el data frame de mayor a menor
data_top_10$termino <- factor(data_top_10$termino, levels = data_top_10$termino[order(data_top_10$repeticiones, decreasing = TRUE)])

# Verificar si hay suficientes datos para graficar
if (nrow(data_top_10) > 1) {
  # Crear un gráfico de barras horizontal con colores más suaves y etiquetas de repeticiones
  ggplot(data_top_10, aes(x = repeticiones, y = termino, fill = termino)) +
    geom_bar(stat = "identity") +
    labs(title = "Top 10 Palabras Más Repetidas Gobierno (2018-2022)",
         x = "  ",
         y = "") +
    theme_minimal() +
    scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50", "#3498db", "#9b59b6", "#FFD700", "#FF69B4", "#00CED1", "#FF4500", "#ADFF2F",
  "#FFA07A", "#87CEEB", "#FF6347", "#20B2AA", "#DDA0DD", "#FF8C00", "#8A2BE2", "#32CD32", "#FF00FF", "#00FF7F")
, name = "Palabra") +
    coord_cartesian(xlim = c(0, max(data_top_10$repeticiones) + 10))  # Establecer el rango del eje x
} else {
  print("No hay suficientes datos para graficar.")
}

Asociaciones Civiles

Top 10 palabras mas repetidas, esta paarte del codigo se enfoca en crear una tabla de las 10 palabras mas mencionadas en la fuente de AC.

library(ggplot2)
set.seed(123)
# Obtener las 10 palabras más comunes
top_10_terminos <- head(sort(conteo_final_ac, decreasing = TRUE), 10)

# Crear un data frame con los datos
data_top_10 <- data.frame(termino = names(top_10_terminos), repeticiones = top_10_terminos)

# Ordenar el data frame de mayor a menor
data_top_10$termino <- factor(data_top_10$termino, levels = data_top_10$termino[order(data_top_10$repeticiones, decreasing = TRUE)])

# Verificar si hay suficientes datos para graficar
if (nrow(data_top_10) > 1) {
  # Crear un gráfico de barras horizontal con colores más suaves y etiquetas de repeticiones
  ggplot(data_top_10, aes(x = repeticiones, y = termino, fill = termino)) +
    geom_bar(stat = "identity") +
    labs(title = "Top 10 Palabras Más Repetidas Asociacion civil (2018-2022)",
         x = "  ",
         y = "") +
    theme_minimal() +
    scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50", "#3498db", "#9b59b6", "#FFD700", "#FF69B4", "#00CED1", "#FF4500", "#ADFF2F",
  "#FFA07A", "#87CEEB", "#FF6347", "#20B2AA", "#DDA0DD", "#FF8C00", "#8A2BE2", "#32CD32", "#FF00FF", "#00FF7F")
, name = "Palabra") +
    coord_cartesian(xlim = c(0, max(data_top_10$repeticiones) + 10))  # Establecer el rango del eje x
} else {
  print("No hay suficientes datos para graficar.")
}

Modelado de topicos.

Noticias

La siguiente parte utiliza un modeldo de topicos para mostrar los temas principales de las noticias.

library(tidytext)

set.seed(123)
# Corpus y DTM notcicias

# Convertir la DTM a un data frame con tidytext
dtm_tidy <- tidy(dtm_final)
dtm_tidy <- dtm_tidy %>%
  group_by(document) %>%
  filter(sum(count) > 0)  

# Reconstruir la DTM desde el data frame tidytext
dtm_final <- cast_dtm(dtm_tidy, document, term, count)

conteo_final <- colSums(as.matrix(dtm_final))
inspect(dtm_final)
## <<DocumentTermMatrix (documents: 98, terms: 8485)>>
## Non-/sparse entries: 21704/809826
## Sparsity           : 97%
## Maximal term length: 35
## Weighting          : term frequency (tf)
## Sample             :
##      Terms
## Docs  comunidad derechos discriminación gay género identidad lgbt marcha mundo
##   101         1        4              3   1      7         4   22      0     0
##   11         13        0              2   4      0         0    5      0     2
##   19          2        3              2   8      0         0    2     16     1
##   26         13        0              2   4      0         0    5      0     2
##   31          5        0              0   4      0         0    2      0     5
##   37          0        0              0  10      0         0    0      0     5
##   4           2        3              2   8      0         0    2     16     1
##   45          0        4              0   5      0         0    0     11     5
##   80          0        4              6   0     10        12    2      0     4
##   83          3        7              5   0      2         2    0      0     0
##      Terms
## Docs  trans
##   101     2
##   11      0
##   19      0
##   26      0
##   31      0
##   37      0
##   4       0
##   45      0
##   80      8
##   83      2
# Continuar con el análisis solo si hay documentos con al menos un término
if (nrow(dtm_final) > 0) {
  set.seed(1)
  # Generar un modelo de topic models
  lda_lgbt <- LDA(dtm_final, k = 2)
  # Obtener los términos más importantes de cada tópico
  terms_lgbt <- tidy(lda_lgbt, matrix = "beta") %>%
    group_by(topic) %>%
    top_n(4, wt = beta)

  # Generar el gráfico mejorado con tres tópicos
  ggplot(terms_lgbt, aes(x = reorder(term, -beta), y = beta, fill = factor(topic))) +
    geom_col(show.legend = FALSE) +
    coord_flip() +
    facet_wrap(~topic, ncol = 1, scales = "free") +
    labs(title = "Modelado de Topicos Noticias", x = "", y = " ") +
    theme_minimal() +
    scale_fill_brewer(palette = "Dark2")
} else {
  warning("Todos los documentos están vacíos después de la limpieza. No se puede realizar el modelado de tópicos.")
}

Gobierno

library(tidytext)

set.seed(123)

# Convertir la DTM a un data frame con tidytext
dtm_tidy <- tidy(dtm_final_gob)
dtm_tidy <- dtm_tidy %>%
  group_by(document) %>%
  filter(sum(count) > 0)  

# Reconstruir la DTM desde el data frame tidytext
dtm_final_gob <- cast_dtm(dtm_tidy, document, term, count)

conteo_final <- colSums(as.matrix(dtm_final_gob))
inspect(dtm_final_gob)
## <<DocumentTermMatrix (documents: 45, terms: 1153)>>
## Non-/sparse entries: 1606/50279
## Sparsity           : 97%
## Maximal term length: 23
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt puedes
##   1     0        5              0          1      0   0           2    2      2
##   10    0        0              0          0      0   1           0    0      0
##   2     0        4              9         12      6   0           3    4      2
##   3     0        3              0          0      1   0           2    2      2
##   4     0        6              5          0      5   0           2    0      2
##   5     0        1              0          0      3   0           2    0      2
##   6     0        0              0          2      0   0           3    1      2
##   7     0        1              0          1      0   0           2    3      0
##   8     0        0              0          0      0   1           0    0      0
##   9     0        0              0          0      0   1           0    0      0
##     Terms
## Docs turismo
##   1        0
##   10       0
##   2        0
##   3        0
##   4        0
##   5        0
##   6        0
##   7       16
##   8        0
##   9        0
# Continuar con el análisis solo si hay documentos con al menos un término
if (nrow(dtm_final_gob) > 0) {
  set.seed(1)
  # Generar un modelo de topic models
  lda_lgbt <- LDA(dtm_final_gob, k = 2)
  # Obtener los términos más importantes de cada tópico
  terms_lgbt <- tidy(lda_lgbt, matrix = "beta") %>%
    group_by(topic) %>%
    top_n(4, wt = beta)

  # Generar el gráfico mejorado con tres tópicos
  ggplot(terms_lgbt, aes(x = reorder(term, -beta), y = beta, fill = factor(topic))) +
    geom_col(show.legend = FALSE) +
    coord_flip() +
    facet_wrap(~topic, ncol = 1, scales = "free") +
    labs(title = "Modelado de Topicos Gonierno", x = "", y = " ") +
    theme_minimal() +
    scale_fill_brewer(palette = "Dark2")
} else {
  warning("Todos los documentos están vacíos después de la limpieza. No se puede realizar el modelado de tópicos.")
}

Asociaciones Civiles.

library(tidytext)

set.seed(123)

todo_ac <- c(ac_2018, ac_2019, ac_2020, ac_2021, ac_2022)
corpus_final_ac <- Corpus(VectorSource(todo_ac))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, stopwords("es"))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, palabras_eliminar)
dtm_final_ac <- DocumentTermMatrix(corpus_final_ac)
conteo_final_ac <- colSums(as.matrix(dtm_final_ac))
inspect(dtm_final_ac)
## <<DocumentTermMatrix (documents: 67, terms: 9335)>>
## Non-/sparse entries: 22458/602987
## Sparsity           : 96%
## Maximal term length: 25
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs derechos género humanos identidad lgbti misoprostol mujeres persona trans
##   42        1     24       0        12     0           0      13       0     5
##   43        4     19       2         7     1           0       5       2    12
##   47       17     30       4        37     0           0       6      13     0
##   49        7      5       5         0     5           0      13       1     8
##   60        2      2       2         0     1           0       0       7    23
##   61        6      8       3         4     1           0      29      14    72
##   62       10      1       8         1     1          98      49       5     0
##   63        4      2       1         0     1          22      10       5     0
##   64        5      1       5         0     1           0       0      11     0
##   65        1     18       0        13     0           0       2      10    15
##     Terms
## Docs vida
##   42    0
##   43   10
##   47    4
##   49    6
##   60    4
##   61   17
##   62   16
##   63   12
##   64    7
##   65    7
# Convertir la DTM a un data frame con tidytext
dtm_tidy <- tidy(dtm_final_ac)
dtm_tidy <- dtm_tidy %>%
  group_by(document) %>%
  filter(sum(count) > 0)  

# Reconstruir la DTM desde el data frame tidytext
dtm_final_ac <- cast_dtm(dtm_tidy, document, term, count)

conteo_final <- colSums(as.matrix(dtm_final_ac))
inspect(dtm_final_ac)
## <<DocumentTermMatrix (documents: 67, terms: 9335)>>
## Non-/sparse entries: 22458/602987
## Sparsity           : 96%
## Maximal term length: 25
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs derechos género humanos identidad lgbti misoprostol mujeres persona trans
##   42        1     24       0        12     0           0      13       0     5
##   43        4     19       2         7     1           0       5       2    12
##   47       17     30       4        37     0           0       6      13     0
##   49        7      5       5         0     5           0      13       1     8
##   60        2      2       2         0     1           0       0       7    23
##   61        6      8       3         4     1           0      29      14    72
##   62       10      1       8         1     1          98      49       5     0
##   63        4      2       1         0     1          22      10       5     0
##   64        5      1       5         0     1           0       0      11     0
##   65        1     18       0        13     0           0       2      10    15
##     Terms
## Docs vida
##   42    0
##   43   10
##   47    4
##   49    6
##   60    4
##   61   17
##   62   16
##   63   12
##   64    7
##   65    7
# Continuar con el análisis solo si hay documentos con al menos un término
if (nrow(dtm_final_ac) > 0) {
  set.seed(1)
  # Generar un modelo de topic models
  lda_lgbt <- LDA(dtm_final_ac, k = 2)
  # Obtener los términos más importantes de cada tópico
  terms_lgbt <- tidy(lda_lgbt, matrix = "beta") %>%
    group_by(topic) %>%
    top_n(4, wt = beta)

  # Generar el gráfico mejorado con tres tópicos
  ggplot(terms_lgbt, aes(x = reorder(term, -beta), y = beta, fill = factor(topic))) +
    geom_col(show.legend = FALSE) +
    coord_flip() +
    facet_wrap(~topic, ncol = 1, scales = "free") +
    labs(title = "Modelado de Topicos Asociación Civil", x = "", y = " ") +
    theme_minimal() +
    scale_fill_brewer(palette = "Dark2")
} else {
  warning("Todos los documentos están vacíos después de la limpieza. No se puede realizar el modelado de tópicos.")
}