Búsqueda de palabras en la RAE en línea de comandos

He fabricado un script (un lote de comandos) de bash shell en Linux para descargar y juguetear con búsquedas en la RAE, ya que resulta complicado pedir que tengan la deferencia de hacerla disponible para el público, como si la RAE fuese un organismo público pagado con dinero público.

Es el paso intermedio entre buscar una palabra y descargarme el diccionario completo palabra a palabra. Ahora toca hacer un pequeño programita que lo invoque para cada una de las palabras que tecleé para el proyecto de Isidoro Valcárcel Medina hace unos años y traiga sus definiciones.

Lo he llamado buscaenrae.sh.

Esta versión está modificada sobre la que publiqué hace unos días para subsanar errores relacionados con las palabras que contienen varias entradas/acepciones (no es lo mismo acepciones que entradas y soy consciente de ello, pero no es importante), así como para retirar las conjugaciones en los verbos.

#!/bin/bash

### FUNCIONES ÚTILES PARA EL PROGRAMA
# uso() Instrucciones del programa y salida en caso de error.
uso () {
  echo "Uso: $0 salida palabra"
  echo -e "\tsalida es un valor númerico que identifica:"
	echo -e "\t[0] para generar un archivo HTML con la respuesta"
	echo -e "\t[1] para generar un archivo TXT  con la respuesta"
	echo -e "\t[2] para generar una línea  TXT  con la respuesta"
  exit
}
f_verbos="00000_VERBOS.txt"
f_errores="00000_ERRORES.txt"

