Quijote

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())

¿Dónde están aquellos caballeros andantes?

Pues precedidos del mi favorito de todos ellos, Felixmarte de Hircania, el del desnudo brazo, en

felixmarte

dentro del texto del Quijote. El código para obtener el gráfico anterior es

library(qdap)

quijote.raw <- readLines("http://www.gutenberg.org/cache/epub/2000/pg2000.txt",
    encoding = "utf8")

# es posible que necesites esto en Windows:
quijote <- iconv(quijote.raw, from = "utf8", to = "latin1")

quijote <- quijote[-(1:36)]
quijote <- quijote[-(37453:length(quijote))]

dispersion_plot(quijote, c("felixmarte", "amadís",
    "leandís", "bencimarte", "palmerín",
    "olivante", "tirante", "belianís",
    "gironcilio", "lisuarte", "esplandián",
    "roldán", "rodamonte", "florimorte", "platir",                            "tablante"))

Tenéis permiso mío para buscar otros términos en otros textos y ver qué pinta tiene la distribución.