Texto
¿De qué matriz son los "embeddings" una factorización?
Hoy, embeddings. Esto va de reducir la dimensionalidad de un espacio generado por palabras (procedentes de textos). Si a cada palabra le asignamos un vector índice (todo ceros y un uno donde le corresponde), la dimensión del espacio de palabras es excesiva.
La ocurrencia de algunos es asociar a cada palabra, $latex W_i$, un vector $latex w_i$ corto (p.e., 100) con entradas $latex w_{ij}$ a determinar de la manera que se explica a continuación.
Dónde están las letras
Inspirado en esto construí
usando como texto el Quijote y como código una versión mucho más simple y limpia que (aunque inspirado en) la del enlace original:
library(stringr)
library(plyr)
library(ggplot2)
raw <- readLines("http://www.gutenberg.org/cache/epub/2000/pg2000.txt")
# limpieza de encabezamientos
textfile <- raw[-(1:36)]
textfile <- text[1:which(text == "Fin")]
# en una única cadena
textfile <- paste(textfile, collapse= " ")
# limpieza
textfile <- str_to_lower(textfile)
textfile <- str_replace_all(textfile, "[[:punct:]]|[[:digit:]]", " ")
# selección de palabras
words <- unique(unlist(str_split(textfile, " ")))
words <- words[words != ""]
# recolección de estadísticas
res <- ldply(words, function(word){
tmp <- str_split(word, "")[[1]]
data.frame(word = word,
letra = tmp,
posicion = 1:length(tmp) / length(tmp),
stringsAsFactors = FALSE)
})
tmp <- table(res$letra)
tmp <- names(tmp[tmp > 10])
res <- res[res$letra %in% tmp,]
ggplot(res, aes(x = posicion)) +
geom_density(fill = "red") +
facet_wrap( ~ letra, scales = "free_y") +
ggtitle("Dónde aparece cada letra dentro de un texto (El Quijote)") +
ylab("proporción de aparicion") + xlab("% de la longitud de la palabra") +
scale_fill_brewer(palette = "Set1") + theme_minimal() +
theme(axis.ticks = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_blank(),
legend.position = "none",
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
Cortar una cadena por un caracter solo cuando no forme parte de una subcadena entrecomillada
Algunos usuarios del paquete pxR han avisado de un error de implementación. Según las especificaciones del formato de datos PC-Axis, las líneas de ese tipo de ficheros acaban en punto y coma (y no necesariamente en un salto de línea).
Así que era natural leer los ficheros íntegramente, concatenar sus líneas físicas y luego partirlas usando strsplit
para obtener las líneas lógicas.
Sin embargo, ciertos ficheros contienen descripciones (entrecomilladas) que contienen puntos y comas. Y eso produce caos.