library(knitr)
library(readr)
library(plotly)
El objetivo de este documento es mejorar en Wordle con mis amiguis.
# Carga de los datos
# Importado de https://github.com/javierarce/palabras/blob/master/listado-general.txt
palabras <- read_csv("listado-general.txt",
col_names = FALSE)
# Creo un suconjunto de palabras
set.seed(1925)
n <- 100
ix <- sample(dim(palabras)[1],size=n)
subconjunto_palabras <- palabras[ix,1]
Conteo de letras:
# Conteo de sĆlabas:
longitud <- sapply(subconjunto_palabras$X1,FUN=nchar)
Filtrado de las palabras de cinco caracteres:
# Filtrado de palabras de cinco letras
k <- 5
palabras_k_letras <- subconjunto_palabras$X1[longitud==k]
A continuación se separan las palabras de \(k\) letras en las letras que la componen. La idea es representar la palabra como un vector de cinco componentes:
# Palabras con ciertas vocales
romper_palabra <- function(palabra){
palabra_rota <- (strsplit(palabra, NULL)[[1]])
return(palabra_rota)
}
# Prueba de escritorio
romper_palabra(palabras_k_letras[1])
## [1] "i" "r" "a" "n" "Ć"
Ahora, el procedimiento anterior se aplica a todas las palabras de la muestra y se genera un dataframe que tiene \(k\) columnas (variables):
# Convierto las palabras de cinco letras en vectores de
# cinco componentes
ruptura_palabras <- Map(romper_palabra,palabras_k_letras)
# Guardo los vectores en un dataframe
palabras_en_letras <- data.frame(t(sapply(ruptura_palabras,c)))
Ahora se analiza la distribución de frecuencias para cada posición de las palabras de \(k\) letras:
# AnƔlisis de frecuencias
frecuencias <- apply(palabras_en_letras,2,table)
A continuación se analizan las frecuencias de las distintas letras en cada una de las posiciones de las palabras de cinco letras:
limpieza_caracteres_especiales <- function(palabra){
palabra <- gsub("Ć”","a",palabra)
palabra <- gsub("Ć©","e",palabra)
palabra <- gsub("Ć«","e",palabra)
palabra <- gsub("Ć","i",palabra)
palabra <- gsub("ó","o",palabra)
palabra <- gsub("Ćŗ","u",palabra)
palabra <- gsub("ü","u",palabra)
# palabra <- gsub(".","",palabra)
return(palabra)
}
# Cambio de mayĆŗsculas por minĆŗsculas:
palabras_minusculas <- sapply(palabras$X1,tolower)
# Conteo de letras de cada palabra:
longitud_todas <- sapply(palabras_minusculas,FUN=nchar)
# Filtrado de las palabras que tienen k letras:
palabras_k_letras <- palabras_minusculas[longitud_todas==k]
# Reemplazo de vocales con acentos por vocales sin acentos:
#
palabras_sin_caracteres_especiales <- vector(mode = "character",length = length(palabras_k_letras))
for (i in 1:length(palabras_k_letras)){
palabras_sin_caracteres_especiales[i] <- limpieza_caracteres_especiales(palabras_k_letras[i])
}
palabras_sin_caracteres_especiales <- unique(palabras_sin_caracteres_especiales)
#
# Conversión de palabras en vectores de k componentes (una letra, un componeente):
ruptura_todas_palabras_k_letras <- Map(romper_palabra,palabras_sin_caracteres_especiales)
# Almacenamiento de las palabras en un dataframe de k variables
# donde cada palabra es una fila:
palabras_en_letras <- data.frame(t(sapply(ruptura_todas_palabras_k_letras,c)))
# CÔlculo de las frecuencias de aparición de cada letra en cada posición:
frecuencias <- apply(palabras_en_letras,2,table)
# Ordenamiento de las frecuencias de cada posición de mayor a menor:
frecuencias_ordenadas <- lapply(frecuencias,sort.list,decreasing=TRUE)
Primera posición:
plot_ly(
x = names(frecuencias[[1]][frecuencias_ordenadas[[1]]]),
y = frecuencias[[1]][frecuencias_ordenadas[[1]]],
name = "Frecuencia primera posición",
type = "bar"
) |>
layout(xaxis = list(categoryorder = "total descending"),
title = "Frecuencias primera posición") -> fig1
fig1
Segunda posición:
plot_ly(
x = names(frecuencias[[2]][frecuencias_ordenadas[[2]]]),
y = frecuencias[[2]][frecuencias_ordenadas[[2]]],
name = "Frecuencia segunda posición",
type = "bar"
) |>
layout(xaxis = list(categoryorder = "total descending"),
title = "Frecuencias segunda posición") -> fig2
fig2
Tercera posición:
plot_ly(
x = names(frecuencias[[3]][frecuencias_ordenadas[[3]]]),
y = frecuencias[[3]][frecuencias_ordenadas[[3]]],
name = "Frecuencia tercera posición",
type = "bar"
) |>
layout(xaxis = list(categoryorder = "total descending"),
title = "Frecuencias tercera posición") -> fig3
fig3
Cuarta posición:
plot_ly(
x = names(frecuencias[[4]][frecuencias_ordenadas[[4]]]),
y = frecuencias[[4]][frecuencias_ordenadas[[4]]],
name = "Frecuencia cuarta posición",
type = "bar"
) |>
layout(xaxis = list(categoryorder = "total descending"),
title = "Frecuencias cuarta posición") -> fig4
fig4
Quinta posición:
plot_ly(
x = names(frecuencias[[5]][frecuencias_ordenadas[[5]]]),
y = frecuencias[[5]][frecuencias_ordenadas[[5]]],
name = "Frecuencia quinta posición",
type = "bar"
) |>
layout(xaxis = list(categoryorder = "total descending"),
title = "Frecuencias quinta posición") -> fig5
fig5
# Conteo de vocales en las palabras
conteo_vocales <- function(palabra){
cant_vocales <- sum(palabra %in% c("a","e","i","o","u"))
return(cant_vocales)
}
# Conteo de vocales Ćŗnicas en las palabras
conteo_vocales_unicas <- function(palabra){
cant_vocales <- sum(unique(palabra) %in% c("a","e","i","o","u"))
return(cant_vocales)
}
Frecuencia de la cantidad de vocales en las palabras:
cantidad_vocales <- apply(palabras_en_letras,1,FUN=conteo_vocales)
print(table(cantidad_vocales))
## cantidad_vocales
## 0 1 2 3 4
## 1 32 3204 1505 13
Frecuencia de la cantidad de vocales Ćŗnicas en las palabras:
cantidad_vocales_unicas <- apply(palabras_en_letras,1,FUN=conteo_vocales_unicas)
print(table(cantidad_vocales_unicas))
## cantidad_vocales_unicas
## 0 1 2 3 4
## 1 836 3070 842 6
Palabras con cuatro vocales Ćŗnicas:
row.names(palabras_en_letras[cantidad_vocales_unicas==4,])
## [1] "aguio" "aireo" "aqueo" "audio" "acueo" "aureo"
Con este listado se puede maximizar la probabilidad de encontrar cuĆ”les vocales hacen parte de la palabra del dĆa.
La prueba se harĆ” con la palabra del 15 de febrero de 2022.
Se prueba con la palabra āAIREOā:
imagen de prueba
condicion <- palabras_en_letras[,2]=="i" &
!(palabras_en_letras[,1] %in% c("a","r")) &
!(palabras_en_letras[,3] %in% c("a","r")) &
!(palabras_en_letras[,4] %in% c("a","r","e")) &
!(palabras_en_letras[,5] %in% c("a","r","o")) &
("o" == palabras_en_letras[,1] | "o" == palabras_en_letras[,3] | "o" == palabras_en_letras[,4]) &
("e" == palabras_en_letras[,1] | "e" == palabras_en_letras[,3] | "e" == palabras_en_letras[,5])
palabras_filtradas <- palabras_en_letras[condicion,]
Palabras obtenidas:
print(palabras_filtradas)
## X1 X2 X3 X4 X5
## jiote j i o t e
## miope m i o p e
## oible o i b l e
imagen de resultado
Fin