Procesamiento del lenguaje natural
Esquema del lenguaje natural
Concepto de PNL
El procesamiento de lenguaje natural, abreviado PLN —en inglés, Natural Language Processing, NLP— es un campo de las ciencias de la computación, de la Inteligencia Artificial y de la lingüística que estudia las interacciones entre las computadoras y el lenguaje humano.
Principales ecuaciones utilizdas
Si quisieramos poner una ecuación en el texto sería de testa forma: \(E=mc²\)
Paquetes
library(pacman)
p_load("dplyr", "stringr", "ggplot2", "wordcloud","rmdformats","vembedr", "xfun")## Installing package into 'C:/Users/OMAR/Documents/R/win-library/4.1'
## (as 'lib' is unspecified)
## Warning: unable to access index for repository http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/4.1:
## no fue posible abrir la URL 'http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/4.1/PACKAGES'
## package 'ggplot2' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\OMAR\AppData\Local\Temp\Rtmp2xK0iw\downloaded_packages
##
## ggplot2 installed
## Warning in p_load("dplyr", "stringr", "ggplot2", "wordcloud", "rmdformats", : Failed to install/load:
## ggplot2
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
setwd("~/EA")
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")) ## Descargas