El presente documento tiene como objetivo analizar a través de un conteo de palabras y análisis de frecuencia las charlas.
Para este caso se hace el análisis de la charla “política e inteligencia artificial” impartida por Cristina Martínez y Fernando baños el 27 de octubre de 2020
Procesamiento del Lenguaje Natural
Esquema del Lenguaje Natural
Principales ecuaciones utilizadas
Si quisieramos incluir una ecuación en el texto sería de esta forma: \(E=mc^2\)
Si queremos incluir una ecuación para ilustrarla
\[ (1) E = mc^2 \] 1. Ecuación 1
Donde: E = Energía m = masa c = constante de la velocidad de la luz
Concepto de PLN
El Procesamiento del Lenguaje Natural o Natural Languaje Processing es el campo de conocimiento de la Inteligencia Artificial que se ocupa de la investigar la manera de comunicar las máquinas con las personas mediante el uso de lenguas naturales, como el español, el inglés o el chino.
Tipos de modelos
- Modelos Lógicos: gramáticas
- Modelos probabilísticos del lenguaje natural: basados en datos
Componentes del PLN
- Análisis morfológico o léxico
- Análisis sintáctico.
- Análisis semántico
- Análisis pragmático.
En el siguiente enlace pueden ver sus principales aplicaciones
Paquetes
library(pacman)
p_load("dplyr", "stringr", "ggplot2", "wordcloud","rmdformats","vembedr", "xfun")
Video de youtube de la charla:
embed_url("https://youtu.be/5PLw3Macsxs")
Funciones
FreqCategory <- function(value) {
strCategory <- ifelse(value <=5, " 5",
ifelse(value <=10, " 10",
ifelse(value <=20, " 20",
ifelse(value <=50, " 50",
ifelse(value <=100, " 100",
ifelse(value <=500, " 500",
ifelse(value <=1000, " 1,000",
">1,000")))))))
strCategory
}
Datos
politica <- readLines("politica.txt")
head(politica)
## [1] "también se está comenzando transmisiones"
## [2] ""
## [3] "en facebook live y todos ustedes"
## [4] ""
## [5] "bienvenidos"
## [6] ""
Conteo de lineas
# Longitud de vector
intLineCount <- length(politica)
intLineCount
## [1] 3182
Conteo de palabras por linea
# separar
lstUNPrfLines <- str_split(politica," ")
# palabras por linea
vciUNPrfWperL <- unlist(lapply(lstUNPrfLines, length))
# imprimir media de palabras por linea
mean(vciUNPrfWperL)
## [1] 3.495915
conteo total de palabras
# deslistar para obtener un vector de palabras
vcsUNPrfWords <- unlist(lstUNPrfLines)
# recuento total de palabras = longitud del vector
intWordCount <- length(vcsUNPrfWords)
# imprimir
intWordCount
## [1] 11124
Mostrar palabras
head(vcsUNPrfWords,100)
## [1] "también" "se" "está" "comenzando"
## [5] "transmisiones" "" "en" "facebook"
## [9] "live" "y" "todos" "ustedes"
## [13] "" "bienvenidos" "" "muy"
## [17] "buenas" "tardes" "a" "todos"
## [21] "sean" "" "bienvenidos" "en"
## [25] "dos" "momentos" "iniciamos" ""
## [29] "pues" "de" "nuevo" "buenas"
## [33] "tardes" "a" "todos" "y"
## [37] "" "todas" "en" "mi"
## [41] "nombre" "es" "lulú" "velasco"
## [45] "y" "" "formó" "parte"
## [49] "del" "equipo" "del" "instituto"
## [53] "de" "" "emprendimiento" "del"
## [57] "tec" "de" "monterrey" ""
## [61] "región" "occidente" "muchas" "gracias"
## [65] "por" "" "acompañarnos" "en"
## [69] "esta" "serie" "donde" "vamos"
## [73] "a" "" "platicar" "sobre"
## [77] "inteligencia" "artificial" "" "y"
## [81] "bueno" "antes" "de" "dar"
## [85] "inicio" "les" "comparto" ""
## [89] "que" "al" "finalizar" "la"
## [93] "sesión" "tendremos" "" "algunos"
## [97] "minutos" "de" "preguntas" "y"
limpieza de palabras
# lower case
vcsUNPrfWords <- str_to_lower(vcsUNPrfWords)
# remove numbers
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[[:digit:]]", "")
# remove punctuation
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[[:punct:]]", "")
# remove white spaces
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[[:space:]]", "")
# remove special chars
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="[~@#$%&-_=<>]", "")
# remove empty vectors
vcsUNPrfWords <- vcsUNPrfWords[vcsUNPrfWords != ""]
# hack & remove $
vcsUNPrfWords <- str_replace_all(vcsUNPrfWords, pattern="$", "")
# head
head(vcsUNPrfWords,100)
## [1] "tambiã©n" "se" "estã" "comenzando"
## [5] "transmisiones" "en" "facebook" "live"
## [9] "y" "todos" "ustedes" "bienvenidos"
## [13] "muy" "buenas" "tardes" "a"
## [17] "todos" "sean" "bienvenidos" "en"
## [21] "dos" "momentos" "iniciamos" "pues"
## [25] "de" "nuevo" "buenas" "tardes"
## [29] "a" "todos" "y" "todas"
## [33] "en" "mi" "nombre" "es"
## [37] "lulãº" "velasco" "y" "formã³"
## [41] "parte" "del" "equipo" "del"
## [45] "instituto" "de" "emprendimiento" "del"
## [49] "tec" "de" "monterrey" "regiã³n"
## [53] "occidente" "muchas" "gracias" "por"
## [57] "acompaã±arnos" "en" "esta" "serie"
## [61] "donde" "vamos" "a" "platicar"
## [65] "sobre" "inteligencia" "artificial" "y"
## [69] "bueno" "antes" "de" "dar"
## [73] "inicio" "les" "comparto" "que"
## [77] "al" "finalizar" "la" "sesiã³n"
## [81] "tendremos" "algunos" "minutos" "de"
## [85] "preguntas" "y" "respuestas" "que"
## [89] "podrãn" "compartir" "con" "nuestros"
## [93] "panelistas" "y" "posterior" "a"
## [97] "ellos" "serãn" "dirigidos" "a"
Data frame de palabras normales
# make data frame
dfrUNPrfWords <- data.frame(vcsUNPrfWords)
colnames(dfrUNPrfWords) <- c("Words")
dfrUNPrfWords$Words <- as.character(dfrUNPrfWords$Words)
# normal word count
head(dfrUNPrfWords,10)
## Words
## 1 tambiã©n
## 2 se
## 3 estã
## 4 comenzando
## 5 transmisiones
## 6 en
## 7 facebook
## 8 live
## 9 y
## 10 todos
Conteo de palabras normales
# resumiendo los datos
dfrUNPrfFreq <- dfrUNPrfWords %>%
group_by(Words) %>%
summarise(Freq=n()) %>%
arrange(desc(Freq))
head(dfrUNPrfFreq)
## # A tibble: 6 x 2
## Words Freq
## <chr> <int>
## 1 de 554
## 2 que 545
## 3 en 289
## 4 y 261
## 5 la 227
## 6 a 179
Nube de palabras normales
# nube de palabras
wordcloud(dfrUNPrfFreq$Words[1:100], dfrUNPrfFreq$Freq[1:100], random.order=F, max.words=100, colors=brewer.pal(8, "Dark2"))