Prueba para colorear palabras en un texto

Autor/a

Elio Lagunes-Díaz

Hice este código para colorear palabras en un texto, con base en el valor de la tf-idf o “frecuencia de término-frecuencia inversa de documento”, que es una medida numérica que expresa cuán relevante es una palabra para un documento en una colección, usada por los motores de búsqueda para encontrar documentos.

En este caso, meramente como ejercicio, sólo tomé algunas palabras al azar de una canción de Selena (Figura 2), y las coloreé con esta escala de colores (Figura 1):

Código: lectura de texto y escala de colores
library(ggplot2)
library(dplyr)
library(leaflet)

letra = "No me queda más Que perderme en un abismo De tristeza y lágrimas <br>  No me queda más Que aguantar bien mi derrota Y brindarte felicidad <br>  No me queda más Si tu regreso hoy sería Una imposibilidad  <br> Y esto que no era amor Lo que hoy niegas Lo que dices que nunca pasó <br> Es el más dulce recuerdo de mi vida <br> Yo tenía una esperanza En el fondo de mi alma <br> Que un día te quedaras, tú, conmigo <br>  Y aún guardaba una ilusión Que alimentaba al corazón Mi corazón que hoy tiene que verte como solo amigo <br>  Y aunque viví enamorada Y totalmente equivocada No me importa  <br>Porque esto sí fue amor Por mi parte, lo más lindo <br> El más grande amor Y aunque siempre lo renuncies para mí Fue lo más bello <br>"

data.frame(
  x = seq(.1,.9, by = 0.1),
  y = rep(1,9),
  colores = letters[1:9]) |>
  ggplot(aes(x, y, fill = colores)) + 
  geom_tile(colour = "black") + scale_fill_brewer(palette =  "YlGn") +
  theme_minimal() + 
  labs(y = "", x = "Tf-idf (importancia del término)") +
  theme(legend.position = "none", 
        axis.text.y = element_blank())
Figura 1: Escala de colores usada
Figura 2: La Reina en el Astrodome
Código: proceso del texto y colorear por la variable
ea = data.frame(letras = c("vivía", "alma", "conmigo", "ilusión", "bello", "renuncies",
                       "imposibilidad", "dulce", "abismo", "alimentaba", "amigo"), 
           valor = runif(11, min = 0, max = 1))
letras   = strsplit(tolower(letra), " ")
letrasdf = data.frame(letras = unlist(letras))
letrasdf = dplyr::left_join(letrasdf, ea)
pale     = leaflet::colorNumeric("YlGn", ea$valor*1.3, na.color = "#FFFFFF")

letrasdf$color = pale(letrasdf$valor)
texto = lapply(seq_along(letrasdf$letras), 
       function(x) { 
         sprintf('<i  style="background-color:%s;">%s</i>',letrasdf$color[x], letrasdf$letras[x] )    })
texto = paste(texto, collapse = " ")
htmltools::HTML( texto)
no me queda más que perderme en un abismo de tristeza y lágrimas
no me queda más que aguantar bien mi derrota y brindarte felicidad
no me queda más si tu regreso hoy sería una imposibilidad
y esto que no era amor lo que hoy niegas lo que dices que nunca pasó
es el más dulce recuerdo de mi vida
yo tenía una esperanza en el fondo de mi alma
que un día te quedaras, tú, conmigo
y aún guardaba una ilusión que alimentaba al corazón mi corazón que hoy tiene que verte como solo amigo
y aunque viví enamorada y totalmente equivocada no me importa
porque
esto fue amor por mi parte, lo más lindo
el más grande amor y aunque siempre lo renuncies para fue lo más bello