Generador de "palabras" al azar

Se presenta aquí una especie de juego. En primer lugar se investigan las principales combinaciones de vocal y consonante en las palabras de un cierto texto (en el script mostrado se trata de la novela Niebla de Miguel de Unamuno). En la segunda parte, se generan "palabras" al azar, en general sin significado alguno, pero que poseen la misma estructura vocal/consonante de las combinaciones de mayor frecuencia de aparición en el texto descargado.

#INICIO -------------------------
rm(list=ls(all=TRUE))

#Parámetros a elegir
n<-500; #Número n de palabras a elegir al azar del texto descargado, para detectar las principales estructuras vocal/consonante
m<-15; #Las m estructuras vocal/consonante que más frecuentemente aparecen
p<-20; #Número p de "palabras" aleatorias a generar siguiendo cada estructura

#Cargamos el paquete tidytext para conseguir que los datos de texto estén adecuadamente organizados
library(tidytext)
#Cargamos el paquete magrittr para poder usar la función %>%
library(magrittr)
#Cargamos el paquete dplyr para poder usar la función anti_join
library(dplyr)
#Cargamos el paquete gutenbergr para poder acceder a libros
library(gutenbergr)

#Descargamos el libro de Miguel de Unamuno en español "Niebla" (nº de ebook 49836)
niebla<-gutenberg_download(49836)

#Organizamos adecuadamente el texto descargado
tidy_niebla <- niebla %>%
unnest_tokens(word, text) %>%
anti_join(stop_words)
attach(tidy_niebla)

#Obtenemos n palabras al azar para analizar su estructura vocal/consonante
ind<-seq(2,length(word),round(length(word)/n,0)); ind<-ind[-1]
x1<-word[ind]
x1; #Son las n palabras elegidas al azar

#Transformamos las vocales en A, eliminamos los acentos y transformamos las consonantes en E
library(stringr)
x2<-str_replace_all(x1, "[aeiou]", "A")
x3<-str_replace_all(x2, "[áéíóú]", "A")
x4<-str_replace_all(x3, "[bcdfghjklmnñpqrstvwxyz]", "E")
x4; #Estas son las estructuras vocal/consonante (A/E) de las n palabras elegidas al azar

y1<-as.data.frame(table(x4));attach(y1)
y2<-y1[order(-Freq),]
z<-as.vector(y2$x4[1:m]); zz<-as.data.frame(z)
zz; #Estas son las principales estructuras vocal/consonante (A/E) que aparecen en el texto descargado

#En la segunda parte del script generamos p "palabras" al azar

vocal<-c('a','e','i','o','u')
consonante<-c('b','c','d','f','g','h','j','k','l','m','n','ñ','p','q','r','s','t','v','w','x','y','z')

#Función para elegir al azar una vocal:
VOCAL<-function(x) sample(vocal,x,replace=T)
#Función para elegir al azar una consonante:
CONSONANTE<-function(x) sample(consonante,x,replace=T)

W<-strsplit(z,""); WW<-W

X<-replicate(p,{
for (i in 1:length(W))
 {
   for (j in 1:length(W[[i]]))
     {
       if (W[[i]][j]=='A') W[[i]][j]<-VOCAL(1) else W[[i]][j]<-CONSONANTE(1)
     }
 }
WWW<-W
for (i in 1:length(WWW))
{
  WWW[[i]]<-paste(WWW[[i]],sep="",collapse="")
}
WW
WWW}
)
X; H<-t(as.matrix(X)); colnames(H)<-z
H; #"Palabras" generadas al azar
#FIN -------------------------

No hay comentarios:

Publicar un comentario