# CONTROL DE ENTRADA DE VARIABLES y ASIGNACIÓN
if [ $# -lt 2 ]
then
  # Reportar uso inapropiado
  uso
else
  salida=$1
  if [ $# -eq 2 ]; then
    palabra="$2"
  elif [ $# -eq 3 ]; then 
    palabra="$2 $3"
  elif [ $# -eq 4 ]; then 
    palabra="$2 $3 $4"
  elif [ $# -eq 5 ]; then 
    palabra="$2 $3 $4 $5"
  fi
  # echo "Palabra es #$palabra#"
fi

# CONSULTA DEL SERVIDOR de la RAE simulando ser uno de los diversos navegadores posibles
navegador=(
  "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1"
  "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:77.0) Gecko/20100101 Firefox/77.0"
  "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
)
rnd=`echo $(($RANDOM%${#navegador[@]}))` # Elegimos un navegador al azar
# Hacemos la petición a la web de la RAE
curl -s --user-agent "${navegador[$rnd]}" https://dle.rae.es/"$palabra" > ./"$palabra.html"

# PROCESAMOS EL ARCHIVO OBTENIDO (Cortamos, retiramos lo innecesario, etc)
# Si se trata de un verbo, quitar las conjugaciones
id_conjugacion="
" esunverbo=`grep -c "$id_conjugacion" ./"$palabra.html"` if [ $esunverbo -gt 0 ] then echo "$palabra es un verbo" >> $f_verbos # ELIMINAMOS la(s) CONJUGACIÓN(ES) sed -i "/${id_conjugacion}/d" ./"$palabra.html" fi # Si tiene más de una acepción (Calcular cuántas después de saber si es un verbo) id_acepcion="
" num_acepciones=`grep -c "$id_acepcion" ./"$palabra.html"` # Si no tiene acepciones, la palabra no existe. No continuamos. if [ $num_acepciones -eq 0 ] then echo "$palabra no se ha encontrado en la RAE" >> $f_errores rm "./$palabra.html" exit fi # PARTIR en $num_acepciones EL FICHERO $palabra.html" # acepciones y acepciones_fin son 2 arrays de líneas PRECISO CONVERTIRLOS a cortes[] acepciones=`grep -n "$id_acepcion" ./"$palabra.html"|awk -F":" '{print $1}'|sed ':a;N;$!ba;s/\n/ /g'` c=0 for i in $acepciones do let cortes[$c]=$(($i)) let c=$(($c+1)) done acepciones_fin=`grep -n "$id_acepcion_fin" ./"$palabra.html"|awk -F":" '{print $1}'|sed ':a;N;$!ba;s/\n/ /g'` c=0 for i in $acepciones_fin do let cortes_fin[$c]=$(($i)) let c=$(($c+1)) done # GENERA FICHEROS palabra.X.html por cada ACEPCIÓN for (( i=0; i<$num_acepciones; i++ )) do # echo "El comienzo del corte está en ${cortes[$((i))]}" # echo "El fin del corte está en ${cortes_fin[$((i))]}" sed "${cortes[$((i))]},${cortes_fin[$((i))]} !d" "./$palabra.html" > "./$palabra.$i.html" # Distintas salidas del programa, en función de la variable "salida" if [ $salida -gt 0 ] # Salida a modo TXT then w3m "./$palabra.$i.html" > "./$palabra.$i.txt" if [ $salida -gt 1 ] # En una sóla línea then sed ':a;N;$!ba;s/\n/ /g' "./$palabra.$i.txt"|sed 's/ / /g' > "./$palabra.$i.1linea" fi fi done # BORRAR indica si dejar o no los archivos que no se deseen como salida BORRAR=1 if [[ $BORRAR -eq 1 ]] && [[ $salida -gt 0 ]] then rm "./$palabra."*html if [ $salida -eq 2 ] then rm "./$palabra."*txt fi fi # SALIDA FORZADA exit

Las primeras pruebas las he realizado con la palabra palabra, como debe ser.

buscaenrae.sh 2 palabra

Haiku Generator

Hoy una amiga (que durante años ha sido una de las más dadaístas asistentes a los talleres de poesía que coordino) ha publicado en una red social, riéndose de ello como corresponde, que hay en internet un generador de haikus.

Es una cosa tan graciosa o tan patética (y no en un buen sentido) como el generador de ideas para blog del que hablé hace no mucho en este mismo blog.

Algo tremendo está pasando cuando alguien quiere recurrir a una máquina para realizar lo más humano posible, que es expresarse.

¿Son las máquinas las que están tratando de decirnos algo? ¿Está la amenaza de Skynet más cerca de cumplirse de lo que nos creemos?

Unos cuantos haikus generados casi aleatoriamente por esta vía:

Evil october.
A tropical, large sun flip
above the dollar

Nippy summertime
A domestic, grand pig soars
before the giraffe

Tearless christmastide
A gray, grand squirrel frightens
because of the net

Cabe preguntarse si a la palabra poesía, a la palabra arte, a la palabra creación, no habría que añadirles (implícitamente) la palabra sujeto humano, pues no es sólo una cuestión de forma, ni de contenido, sino de riesgo, de intención, de fracaso… las máquinas (y quienes deciden usarlas para generar ideas para un blog, para escribir «haikus» o similar) lo que buscan es el éxito, carente de riesgo y con una intención que no es la de explorar sino la de fabricar.

La escritura creativa (creación como actitud ante la vida, no como eslogan), la poesía, es una fábrica de errores, de insensateces, de locura, de interrogantes en última instancia, y no una máquina de exclamaciones, afirmaciones, verdades, corduras ni, nunca, éxito asegurado.

Ejemplar de prueba de Amapolas desde el balcón

Hoy he recibido el ejemplar de prueba del libro colectivo de este curso (atípico) que también ha resultado ser atípico como libro, pues es el primero que edito con solapas y he aprovechado para escribir un texto amable y merecido para las personas que lo han hecho posible.

PORTADA

CONTRAPORTADA

© Susana Olalla Serra, Dunia Ben-Aissi, Ester Morales García, Lucía Herrero Villazán, Inmaculada Sánchez Costa, Pablo Velado Pulido, Vanessa López, Irene Chacón, Paula García Izu, Armando Silles McLaney, Yolanda Jiménez, María José Gómez Sánchez-Romate, JMariano Velázquez, Isabel Jiménez Moreno, Javier Jiménez, Andrea Vidal Escabí, Francisco Domínguez Agudelo, Pepa Delgado, Sal Ander, María Jesús Orella, Anita Ges, Alejandro Gallego, Kay Woo, Ernesto Pentón Cuza y Leticia Rejas Rujas, 2020

SOLAPA

Amapolas desde el balcón es el título elegido este año para la edición de este libro colectivo que escriben con absoluta libertad las personas asistentes a los Talleres de Poesía y Escritura Creativa de la Asociación Cultural Clave 53. Es un título que hace referencia a unas amapolas que han surgido en las circunstancias más adversas posibles, en esos tiempos que dicen erróneamente no ser buenos para la lírica, amapolas que resisten los vapores sulfurosos de un cráter, que se erigen en emblema de esperanza que arrojar desde el balcón con la más cálida de las intenciones: Poner poesía en periodo prosaico y estadístico.

Gracias a las 25 personas que lo han hecho posible y han contribuido con su poesía a hacer del mundo un lugar mejor.

En la solapa de la contraportada he enumerado los libros que llevamos hechos en Clave 53 desde hace ya más de 13 años… y han sido bastantes, a uno por año, salvo una excepción. Una maravilla estar rodeado de gente tan interesante que confía en mí para guiar el proceso de exploración que culmina en un libro de poesía con el que regar el mundo.

CONTRASOLAPA

Mi web es una y es trina

A modo de taburete, la web en la que he estado trabajando desde primeros de marzo hasta ahora es una y es trina, sí, se trata de 3 patas que sustentan una especie de triunvirato que espero que no acabe tan mal como el famoso juliano.

La web Base

El esqueleto o lo que la aglutina es lo que llamo la base que está hecha casi «from scratch» en lo que se refiere al estilo, al aspecto, al comportamiento en diferentes dispositivos…

web base

El diario en WordPress.org

Sobre ella (o bajo ella, no sé) hay instalada una base de datos que gestiona, desde el 2011, mi diario, en el que escribo, como su nombre indica, casi diariamente, excepto en temporadas estivales o fiestas de guardar (el 1 de mayo o el 6 de diciembre).

De hecho, elegir el estilo del wordpress que la muestra me llevó gran parte del mes de marzo, hasta que di con una combinación de dos «themes» que me gustaban y de los que personalicé el definitivo, que pasó también a influir para unificar el estilo que usaría en las otras 2 patas de esta web trifásica.

web blog

La galería en Piwigo

Pero lo más sofisticado fue cuando decidí que no quería utilizar ninguna de las herramientas más habituales de gestión de álbumes de fotos o imágenes para almacenar el material visual que tenía (que había tenido previamente en picassa, luego en google-photos, o para el que había desarrollado o implementado «sliders» de javascript más o menos engorrosos).

Así que «inventé la rueda» instalando en mi hosting una aplicación llamada Piwigo (open source para más datos) que maneja y almacena las imágenes: la galería.

web galeria

Subirlas a ese espacio requerían, para no ser demasiado pesadas en término de tamaño de archivo, su procesamiento, reducción de resolución, renombrado para evitar caracteres especiales, minúsculas para homogeneizar, etc… que hice gracias a la programación, pues hablamos de más de 3000 imágenes.

Unificar estas tres componentes y que parezcan una sola web y no múltiples ha sido complejo, pero lo más difícil todavía fue revisar reordenar y modificar todo el trabajo que tenía más o menos mal documentado desde el 2008 (fecha de la última actualización importante de la web) hasta hoy.

12 años de trabajo que han sido fructíferos en términos de obra, de producción casi industrial, de proyectos complejos y largos… muchos de los cuales no habían visto la luz hasta hoy.

Ahora siento un alivio considerable y una extraña sensación de vacío, sigo teniendo material en curso, en lo que estoy trabajando que aún no está en esta web, pero ya sé dónde ponerlo cuando acabe.

En resumen:

  1. Marzo: Pruebas de personalización de temas de blog (con instalaciones en desarrollo sobre una raspberry, para no «romper» nada importante), así como elección de tipo de letra, colores…
  2. Abril: Ordenación de material visual, de documentación de acciones, revisión de trabajos pendientes de un final…
  3. Mayo: Creación de la base de datos Piwigo para almacenamiento de las imágenes. Elección y personalización del tema elegido. Por momentos, parece algo superfluo que se podría haber hecho agrupando esto con el Diario en WordPress.org, pero me resulta más fácil compartimentar.
  4. Junio: Creación de la web base. Generación de una plantilla dinámica, pero que no haga uso de javascript salvo en lo imprescindible sino que sea responsive y con animaciones pero exclusivamente basándome en estándares CSS3 y HTML5 (me encantan las etiquetas «semánticas»).

Han sido meses de confinamiento y agradezco (a mí mismo, supongo) haber tenido el tiempo para poder afrontar algo como esto que muchas de las veces, mientras lo estaba haciendo dudaba que tuviese el más mínimo sentido en esta época de red social y publicación en plantilla.

Espero que me dure el trabajo principal, si no una docena de años como la anterior web, por lo menos más de 5 años.

Amapolas en el Cráter

Desde la semana pasada, Clave 53 tiene una «emisora de radio 2.0», lo que comúnmente se denomina «podcast». Estamos emocionados con la propuesta y aquí incluyo el primer episodio de los que se irán realizando a raíz de uno diario y programando su emisión para que duren bastante tiempo, pero imagino que va a ser algo que me va a llevar mucho tiempo durante muchos años.

La idea partió de un verso de un alumno de los talleres y surgió en este periodo de confinamiento debido al coronavirus.

Todos los demás episodios pueden verse en Amapolas en el Cráter.

Amorfo

aeriforme, aloforma, anatiforme, anseriforme, apterigiforme, arboriforme, ardeiforme, autotransformador, biforme, bioinformático, ca, calamiforme, caliciforme, campaniforme, canceriforme, caradriforme, carniforme, casuariforme, catartiforme, cauliforme, ciconiforme, claviforme, cloroformar, cloroformización, cloroformizar, cloroformo, coleriforme, columbiforme, conformador, conformar, conforme, conformemente, conformidad, conformismo, conformista, coniforme, conquiforme, contrainforme, contrarreforma, cordiforme, corniforme, crateriforme, cruciforme, cuadriforme, cuculiforme, cuneiforme, dactiliforme, deformable, deformación, deformador, ra, deformante, deformar, deformatorio, ria, deforme, deformidad, deiforme, dendriforme, desconformar, desconformidad, desformar, desinformación, desinformar, digitiforme, disconforme, disconformidad, disformar, disforme, disformidad, diversiforme, ensiforme, epileptiforme, escamiforme, escutiforme, esfenisciforme, espiciforme, espongiforme, esteliforme, estrigiforme, estrucioniforme, falciforme, falconiforme, filiforme, flabeliforme, forma, formable, formación, formador, ra, formadura, formaje, formal, formaldehido, formaleta, formalete, formalidad, formalina, formalismo, formalista, formalización, formalizar, formalmente, formalote, ta, formante, formar, formatear, formateo, formativo, va, formato, formatriz, -forme, formenterano, na, formero, formiato, formica, formicante, formícido, da, formidable, formidar, formidoloso, sa, formol, formón, formoseño, ña, formulación, formular, formulario, ria, formulismo, formulista, fungiforme, fusiforme, galliforme, gaseiforme, gruiforme, inconformarse, inconforme, inconformidad, inconformismo, inconformista, indeformable, información, informado, informador, ra, informal, informalidad, informalmente, informante, informar, informático, ca, informativista, informativo, va, informatización, informatizar, informe, informidad, informulable, infundibuliforme, irreformable, lariforme, lotiforme, malformación, malinformar, mamiforme, multiforme, multiplataforma, papiriforme, paseriforme, pectiniforme, pelecaniforme, performance, periforme, piriforme, pisciforme, pisiforme, plataforma, pleuronectiforme, poliforme, preformación, preformismo, preformista, proforma, proteiforme, psitaciforme, reforma, reformable, reformación, reformado, da, reformador, ra, reformar, reformativo, va, reformatorio, ria, reformismo, reformista, reiforme, reniforme, sacciforme, semiforme, transformable, transformación, transformacional, transformador, ra, transformamiento, transformar, transformativo, va, transformismo, transformista, trasformable, triforme, tubuliforme, unciforme, uniformado, da, uniformador, ra, uniformar, uniforme, uniformemente, uniformidad, uniformizar, vermiforme, yodoformo

Poemas por la tarde

Cuando comenzamos a estar confinados, algunos de los grupos de whatsapp que creo y manejo cada curso con las personas asistentes a cada horario (un grupo por cada horario de talleres) se volvieron molestos con el volumen de recomendaciones y noticias bienintencionadas que hacía que el objetivo para el que fue creado el grupo se perdiese, pues son grupos de Talleres de Poesía y Escritura Creativa de la Asociación Cultural Clave 53.

poemas al whatsapp

Claro que hay que ser flexible a la hora de dejar que espacios comunes se autorregulen y no exagerar con las prohibiciones, así que dejé que poco a poco, sin alentar a nadie ni expulsar a nadie (menos aún cuando el acto de envío era informativo y no coercitivo), se fuese creando una desafección a esos mensajes, lo que tenía que ocurrir más tarde o más temprano, pues al fin y al cabo quien está en ese grupo no desea que el objetivo del mismo desaparezca, so pena de querer seguir en un grupo al que no se desea pertenecer.

Avisé de que borraba todo sin ni siquiera leerlo. Es decir, yo borraba (y borro) toda imagen y vídeo que me llegase al grupo, pero dejaba que otras personas hiciesen lo que deseasen, incluso, claro está, responder con otros vídeos o imágenes que contruibuían a generar más y más «ruido en las cabezas». Al fin y al cabo, quien quiere informarse, tiene a su alcance infinidad de canales donde conseguir esa información que se busca, amén de otros foros que desean recibir la información. Nunca ha sido más fácil obtener información. Pero esto supone el riesgo de sobreinformación, que no deja de ser una manera de desinformar, pues nos aleja de la calma necesaria para elegir sobre qué deseamos informarnos.

Así que recibí como una genial idea un verso de uno de los asistentes a uno de estos grupos que decía que «le encantaría recibir un poema cada tarde«… y lo hice mío como propuesta.

Me gustó la idea de llenar de otras cosas (distintas a las que estaban predominando) el grupo y ver quién o qué ganaba. Obviamente, en un grupo de Poesía, iba a ganar la batalla el poema, ese arma cargada de futuro…

Desde entonces, 23 de abril de 2020, el invento no para de crecer. Ahora son tres grupos, con un total de unas 15 personas leyendo un poema, más o menos, cada tarde directamente al WhatsApp, además haciéndome amigo de esa herramienta de «mensajes de audio» que tanto detesto, y, pasadas 3 semanas, tenemos más de 300 poemas leídos.

Cada par de días, descargo los audios recibidos en unas carpetas seleccionadas para ello y con este material estoy montando una emisora de podcast (una emisora de radio en terminología 2.0), en la que iré creando episodios semanales bajo la bandera de Clave 53 (e irán embebidos a la web de la Asociación Cultural Clave 53).

Es otro de esos proyectos surgidos al abrazo de esta cuarentena global que va a quedarse a partir del próximo periodo y a largo plazo. No es preciso estar encerrado entre cuatro paredes para que resulte precioso recibir media docena de poemas leídos con mimo cada tarde.

Aunque los tengo en marcha desde el 2010, otro de esos proyectos, por ejemplo, sería el de mantener y promover/promocionar Talleres de Poesía Online, con grupos de 4 a 8 personas, como los presenciales, pues ha demostrado ser una herramienta mucho más amigable de lo que era hace varios años cuando poco a poco fui desanimándome de usarla por los problemas técnicos que se manifestaban a cada sesión y que hacían que la clase no pudiese ir sobre poesía sino sobre cómo resolver incidencias informáticas varias. Una de las cosas que mucha gente ha aprendido durante estos duros meses claustrofóbicos es a manejarse con herramientas de vídeo-conferencias.

¿Fluye el tiempo o influye?

¿Fluye el fluido tiempo o es la vida un fluido en el cauce espacio-tiempo?

Desde el punto de vista relativista-mecano-cuántico (o eso), sería la segunda opción la respuesta a esta pregunta que quizá está absurdamente formulada, pues andan algo indefinidas las palabras tiempo y vida, e incluso cauce.

Así que no sé si merece la pena responder a estas cuestiones o tan sólo formularlas para divertirnos un rato jugueteando con el lenguaje.

Como en esta composición visual que relaciona palabras del mismo campo semántico y que hacen una velada referencia a esa gripe, «flu» en inglés, que nos tiene responsablemente confinados.

Añadiendo movimiento con CSS

Después de la actualización del «theme» de WordPress que realicé ayer en el entorno de producción, he comenzado lo que podríamos denominar el ajuste fino.

La verdad es que estoy fascinado con las posibilidades que tiene CSS3, como generar animaciones tan sencillamente como diciendo «trasládete de acá a allá«… más o menos. Es formidable y ya había hecho uso de ello en la web del proyecto La Consulta, especialmente en el apartado de mostrar el tamaño aumentado de las imágenes de los garbanzos contados cuando se pasa el ratón por encima.

Es tan tentador usarlo una vez que se conoce que puede acabar pareciendo un circo en el peor de los sentidos. De momento, sólo incorporaré alguna traslación de «cajitas» en el blog y cuando comience (que ya estoy a punto) a remodelar la web, usaré las mismas, además de intentar utilizar los mismos colores, así que lo he añadido a un archivo CSS llamado animaciones.css que estoy creando a partir de la fantástica herramienta encontrada en animista.net.

Me habría gustado utilizar «@import» en el CSS adicional dentro del tema de wordpress, pero parece que no es viable hacerlo, así que me obliga a tener duplicadas (con lo poco que eso me gusta) esas directivas tanto en el hueco que la edición del tema WordPress me permite, así como en el archivo CSS /estilos/animaciones.css de la raíz de mi web.

De momento, dejo el código que ha generado esta aplicación online en esta entrada, por si alguna vez vuelvo a necesitarla:

.slide-in-left {
    -webkit-animation: slide-in-left 3s both;
            animation: slide-in-left 3s both;}
.slide-in-right {
    -webkit-animation: slide-in-right 3s both;
            animation: slide-in-right 3s both;
}

/* ----------------------------------------------
 * Generated by Animista on 2020-5-8 11:22:35
 * Licensed under FreeBSD License.
 * See http://animista.net/license for more info. 
 * w: http://animista.net, t: @cssanimista
 * ---------------------------------------------- */

/**
 * ----------------------------------------
 * animation slide-in-left
 * ----------------------------------------
 */
@-webkit-keyframes slide-in-left {
  0% {
    -webkit-transform: translateX(-1000px);
            transform: translateX(-1000px);
    opacity: 0;
  }
  100% {
    -webkit-transform: translateX(0);
            transform: translateX(0);
    opacity: 1;
  }
}
@keyframes slide-in-left {
  0% {
    -webkit-transform: translateX(-1000px);
            transform: translateX(-1000px);
    opacity: 0;
  }
  100% {
    -webkit-transform: translateX(0);
            transform: translateX(0);
    opacity: 1;
  }
}
/**
 * ----------------------------------------
 * animation slide-in-right
 * ----------------------------------------
 */
@-webkit-keyframes slide-in-right {
  0% {
    -webkit-transform: translateX(1000px);
            transform: translateX(1000px);
    opacity: 0;
  }
  100% {
    -webkit-transform: translateX(0);
            transform: translateX(0);
    opacity: 1;
  }
}
@keyframes slide-in-right {
  0% {
    -webkit-transform: translateX(1000px);
            transform: translateX(1000px);
    opacity: 0;
  }
  100% {
    -webkit-transform: translateX(0);
            transform: translateX(0);
    opacity: 1;
  }
}

 

Esto no es una broma