Podemos utilizar las herramientas de minería de texto para analizar el contenido emocional del texto mediante programación
En el análisis de sentimiento se suelen distinguir dos grandes enfoques:
Enfoque léxico (basado en diccionarios)
Enfoque basado en clasificación automática
Enfoque léxico
Una forma de analizar el sentimiento de un texto es considerarlo como una combinación de sus palabras individuales y el contenido sentimental del texto completo como la suma del contenido sentimental de cada palabra. Se analiza el texto buscando qué palabras están en ese diccionario y se calcula un promedio de sentimiento
✅ Ventajas: fácil de interpretar, rápido, transparente.
❌ Desventajas: no capta contexto, ironía, negaciones o intensificadores (ej: “no está nada mal”).
Enfoque Clasificación Automática
Este segundo método usa técnicas de aprendizaje automático: se entrena un modelo con textos previamente clasificados por humanos (como “positivo”, “negativo”, “neutral”) para que aprenda patrones de lenguaje que predicen el sentimiento, incluso cuando no aparecen palabras explícitamente “positivas” o “negativas”.
✅ Ventajas: capta contexto, negaciones, matices.
❌ Desventajas: requiere muchos datos, mayor complejidad técnica y computacional.
1. LEXICONES
Los sentimientos
El paquete tidytext proporciona acceso a varios léxicos de sentimiento
Estos tres léxicos se basan en unigramas, es decir, palabras individuales. Contienen muchas palabras en inglés y se les asigna una puntuación según su sentimiento positivo o negativo, y también, posiblemente, emociones como alegría, ira, tristeza, etc
¿Qué pasa en español?
La mayoría de los modelos y paquetes de análisis de sentimiento están entrenados en inglés.
👉 Por eso, en esta clase:
Uno desarrollado por creado por Agustín Gravano del Laboratorio de Inteligencia Artificial Aplicada de la UBA
Dataset de German Rosati obtenido a través de scrapeo web
library(tidyverse)library(readr)library(janitor)url <-"https://raw.githubusercontent.com/gefero/tango_scrap/master/Data/Todo_Tango_letras_final.csv"tango <-read_csv(url) |>clean_names() |># Elimino los que no tienen letradrop_na(letra) reactable::reactable(head(tango))
library(highcharter)plot <-hchart(df_sentimiento,type ="bar",hcaes(y = valor, x = titulo, group = sentimiento_cat)) %>%hc_chart(inverted =TRUE) %>%hc_yAxis(title =list(text ="Sentimiento promedio"), min =1, max =3) %>%hc_exporting(enabled =TRUE) %>%hc_title(text ="Sentimiento promedio en letras de Celedonio Flores",align ='left',style =list(fontSize ="18px")) %>%hc_subtitle(text ="Clasificación con lexicón UBA") %>%hc_colors(unique(df_sentimiento$colores)) %>%hc_add_theme(hc_theme_flat())
Paso 8: Visualizamos
¿Qué pasa si usamos otro lexicon?
Originalmente desarrollado por Finn Årup Nielsen, AFINN es un lexicón de sentimientos que asigna a cada palabra un valor entero de sentimiento en una escala de -5 (muy negativo) a +5 (muy positivo).
El paquete stringdist ofrece una serie de métricas de distancia entre cadenas de texto. Estas permiten cuantificar cuán diferentes son dos secuencias de caracteres, ya sea para comparar palabras, nombres, textos o realizar tareas como deduplicación, corrección ortográfica o búsquedas aproximadas.