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(sentimentr)
library(topicmodels)
### 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
## 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
## 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-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://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-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/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
## 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
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)
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
})
}
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)
Se crean corpus centrales de cada fuente y se dividen por año.
palabras_eliminar <- c("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")
# 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: 2275)>>
## Non-/sparse entries: 5914/62336
## Sparsity : 91%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad conapred derechos discriminación gay gente lgbt marcha mujer
## 11 13 10 1 2 4 4 5 0 1
## 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 1 0 0 2 0 0 1
## 4 2 0 3 2 8 4 2 16 2
## 6 0 0 1 2 0 0 0 0 5
## 7 4 0 0 0 5 5 0 0 0
## Terms
## Docs solo
## 11 11
## 18 0
## 19 1
## 21 0
## 22 1
## 26 10
## 3 1
## 4 1
## 6 1
## 7 1
# 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: 2368)>>
## Non-/sparse entries: 3375/32145
## Sparsity : 90%
## Maximal term length: 35
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad deporte derechos gay gente lgbt marcha matrimonio mismo mundo
## 1 5 18 0 4 12 2 0 0 5 5
## 10 4 0 4 4 0 3 0 15 6 0
## 11 3 0 2 9 1 1 0 0 1 0
## 12 4 0 2 0 0 11 0 0 0 0
## 14 2 0 7 7 0 4 2 8 4 12
## 15 0 0 5 5 0 0 11 2 0 5
## 5 2 0 5 0 0 4 0 1 0 0
## 7 0 0 1 10 4 0 0 0 0 5
## 8 8 0 0 0 0 9 0 0 0 3
## 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: 2866)>>
## Non-/sparse entries: 3897/39093
## Sparsity : 91%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs año comunidad derechos empresas gay homosexual lgbt marcha mundo papa
## 10 2 3 7 0 1 0 4 5 4 0
## 12 1 0 1 0 6 1 1 0 1 0
## 14 4 11 0 0 6 0 10 0 0 0
## 2 1 1 0 0 2 1 0 0 1 0
## 3 2 0 1 10 1 0 8 0 1 0
## 4 1 1 2 0 1 1 0 0 2 0
## 5 0 2 1 0 0 7 2 0 12 20
## 7 1 1 3 0 0 2 0 0 0 0
## 8 3 5 2 0 4 9 4 12 0 0
## 9 6 1 4 0 3 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: 2261)>>
## Non-/sparse entries: 3313/30602
## Sparsity : 90%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad correo derechos discriminación ley lgbt noticias orgullo parque
## 10 1 0 2 6 3 2 0 1 13
## 11 0 0 2 4 1 0 0 0 7
## 13 0 0 2 4 11 3 20 1 0
## 14 6 0 0 0 0 8 0 0 0
## 15 6 2 5 0 0 2 0 0 0
## 2 5 0 3 1 0 2 1 1 0
## 4 3 0 0 2 0 0 0 1 0
## 5 3 0 1 0 4 8 0 0 0
## 7 2 8 0 1 0 3 3 1 0
## 8 5 8 3 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: 4124)>>
## Non-/sparse entries: 6841/104507
## Sparsity : 94%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs asilo binaria comunidad derechos género identidad lgbt noticias persona
## 12 0 9 0 1 0 14 2 0 8
## 13 0 0 1 3 10 5 1 1 2
## 16 0 0 2 0 0 0 1 0 0
## 19 0 0 3 12 3 2 2 0 2
## 25 0 2 1 2 4 5 1 0 2
## 26 52 0 1 4 7 4 22 0 2
## 3 0 3 1 1 5 1 0 0 1
## 4 0 0 5 0 0 0 3 0 0
## 5 0 11 0 5 10 12 2 0 6
## 8 0 4 3 7 2 2 0 1 7
## Terms
## Docs trans
## 12 7
## 13 23
## 16 9
## 19 9
## 25 18
## 26 2
## 3 4
## 4 0
## 5 8
## 8 2
#Corpus y DTM FINAL
todas_las_noticias <- c(noticias_2018, noticias_2019, noticias_2020, noticias_2021, noticias_2022)
corpus_final <- Corpus(VectorSource(todas_las_noticias))
corpus_final <- tm_map(corpus_final, removeWords, stopwords("es"))
corpus_final <- tm_map(corpus_final, removeWords, palabras_eliminar)
dtm_final <- DocumentTermMatrix(corpus_final)
conteo_final <- colSums(as.matrix(dtm_final))
inspect(dtm_final)
## <<DocumentTermMatrix (documents: 102, terms: 8755)>>
## Non-/sparse entries: 23340/869670
## 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 1 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 1 0 10 0 0 0 0 5
## 4 2 3 2 8 0 0 2 16 1
## 45 0 5 0 5 0 0 0 11 5
## 80 0 5 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
palabras_eliminar <- c("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")
# 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: 1195)>>
## Non-/sparse entries: 1604/6761
## 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: 2946)>>
## Non-/sparse entries: 3919/28487
## Sparsity : 88%
## Maximal term length: 19
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs andrés derechos dÃa discriminación diversidad información lópez manuel
## 1 0 1 0 0 4 2 0 0
## 10 34 12 19 19 8 4 35 34
## 11 0 7 0 3 1 3 0 0
## 3 0 2 1 0 3 2 0 0
## 4 0 3 0 2 3 2 0 0
## 5 0 1 4 2 7 2 0 0
## 6 0 0 0 2 1 2 0 0
## 7 0 5 1 1 2 2 0 0
## 8 0 15 0 0 2 2 0 0
## 9 0 0 2 1 3 2 0 0
## Terms
## Docs obrador salud
## 1 0 6
## 10 34 16
## 11 0 3
## 3 0 0
## 4 0 0
## 5 0 1
## 6 0 1
## 7 0 0
## 8 0 1
## 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: 1702)>>
## Non-/sparse entries: 2373/11243
## Sparsity : 83%
## Maximal term length: 32
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs año comunidad dÃa discriminación información junio lgbt secretarÃa trabajo
## 1 4 3 4 0 2 13 6 3 1
## 2 0 0 2 0 4 2 2 3 0
## 3 0 2 0 0 2 0 1 0 1
## 4 0 4 0 4 2 1 3 0 7
## 5 1 0 1 11 2 0 0 7 2
## 6 0 4 2 0 2 2 2 3 0
## 7 4 0 1 0 2 0 1 2 0
## 8 5 0 2 0 2 0 3 5 5
## Terms
## Docs turismo
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 1
## 7 10
## 8 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: 923)>>
## Non-/sparse entries: 1132/2560
## 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: 2098)>>
## Non-/sparse entries: 3055/28415
## 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: 1201)>>
## Non-/sparse entries: 1718/52327
## Sparsity : 97%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt
## 1 0 5 0 1 0 0 2 2
## 10 0 0 0 0 0 1 0 0
## 2 0 4 9 12 6 0 3 4
## 3 0 3 0 0 1 0 2 2
## 4 0 6 5 0 5 0 2 0
## 5 0 1 0 0 3 0 2 0
## 6 0 0 0 2 0 0 3 1
## 7 0 1 0 1 0 0 2 3
## 8 0 0 0 0 0 1 0 0
## 9 0 0 0 0 0 1 0 0
## Terms
## Docs turismo txt
## 1 0 0
## 10 0 1
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
## 7 16 0
## 8 0 1
## 9 0 1
palabras_eliminar <- c("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")
# 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: 1276)>>
## Non-/sparse entries: 2712/10048
## Sparsity : 79%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs black color content derechos important margin pullright
## 1 3 5 3 3 30 4 4
## 10 3 5 3 5 30 4 4
## 2 3 5 3 4 30 4 4
## 3 3 5 3 1 30 4 4
## 4 3 5 3 1 30 4 4
## 5 3 5 3 4 30 4 4
## 6 3 5 3 9 30 4 4
## 7 3 5 3 2 30 4 4
## 8 3 5 3 1 30 4 4
## 9 3 5 3 3 30 4 4
## Terms
## Docs socialfeedcontainer socialfeedelement tfbaaccesstoken
## 1 23 5 4
## 10 23 5 4
## 2 23 5 4
## 3 23 5 4
## 4 23 5 4
## 5 23 5 4
## 6 23 5 4
## 7 23 5 4
## 8 23 5 4
## 9 23 5 4
# 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: 1778)>>
## Non-/sparse entries: 3095/21797
## Sparsity : 88%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs color derechos género identidad important nacimiento nombre
## 11 0 1 2 2 0 5 6
## 12 0 1 1 0 0 4 2
## 13 0 2 8 3 0 0 1
## 14 0 1 9 8 0 3 2
## 2 0 13 7 4 0 3 4
## 3 0 2 3 6 0 10 2
## 6 0 1 2 2 0 0 6
## 7 5 2 1 1 30 0 0
## 8 5 1 1 1 30 0 0
## 9 5 3 1 0 30 0 0
## Terms
## Docs socialfeedcontainer socialfeedelement trans
## 11 0 0 1
## 12 0 0 8
## 13 0 0 13
## 14 0 0 7
## 2 0 0 1
## 3 0 0 0
## 6 0 0 10
## 7 23 5 0
## 8 23 5 0
## 9 23 5 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: 2922)>>
## Non-/sparse entries: 5584/47012
## Sparsity : 89%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs derechos familias género identidad important infancias nombre salud
## 13 3 0 8 8 0 1 1 0
## 14 4 7 17 14 0 14 5 4
## 17 6 5 9 11 0 3 3 1
## 18 1 0 24 12 0 6 1 1
## 2 12 2 11 14 0 6 1 7
## 3 6 1 7 1 0 13 4 0
## 6 2 0 3 3 30 1 3 2
## 7 2 0 3 2 30 0 2 1
## 8 2 0 2 3 30 0 2 1
## 9 6 0 5 5 30 0 2 4
## Terms
## Docs socialfeedcontainer trans
## 13 0 13
## 14 0 15
## 17 0 4
## 18 0 5
## 2 0 27
## 3 0 23
## 6 23 15
## 7 23 0
## 8 23 0
## 9 23 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: 3469)>>
## Non-/sparse entries: 6371/35257
## Sparsity : 85%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs color comunidad derechos género identidad important lgbti
## 1 1 0 4 19 7 0 1
## 10 5 9 1 0 0 30 6
## 11 5 2 4 1 0 30 4
## 12 5 1 1 0 0 30 5
## 2 5 2 9 2 0 30 5
## 3 5 4 4 0 0 30 6
## 4 5 7 1 9 5 30 6
## 5 0 1 17 30 37 0 0
## 7 5 5 7 5 0 30 5
## 8 5 5 10 1 0 30 4
## Terms
## Docs socialfeedcontainer socialfeedelement vida
## 1 0 0 10
## 10 23 5 3
## 11 23 5 4
## 12 23 5 9
## 2 23 5 1
## 3 23 5 3
## 4 23 5 3
## 5 0 0 4
## 7 23 5 6
## 8 23 5 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: 21, terms: 5669)>>
## Non-/sparse entries: 19866/99183
## Sparsity : 83%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs aborto important miguel misoprostol mujeres salud socialfeedcontainer
## 15 0 30 27 0 29 16 23
## 16 0 30 27 0 29 16 23
## 17 47 30 11 98 49 13 23
## 18 56 30 14 22 10 18 23
## 19 0 30 21 0 0 7 23
## 3 0 30 27 0 29 16 23
## 4 0 30 27 0 29 16 23
## 5 47 30 11 98 49 13 23
## 6 56 30 14 22 10 18 23
## 7 0 30 21 0 0 7 23
## Terms
## Docs trans vida vih
## 15 72 17 22
## 16 72 17 22
## 17 0 16 0
## 18 0 12 0
## 19 0 7 28
## 3 72 17 22
## 4 72 17 22
## 5 0 16 0
## 6 0 12 0
## 7 0 7 28
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: 75, terms: 9532)>>
## Non-/sparse entries: 37628/677272
## Sparsity : 95%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs color derechos género important miguel mujeres socialfeedcontainer
## 57 5 6 8 30 27 29 23
## 58 5 6 8 30 27 29 23
## 59 5 10 1 30 11 49 23
## 60 5 4 2 30 14 10 23
## 61 5 5 1 30 21 0 23
## 69 5 6 8 30 27 29 23
## 70 5 6 8 30 27 29 23
## 71 5 10 1 30 11 49 23
## 72 5 4 2 30 14 10 23
## 73 5 5 1 30 21 0 23
## Terms
## Docs socialfeedelement trans vida
## 57 5 72 17
## 58 5 72 17
## 59 5 0 16
## 60 5 0 12
## 61 5 0 7
## 69 5 72 17
## 70 5 72 17
## 71 5 0 16
## 72 5 0 12
## 73 5 0 7
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)
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")
)
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_final_ac)[names(conteo_final_ac) %in% unlist(diccionario_identidad)]
palabras_orientacion <- names(conteo_final_ac)[names(conteo_final_ac) %in% unlist(diccionario_orientacion)]
# Sumar frecuencias por categorÃa
frecuencia_identidad <- sum(conteo_final_ac[palabras_identidad])
frecuencia_orientacion <- sum(conteo_final_ac[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 en 5 años", x = "Diccionario", y = "Porcentaje ") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384")) +
coord_cartesian(ylim = c(0, 100)) # Establecer el rango del eje y
La siguiente grafica muestra una comparacion desagregada de las variabes y su comparacion de diccionarios.
palabras_identidad_noticias <- names(conteo_final)[names(conteo_final) %in% unlist(diccionario_identidad)]
palabras_orientacion_noticias <- names(conteo_final)[names(conteo_final) %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[palabras_identidad_noticias])
frecuencia_orientacion_noticias <- sum(conteo_final[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 / (frecuencia_identidad_ac + frecuencia_orientacion_ac) * 100
porcentaje_orientacion_ac <- frecuencia_orientacion_ac / (frecuencia_identidad_ac + frecuencia_orientacion_ac) * 100
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, porcentaje_orientacion_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 = "Variables de Identidad y Orientación en 5 años", x = "", y = "") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384")) +
coord_cartesian(ylim = c(0, 100)) # Establecer el rango del eje y
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",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384", "#FFA07A")) +
coord_cartesian(ylim = c(0, 100)) # Establecer el rango del eje y
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", 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
# Obtener las 35 palabras más repetidas de cada variable
top_words_final <- head(sort(conteo_final, 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[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.")
}
palabras mencionadas en noticias.
library(ggplot2)
# Obtener las 10 palabras más comunes
top_10_terminos <- head(sort(conteo_final, 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.")
}
palabras mencionadas en gobierno
library(ggplot2)
# Obtener las 10 palabras más comunes
top_10_terminos <- head(sort(conteo_final_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.")
}
palabras mencionadas en gobierno
library(ggplot2)
# 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 AC (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.")
}
library(ggplot2)
# 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.")
}
library(syuzhet)
##
## Attaching package: 'syuzhet'
## The following object is masked from 'package:sentimentr':
##
## get_sentences
corpus_vector <- unlist(sapply(corpus_final , as.character))
lgbt_sentiment <- data.frame(text = corpus_vector) %>%
unnest_tokens(word, text) %>%
inner_join(get_sentiment_dictionary("nrc", language = "spanish")) %>%
inner_join(get_sentiments("nrc"))%>% # Se especifica que la librerÃa será en español
count(sentiment)
## Joining with `by = join_by(word)`
## Warning in inner_join(., get_sentiment_dictionary("nrc", language = "spanish")): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 3 of `x` matches multiple rows in `y`.
## ℹ Row 978 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Joining with `by = join_by(word, sentiment)`
## Tabla con la distribución de sentimientos
lgbt_sentiment
## sentiment n
## 1 anger 19
## 2 anticipation 122
## 3 disgust 46
## 4 fear 65
## 5 joy 119
## 6 negative 152
## 7 positive 443
## 8 sadness 77
## 9 surprise 64
## 10 trust 270
nombres_sentimientos <- get_sentiment_dictionary("nrc", language = "spanish")
head(nombres_sentimientos)
## lang word sentiment value
## 1 spanish abba positive 1
## 2 spanish capacidad positive 1
## 3 spanish citada positive 1
## 4 spanish absoluto positive 1
## 5 spanish absolución positive 1
## 6 spanish absorbido positive 1
color_palette <- c("positive" = "#77DD77", "negative" = "#FF6961", "neutral" = "#B0C4DE",
"anticipation" = "#FFD700", "trust" = "#B3EE3A", "anger" = "#FF4500",
"fear" = "#9400D3", "surprise" = "#20B2AA", "sadness" = "#696969",
"disgust" = "#556B2F", "joy" = "#32CD32", "sadness" = "#696969")
# Etiquetas en español
labels_es <- c("Enojo", "Anticipación", "Disgusto", "Miedo", "AlegrÃa", "Negativo",
"Positivo", "Tristeza", "Sorpresa", "Confianza")
# Crear una gráfica de barras para visualizar los sentimientos
ggplot(lgbt_sentiment, aes(x = sentiment, y = n, fill = sentiment)) +
geom_bar(stat = "identity") +
labs(title = "Sentimientos (NRC) en Noticias LGBTI (2013-2023)",
x = "", y = "") +
scale_fill_manual(values = color_palette) +
scale_x_discrete(labels = labels_es) + # Cambiar las etiquetas del eje x
theme_minimal() +
theme(legend.position = "none")
theme_minimal()
## List of 97
## $ line :List of 6
## ..$ colour : chr "black"
## ..$ linewidth : num 0.5
## ..$ linetype : num 1
## ..$ lineend : chr "butt"
## ..$ arrow : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_line" "element"
## $ rect :List of 5
## ..$ fill : chr "white"
## ..$ colour : chr "black"
## ..$ linewidth : num 0.5
## ..$ linetype : num 1
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_rect" "element"
## $ text :List of 11
## ..$ family : chr ""
## ..$ face : chr "plain"
## ..$ colour : chr "black"
## ..$ size : num 11
## ..$ hjust : num 0.5
## ..$ vjust : num 0.5
## ..$ angle : num 0
## ..$ lineheight : num 0.9
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ title : NULL
## $ aspect.ratio : NULL
## $ axis.title : NULL
## $ axis.title.x :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 2.75points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.title.x.top :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 0
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 2.75points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.title.x.bottom : NULL
## $ axis.title.y :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : num 90
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 2.75points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.title.y.left : NULL
## $ axis.title.y.right :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 0
## ..$ angle : num -90
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 2.75points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : chr "grey30"
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.x :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 2.2points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.x.top :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : num 0
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 2.2points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.x.bottom : NULL
## $ axis.text.y :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 1
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 2.2points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.text.y.left : NULL
## $ axis.text.y.right :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 2.2points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ axis.ticks : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ axis.ticks.x : NULL
## $ axis.ticks.x.top : NULL
## $ axis.ticks.x.bottom : NULL
## $ axis.ticks.y : NULL
## $ axis.ticks.y.left : NULL
## $ axis.ticks.y.right : NULL
## $ axis.ticks.length : 'simpleUnit' num 2.75points
## ..- attr(*, "unit")= int 8
## $ axis.ticks.length.x : NULL
## $ axis.ticks.length.x.top : NULL
## $ axis.ticks.length.x.bottom: NULL
## $ axis.ticks.length.y : NULL
## $ axis.ticks.length.y.left : NULL
## $ axis.ticks.length.y.right : NULL
## $ axis.line : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ axis.line.x : NULL
## $ axis.line.x.top : NULL
## $ axis.line.x.bottom : NULL
## $ axis.line.y : NULL
## $ axis.line.y.left : NULL
## $ axis.line.y.right : NULL
## $ legend.background : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ legend.margin : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
## ..- attr(*, "unit")= int 8
## $ legend.spacing : 'simpleUnit' num 11points
## ..- attr(*, "unit")= int 8
## $ legend.spacing.x : NULL
## $ legend.spacing.y : NULL
## $ legend.key : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ legend.key.size : 'simpleUnit' num 1.2lines
## ..- attr(*, "unit")= int 3
## $ legend.key.height : NULL
## $ legend.key.width : NULL
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text.align : NULL
## $ legend.title :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.title.align : NULL
## $ legend.position : chr "right"
## $ legend.direction : NULL
## $ legend.justification : chr "center"
## $ legend.box : NULL
## $ legend.box.just : NULL
## $ legend.box.margin : 'margin' num [1:4] 0cm 0cm 0cm 0cm
## ..- attr(*, "unit")= int 1
## $ legend.box.background : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ legend.box.spacing : 'simpleUnit' num 11points
## ..- attr(*, "unit")= int 8
## $ panel.background : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ panel.border : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ panel.spacing : 'simpleUnit' num 5.5points
## ..- attr(*, "unit")= int 8
## $ panel.spacing.x : NULL
## $ panel.spacing.y : NULL
## $ panel.grid :List of 6
## ..$ colour : chr "grey92"
## ..$ linewidth : NULL
## ..$ linetype : NULL
## ..$ lineend : NULL
## ..$ arrow : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_line" "element"
## $ panel.grid.major : NULL
## $ panel.grid.minor :List of 6
## ..$ colour : NULL
## ..$ linewidth : 'rel' num 0.5
## ..$ linetype : NULL
## ..$ lineend : NULL
## ..$ arrow : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_line" "element"
## $ panel.grid.major.x : NULL
## $ panel.grid.major.y : NULL
## $ panel.grid.minor.x : NULL
## $ panel.grid.minor.y : NULL
## $ panel.ontop : logi FALSE
## $ plot.background : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ plot.title :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 1.2
## ..$ hjust : num 0
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 5.5points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.title.position : chr "panel"
## $ plot.subtitle :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 0points 0points 5.5points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.caption :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 0.8
## ..$ hjust : num 1
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 5.5points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.caption.position : chr "panel"
## $ plot.tag :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 1.2
## ..$ hjust : num 0.5
## ..$ vjust : num 0.5
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.tag.position : chr "topleft"
## $ plot.margin : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
## ..- attr(*, "unit")= int 8
## $ strip.background : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ strip.background.x : NULL
## $ strip.background.y : NULL
## $ strip.clip : chr "inherit"
## $ strip.placement : chr "inside"
## $ strip.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : chr "grey10"
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 4.4points 4.4points 4.4points 4.4points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ strip.text.x : NULL
## $ strip.text.x.bottom : NULL
## $ strip.text.x.top : NULL
## $ strip.text.y :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : num -90
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ strip.text.y.left :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : num 90
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ strip.text.y.right : NULL
## $ strip.switch.pad.grid : 'simpleUnit' num 2.75points
## ..- attr(*, "unit")= int 8
## $ strip.switch.pad.wrap : 'simpleUnit' num 2.75points
## ..- attr(*, "unit")= int 8
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi TRUE
## - attr(*, "validate")= logi TRUE
library(tidytext)
# Corpus y DTM FINAL
todas_las_noticias <- c(noticias_2018, noticias_2019, noticias_2020, noticias_2021, noticias_2022)
corpus_final <- Corpus(VectorSource(todas_las_noticias))
corpus_final <- tm_map(corpus_final, removeWords, stopwords("es"))
corpus_final <- tm_map(corpus_final, removeWords, palabras_eliminar)
dtm_final <- DocumentTermMatrix(corpus_final)
# 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: 99, terms: 8755)>>
## Non-/sparse entries: 23340/843405
## 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 1 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 1 0 10 0 0 0 0 5
## 4 2 3 2 8 0 0 2 16 1
## 45 0 5 0 5 0 0 0 11 5
## 80 0 5 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(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.")
}
library(tidytext)
# 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: 1201)>>
## Non-/sparse entries: 1718/52327
## Sparsity : 97%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt
## 1 0 5 0 1 0 0 2 2
## 10 0 0 0 0 0 1 0 0
## 2 0 4 9 12 6 0 3 4
## 3 0 3 0 0 1 0 2 2
## 4 0 6 5 0 5 0 2 0
## 5 0 1 0 0 3 0 2 0
## 6 0 0 0 2 0 0 3 1
## 7 0 1 0 1 0 0 2 3
## 8 0 0 0 0 0 1 0 0
## 9 0 0 0 0 0 1 0 0
## Terms
## Docs turismo txt
## 1 0 0
## 10 0 1
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
## 7 16 0
## 8 0 1
## 9 0 1
# 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: 1201)>>
## Non-/sparse entries: 1718/52327
## Sparsity : 97%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt
## 1 0 5 0 1 0 0 2 2
## 10 0 0 0 0 0 1 0 0
## 2 0 4 9 12 6 0 3 4
## 3 0 3 0 0 1 0 2 2
## 4 0 6 5 0 5 0 2 0
## 5 0 1 0 0 3 0 2 0
## 6 0 0 0 2 0 0 3 1
## 7 0 1 0 1 0 0 2 3
## 8 0 0 0 0 0 1 0 0
## 9 0 0 0 0 0 1 0 0
## Terms
## Docs turismo txt
## 1 0 0
## 10 0 1
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
## 7 16 0
## 8 0 1
## 9 0 1
# 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(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.")
}
##MODELADO AC
library(tidytext)
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: 75, terms: 9532)>>
## Non-/sparse entries: 37628/677272
## Sparsity : 95%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs color derechos género important miguel mujeres socialfeedcontainer
## 57 5 6 8 30 27 29 23
## 58 5 6 8 30 27 29 23
## 59 5 10 1 30 11 49 23
## 60 5 4 2 30 14 10 23
## 61 5 5 1 30 21 0 23
## 69 5 6 8 30 27 29 23
## 70 5 6 8 30 27 29 23
## 71 5 10 1 30 11 49 23
## 72 5 4 2 30 14 10 23
## 73 5 5 1 30 21 0 23
## Terms
## Docs socialfeedelement trans vida
## 57 5 72 17
## 58 5 72 17
## 59 5 0 16
## 60 5 0 12
## 61 5 0 7
## 69 5 72 17
## 70 5 72 17
## 71 5 0 16
## 72 5 0 12
## 73 5 0 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: 75, terms: 9532)>>
## Non-/sparse entries: 37628/677272
## Sparsity : 95%
## Maximal term length: 44
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs color derechos género important miguel mujeres socialfeedcontainer
## 57 5 6 8 30 27 29 23
## 58 5 6 8 30 27 29 23
## 59 5 10 1 30 11 49 23
## 60 5 4 2 30 14 10 23
## 61 5 5 1 30 21 0 23
## 69 5 6 8 30 27 29 23
## 70 5 6 8 30 27 29 23
## 71 5 10 1 30 11 49 23
## 72 5 4 2 30 14 10 23
## 73 5 5 1 30 21 0 23
## Terms
## Docs socialfeedelement trans vida
## 57 5 72 17
## 58 5 72 17
## 59 5 0 16
## 60 5 0 12
## 61 5 0 7
## 69 5 72 17
## 70 5 72 17
## 71 5 0 16
## 72 5 0 12
## 73 5 0 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(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.")
}