Un número son palabras

Qué mejor demostración de que un número son palabras que un traductor de números a palabras, así, tan absurdo como este que intenta transformar los números (dígitos) en palabras, especialmente orientado a crear un libro con las palabras de unos cuantos (indeterminados) decimales de números irracionales, pues hay pocas cosas más irracionales que este proyecto absurdo.

/********************************************************
    Proyecto tres14 (escrito en C)
    realizado por Giusseppe Domínguez
    a partir del día 8 de diciembre de 2019
********************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#define OK 1
#define KO 0
#define MAX_LONG 10 // Longitud máxima de nombre de dígito

int firma();
int digitea(char caracter);
int nombranumero(int idioma, char caracter, char *nombre);
int instrucciones(char *comando);

int main(int argc, char *argv[])
{
  int i, idioma=0;
  char nombrenumero[MAX_LONG], caracter;
  FILE *fp;
 
  if ((argc < 2) || (argc > 3)) { instrucciones(argv[0]); } // Faltan argumentos
  else if (argc == 2) { // Número desde línea de comando
    for (i=0; i<strlen(argv[1]); i++) {
      caracter=argv[1][i];
      if(! nombranumero(idioma, caracter, nombrenumero)) { instrucciones(argv[0]); return KO; }
      puts(nombrenumero);
    }
  }
  else if (argc == 3) { // Número en fichero argv[2]
    if ( (! isdigit(argv[1][0])) || ((idioma = digitea(argv[1][0])) > 1) ) {
      printf("[ERROR] No conocemos el idioma: %s\n", argv[1]);
      instrucciones(argv[0]);
    } 
    else if ((fp = fopen(argv[2],"r")) == NULL) {
      printf("[ERROR] intentando abrir el archivo %s\n", argv[2]);
      instrucciones(argv[0]);
    }
    else {
      while ((caracter = fgetc(fp)) != EOF) {
        if (caracter != '\n') { // Ignoramos los saltos de línea
          if (! nombranumero(idioma, caracter, nombrenumero)) { instrucciones(argv[0]); return KO; }
          printf("%s ", nombrenumero);
        }
      }
    }
  }
  printf("\n");
  firma();
  return OK;
}


/******************************************
  La función instrucciones hace lo que su nombre
  indica: Imprime las instrucciones del programa.
******************************************/
int instrucciones(char *comando) {
    printf("\nUtilización: %s [número_positivo] [idioma fichero]\n\n", comando);
    puts("Si introducimos un nombre de fichero, el primer parámetro indica el idioma");
    puts("Idioma puede ser:");
    puts("\t0 - Español");
    puts("\t1 - Inglés");
}

/******************************************
  La función nombranumero nombra el número
  contenido en el caracter (si procede, claro)
  y devuelve error si no lo consigue.
  idioma = 0 (español)
           1 (inglés)
******************************************/
int nombranumero(int idioma, char caracter, char *nombre) {
  int digito;
  static int nomascomas=0; // Para no encontrar más de una coma en un argumento
  // char *numeros[] = { "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve" };
  char *numeros[2][MAX_LONG] = {
    { "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve" },
    { "zero", "one", "two", "three", "for", "five", "six", "seven", "eigth", "nine" }
  };
  char *coma[] = { "coma", "point" };

  if ((caracter == ',') || (caracter == '.')) {
    strcpy(nombre, coma[idioma]);
    if (++nomascomas > 1) {
      printf("Un número no puede tener más de una coma\n");
      return KO;
    }
    return OK;
  }
  else if (isdigit(caracter)) {
    digito = digitea(caracter);
    strcpy(nombre, numeros[idioma][digito]);
    return OK;
  }
  printf("[ERROR] |%c| No es un caracter válido en un número positivo\n", caracter);
  strcpy(nombre, "ERROR");
  return KO;
}
/******************************************
  La función digitea devuelve un número entero
  a partir del caracter (char) proporcionado
******************************************/
int digitea(char caracter)
{
  int digito;
  digito = (int) (caracter + '0');
  digito -= 96;
  return digito;
}


int firma()
{
  time_t tiempo = time(0);
  struct tm *tiempolocal = localtime(&tiempo);
  char txt_firma[128];
  strftime(txt_firma,128,"\nGiusseppe Domínguez, a las %H:%M. M-%Y%m%d\n",tiempolocal);
  printf("%s\n",txt_firma);
  return OK;
}

Diccionario RAE Completo

He decidido dar por concluida la ordenación del Diccionario de la RAE, que me descargué con el programa buscaenrae.sh y el programa descargarae.sh hecho para la ocasión y que leía el archivo con la lista de palabras (al que impropiamente denominaba diccionario), para descargar, una a una, las páginas correspondientes.

Todo partió del trabajo que realicé para el proyecto del Diccionario Personal de Isidoro Valcárcel Medina, en 2015.

Ahí nos encontramos con la negativa de la RAE a ceder el diccionario en modo digital, así que tuve que teclear las entradas del mismo a lo largo de más de 3 meses. Finalmente, acabé teniendo una lista de 90940 palabras, algunas de las cuales eran acepciones repetidas. Si quitábamos las palabras que tenían más de una acepción y que estaban en el archivo etiquetadas con un número 1,2,… según procediera, nos quedaban 88296 palabras (debería llamarlas «entradas»).

Por supuesto, estaban plagadas de errores:

  1. En primer lugar los propios de tecleo.
  2. En segundo lugar (oh, my god!) tenía incluidas en mi colección las palabras que Isidoro había decidido incluir en su diccionario personal independientemente de las que hubiera en el de la RAE.
  3. En tercer lugar (y esto resultó ser lo peor), muchas palabras han «desaparecido», pues la entrada no corresponde a la palabra… por ejemplo, la palabra «poeta, tisa», no está en el diccionario sino en «poetisa», así que la palabra poeta no se encuentra en la RAE como tal.

Así que el programa contemplaba la necesidad de decirme si tal o cual palabra no estaba en el diccionario de la RAE (en la versión online)

Actualización 2020
La Real Academia Española (RAE) y la Asociación de Academias de la Lengua Española (ASALE) han emprendido ya las tareas de redacción de la nueva edición de su Diccionario de la lengua española (DLE), que tendrá las características fijadas en la planta aprobada por todas las Academias de ASALE. Con el objetivo de que el desarrollo de esa nueva edición, forzosamente lento, no retrase la inclusión de nuevas palabras y acepciones ni la modificación de las ya incorporadas que necesiten enmienda, se ha optado por publicar estas actualizaciones anualmente.

La que ahora se pone a disposición de todas las personas interesadas recoge las modificaciones aprobadas por todas las Academias en 2020 y tendrá la consideración de versión electrónica 23.4.

Ya de paso, como podía hacerlo, me informé de si la palabra que estaba consultando era o no conjugada, lo que significaba que era un verbo. Un bonito plus que no esperaba.

Con la lista de errores generada, fui revisándolas palabra a palabra, las 1245 entradas no encontradas, entre las que estaban, ni más ni menos: poeta.

Así que a lo largo de los últimos meses del 2020 fui dejándome los ojos para ir revisando esos errores y fabricando una lista de palabras que se corresponda lo más posible con la «oficial» de la RAE.

Ha quedado una lista de 88024 «entradas» que se corresponden con 90452 palabras (ya teniendo en cuenta que algunas entradas o vocablos tienen varias palabras (a veces me confundo y denomino a eso acepciones).

Una vez corregida y revisada, aunque asumo aún un error considerable que no puedo prever, tengo la posibilidad de descargar el diccionario completo palabra a palabra con el programa buscaenrae.sh

 

#!/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="<div 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="<article id="
id_acepcion_fin="<\/article>"
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

 

Este programa era invocado con el siguiente miniprogramita que, leyendo de la lista de palabras corregidas que, impropiamente, denominé diccionariosinrepes.txt, obtiene las diversas, impropiamente denominadas, acepciones y las separa en 90452 archivos de una única línea.

#!/bin/bash

### FUNCIONES ÚTILES PARA EL PROGRAMA
# uso() Instrucciones del programa y salida en caso de error.
uso () {
  echo "Uso: $0 [diccionario]"
  exit
}

# CONTROL DE ENTRADA DE VARIABLES y ASIGNACIÓN
if [ $# -gt 1 ]
then
  # Reportar uso inapropiado
  uso
elif [ $# -eq 1 ]
then
  diccionario=$1
else
  diccionario=diccionariosinrepes.txt
fi

while IFS= read -r line
do
  buscaenrae.sh 2 $line
done < $diccionario

Descargadas y archivadas en una estructura de carpetas obvia:

dict -> LETRA

Se pueden reordenar o «recompilar» en una LETRA, con sus definiciones incluidas, sin incluir, etc…

Lo hago usando otro script simple:

#!/bin/bash

# El diccionario completo está por acepciones en las carpetas
# dict/LETRA
# Cada acepción (en realidad entrada en el diccionario) tiene
# un archivo denominado PALABRA.N.1linea conteniendo su definición.
# (donde N es el número de acepción contando desde cero)

letras="A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z"
for letra in $letras
do
  ls dict/$letra > dictporletra/$letra.archivos.txt
  awk -F"." '{print $1}' dictporletra/$letra.archivos.txt > dictporletra/$letra.acepciones.txt
  ls dict/$letra/*.0.1linea |awk -F"/" '{print $3}'|awk -F"." '{print $1}' > dictporletra/$letra.sinrepes.txt
  cat dict/$letra/* > dictporletra/$letra.definiciones.txt
done

cat dictporletra/*.archivos.txt > DICCIONARIO_TOTAL.archivos.txt
cat dictporletra/*.acepciones.txt > DICCIONARIO_TOTAL.acepciones.txt
cat dictporletra/*.sinrepes.txt > DICCIONARIO_TOTAL.sinrepes.txt
cat dictporletra/*.definiciones.txt > DICCIONARIO_TOTAL.definiciones.txt

Pero queda por resolver un problema que me tiene algo martirizado desde hace meses y es que la ordenación es muy compleja realizarla, pues muchas entradas en el diccionario son dobles, como «ad hoc», pero las definiciones descargadas incluyen líneas que son del tipo: «i Escrito con…» y desde el punto de vista del uso del comando sort, es más o menos lo mismo que decir que si quiero ordenar las primeras como «adhoc», la «iEscrito» se sale de su lugar.

He ordenado muchas manualmente sobre esta compilación, pero es un trabajo absolutamente aberrante y seguro que se puede hacer mejor, así que de momento he decidido dejar de trabajar en esto y dar por cerrado este proyecto que, en realidad, es la puerta de entrada a muchos otros.

Espero que el orden no sea algo tan terrible en esos otros proyectos venideros.

Dejo a disposición pública el Diccionario Completo que he generado de esta manera, con la estructura de carpetas generada, así como los programas utilizados para su procesamiento.

RAE-COMPLETO.tar

Exposiciones temporales en mi estudio

Carmen me propuso la brillante idea de exponer obra propia temporalmente en mi sala. Es algo que había pensado en ocasiones, lo de tener más obra en las paredes de mi estudio para que tenga algo de visibilidad y genere curiosidad, pero he de reconocer que me resistía a clavar en las inmaculadas paredes del lugar. Aún le tengo mucho respeto al espacio y además me reconozco tremendamente torpe.

Elegí esta pared para colocar 4 paneles de cartón pluma negros de 50x70cm, de un grosor de 5mm que me sobraron (aún me quedan otros 6) de la Exposición en Dados Negros que todavía no ha podido tener lugar, dada la situación, desde la primavera del 2020, y ha pasado un año.

Sólo tenía clavos «reciclados» de ocasiones en las que he ido recogiéndolos de muebles o trastos que tenía guardados en un viejo bote de conservas dentro de una caja de galletas. Algo de miedo por si no se clavaban bien en la pared y se descascarillaba o qué sé yo, amén de la posibilidad de contraer el tétanos o similar si me pinchaba con esos utensilios parcialmente oxidados, como yo.

A 135 centímetros del suelo clavé dos clavos a una distancia de unos dos metros, recordando el tema de los dos metros de distancia para evitar contagios pero también la serie de dos metros bajo tierra (6 feet under). Uní ambos clavos con un hilo de cáñamo grueso que me sirviera de guía. Ha sido una brillante idea, pues a ojo habría sido un desastre.

Me lavé las manos con jabón, también con gel hidroalcohólico, por ver si se resecaban y dejaba de sudar. Bajé la temperatura, me quité el forro polar, me remangué para que las mangas no me estorbaran.

Alineados por abajo con el cáñamo guía, fui clavando los paneles de uno en uno comenzando por la derecha, el más próximo a la ventana, que era el que menos problemas me daría… y el primer clavo ya se me torció.

Me había asegurado de que la distancia al borde de la pared fuese de 5 centímetros tanto por arriba como por abajo de la plancha, pero entonces me di cuenta de que, no sé cómo ni por qué, había dejado lejos el martillo que había cogido prestado a mis compañeros de Costanilla, así que hube de dejar la plancha de nuevo sobre la mesa para volver a repetir toda la operación con el martillo en un bolsillo y las manos sudorosas otra vez.

Después de casi una hora, ha quedado muy bonito y me da pena ir a «ensuciar» esa monocromía con lo que sea que ponga. Hay algo mágico en el negro mate que me fascina.

Quitar los clavos que hicieron de guía no ha sido dificilísimo, pero tampoco trivial y en el de la izquierda, que es el primero que puse, ha quedado un pequeño boquete en la pared que quizá tendré que reparar, aunque no sea muy visible.

¡No sé ni clavar un clavo!

Este primer clavo que se me resistió quedó torcido por arte de magia. Y no sería el último. Pero la verdad es que seguro que si lo quito y pongo otro nuevo no quedará mucho mejor, porque el roto sobre el foam ya está hecho.

Lo que me molesta sin que sea algo que yo pueda atribuir a mi torpeza es la imperfección de lo analógico, el hecho, por ejemplo, de que las planchas iguales de 50x70cm no son exactamente iguales, es decir, tienen diferencias de un par de milímetros, lo que no es más que un error del 0,29%, aproximadamente, pero esas cosas me inquietan… imagino un mundo en el que las paralelas no se corten más que en el infinito y me doy cuenta de que Euclides no aplica, ni tan siquiera Arquímedes.

Las paredes no son completamente planas (¡oh, qué sorpresa!), ni las planchas tampoco, así que en una extensión de 70cm, se han producido arqueamientos que hacen que se aprecien casi a simple vista las separaciones entre las mismas. Estuve incluso mirando la posibilidad de comprar para la próxima ocasión una plancha más grande de un tamaño de 100x200cm directamente y ahorrarme tanta medición. Pero no quería despreciar el material que ya tenía adquirido y que no sé si alguna vez volveré a utilizar.

Ahora toca «vestir» el tablón negro con esas exposiciones más o menos temporales que ir colocando con chinchetas sobre el mismo para no taladrar la pared con infinitos pequeños agujeritos.

¿qué ha cambiado y qué ha permanecido inalterable?

En uno de los grupos de los Talleres de Poesía y Escritura Creativa de la Asociación Cultural Clave 53 que defiendo desde hace 2 décadas, han lanzado un formulario del que me he arrogado la siguiente pregunta para contestarla de la mejor manera que he podido:

¿De nuevo, el grupo poético dirigido por Giusseppe Domínguez publicáis un ramillete de poemas. Desde la última entrega, ¿qué ha cambiado y qué ha permanecido inalterable?

A pesar de la pandemia, la poesía resiste, a pesar de las crispaciones, la poesía resiste, a pesar de las penurias económicas, la poesía resiste… y nos ayuda a resistir.

Nos encontramos con más intensidad, aunque con menos proximidad, nos encontramos en la palabra, aunque no en el aliento, nos encontramos con la lujuria típica de la creación poética, como siempre, pero sin las mismas posibilidades de consumación.

Nos permite sentir cierta inalterabilidad, cierta normalidad, en mitad de un mar de incertidumbre, nos permite sentir cierta incertidumbre y aprehenderla desde la creación, desde la recreación, desde un recreo semanal que nos libera de la dureza de la cotidianeidad.

Es una fantasía. Es una realidad. Nada ha cambiado. Todo ha cambiado.

Seguimos escribiendo y confiando en que la poesía nos enriquezca, sabiendo que no es la finalidad de la poesía, que es libre y rica per sé.

Los libros no se pueden presentar físicamente y sin embargo llegan a todos los rincones, colándose subrepticiamente por las grietas del muro a derribar: amapolas que han crecido en las circunstancias más hostiles posibles. Pero así es la poesía: resistente, resiliente, si se prefiere, superviviente, sobreviviente, pues aumenta la vida, la realidad, en una sobrerrealidad (surrealista o no), una realidad ampliada, una vida expandida, un espasmo del espacio-tiempo que habitar infinitamente (sin fin) hasta el fin.

Nos encontramos toda lectura con ecos de tristeza, nostalgias, pérdidas, pero nuestra escritura brilla con optimismo, con esperanzas, con afán de diversión, no por escapismo, sino por revolución: no hay nada más revolucionario que la lucha a la contra, batalla silenciosa y perdurable, que lleva a cabo incontables microacciones que modifican el entorno, que aportan lo que creemos necesario a nuestro alrededor, que construyen lo que queremos que sea un futuro (con ese arma cargada) e incluso perfilan un presente diferente al programado en las cadenas de televisión, en la prensa, en la simpleza del click.

Nada ha cambiado. Todo ha cambiado.

Seguimos escribiendo de cara a un futuro que se construye a nuestro paso, haciendo camino, que diría el ínclito poeta castellano que vivió peores épocas que la nuestra.

Seguimos inmersos en un presente siempre poco amigo de la lírica y, sin embargo, agradecido a su existencia.

Nada ha cambiado. Todo ha cambiado.

Nos vemos tras pantallas para escribir poesía, hablar de poesía, leer poesía, vivir poesía, ser poesía y, en un futuro, porque habrá futuro, igual que habrá poesía, publicar poesía, otro ramillete de poemas con los que perfumar el diverso universo.

qrqrqrqr de Carmen de la Rosa

Carmen de la Rosa

Entre los zapatos de cristal,
rosas de hielo
se me ha congelado el alma, cristalina
de azul fuego

Llegó anunciada de antaño y estaño vs. deambulando
por cúmulos de arena y brisa de seda
recia
crujiendo cobarde, de la rectitud al desplome y entre versos de longevas dinastías se alzó, como una sirena que atisba un barco desde su océano infinito.

Cuan si fuese poetisa, diosa del infinito
emergió

Y mientras la tinta,
negra,
de punta a punta
y gota a gota, se clavaba en edificios de mármol,
las palabras se deshacían.
La sal en el agua
y en la tierra sucumbieron.
La luz de la manta que me cobijaba se llenó de langostas
SÍ!
SÍ!
SÍ!

Y dándome cuenta las notas, la música, las campanas y el latido se hicieron una en el silencio.

Recibido desde su página personal el día 15 de enero de 2020, tras terminar la edición online del libro qrqrqrqr. Quizá aún dé tiempo de incluirla en la versión en papel.

qrqrqrqr

Libro de códigos QR y poemas escritos y enviados desde una dirección URL generada para la ocasión por 33 diferentes poetas.

En las ocasiones donde el o la poeta no hicieron llegar sus textos, se ha optado por dejar la referencia a la página web en cuestión por si alguien quiere tomar el relevo y enviar algún poema en su nombre de cara al futuro.

Como todo proyecto de arte postal, es una botella lanzada al océano que, en más ocasiones de las esperadas, regresa con provisiones para aguantar la vida.

Giusseppe Domínguez les propuso a 33 personas participar en este libro enviándoles por correo postal un código QR impreso sobre hojas de una edición de Las Flores del Mal, de Baudelaire, que redireccionaba a una página que contenía un formulario personalizado así como un código QR con el nombre de la persona invitada a formar parte del proyecto.

El libro contiene los QR personalizados para cada poeta, así como los poemas de aquellas personas que cumplimentaron sus formularios poéticos con un poema.

Marujo o Maruja

Sigo repasando los errores que cometí durante la transcripción de las palabras del diccionario, lo que ha de hacerse error a error a lo largo de las más de 1000 palabras que no fueron detectadas por el programa que hice para descargar de la web de la RAE las definiciones.

Muchas de ellas simplemente no es que sean errores, sino cambios en el criterio de archivo online, así, por ejemplo, «LOS» ahora es «LAS» y no la encuentra (mi programita), pero está en el diccionario y no es ningún error.

Tampoco lo era maruja que hasta la XXIII edición no contemplaba el masculino y que, sin embargo, en esta XXIV edición (que es contra la que estoy revisando esa lista de palabras que yo tecleé a partir del diccionario en papel conteniendo la vigésimo tercera) aparece bajo «marujo«, aunque la definición en poco o nada ha cambiado y sigue siendo una de esas palabras que demuestran que el machismo está impregnado en lo más hondo que tenemos, que es el lenguaje:

marujo, ja Hipocorístico del n. p. María.

1. f. despect. coloq. Esp. Mujer que se dedica solo a las tareas domésticas y a la que suele asociarse a ciertos tópicos como el chismorreo, la dependencia excesiva de la televisión, etc. U. t. c. adj.

2. m. irón. coloq. Esp. Hombre que actúa como una maruja (? mujer que se dedica solo a las tareas del hogar). U. t. c. adj.

3. m. y f. despect. coloq. Esp. Persona chismosa. U. m. c. adj.

4. adj. despect. coloq. Esp. Propio o característico de las marujas o de los marujos.

No hay por dónde arreglar esto en el diccionario y que hayan cambiado de «maruja» a «marujo» la entrada correspondiente no es algo que considere ni mínimamente inclusivo.

Otras palabras en esta pequeña aventura de definiciones poco simétricas desde el punto de vista del género son:

manijero. Tb. manigero.

Del fr. ant. maisnagier.

1. m. Capataz de una cuadrilla de trabajadores del campo.

2. m. Hombre encargado de contratar obreros para ciertas faenas del campo.

De esto, obviamente, no se encarga una mujer, así que no es necesaria manijera.

O la poco usada:

lembario. De lembo.

1. m. Soldado que combatía a bordo de los bajeles.

No existían ni podían existir lembarias, parece ser.

Dictionary of the Spanish language Text Analysis

El 20 de agosto de este «peculiar» 2020 recibí un simpático correo electrónico de un hombre llamado «Germán Andrés Segura Tinoco» que me decía:

Buscando en Internet, encontré en su website el diccionario de la RAE en modo texto plano, el cual me pareció genial y quisiera usarlo en un proyecto personal (sin fines de lucro) y publicar el resultado en mi GitHub, en donde tengo mis proyectos de informática públicos.

Por lo tanto, quería preguntarle, ¿cuál es la forma correcta de citarlo o de darle agradecimientos?

No es la primera vez que me pasa algo así desde que realicé el trabajo de recopilar todas las palabras (tecleándolas) del diccionario de la RAE para aquel, lejano ya, proyecto de Isidoro Valcárcel Medina. Sin ir más lejos, el año pasado una persona desde Chile me decía que lo estaba usando para «enseñar a hablar» a una máquina. Así como la gran colaboración que realicé dentro del interesantísimo proyecto de Marta PCampos 1914-2014 sobre las palabras que habían desaparecido del diccionario en esos 100 años. Su precioso trabajo que yo denomino «Palabras Muertas».

Yo le respondí cortésmente con un email ese mismo día diciéndole:

Por supuesto eres libre de usarlo en un proyecto personal sin ánimo de lucro o, incluso, remunerado. Son las palabras de la RAE… es decir, de todos, que yo tan sólo he tecleado (ante la imposibilidad de conseguir una versión digital).

Puedes citarme como te dé la gana, pero agradecería que citases mi nombre y website:
Giusseppe Domínguez https://www.giusseppe.net

Te envío, no obstante, una entrada del blog con una versión lo más actualizada posible (en Mega) y no me responsabilizo de posibles errores… que voy corrigiendo, pero que seguro que alguna quedará. Si necesitas algún tipo de «sección» del mismo o alguna cosa curiosa… puedes decírmelo y si tengo ocasión, cuenta conmigo.

Un cordial saludo y hasta pronto,
Giusseppe

Fue muy bonito e interesante encontrarse en dónde había utilizado esas palabras y para qué: un análisis estadístico de las palabras en español, además de su gentileza a la hora de citarme en varios lugares agradeciéndome mi contribución (que siempre tiendo a minimizar, pues las palabras son públicas).

Buenas tardes, estimado Giusseppe,

Muchas gracias por su respuesta.

Le comparto el link a la página principal del proyecto en el que estoy trabajando, en donde realizo el agradecimiento a usted (en la sección Acknowledgment), con link a su website.
https://ansegura7.github.io/DSL_Analysis/

También le comparto el resultado del análisis descriptivo en el que estoy trabajando. Agradecería sus comentarios al respecto.
https://ansegura7.github.io/DSL_Analysis/pages/dsl_text_analysis.html
Próximamente, estaré compartiendo los resultados por Twitter. Por lo tanto, agradecería si me indica el nombre de usuario de su cuenta Twitter, para poder mencionarlo.

Una vez más, muchas gracias por compartir y recopilar el dataset del DLE.

Saludos cordiales,
Andrés Segura Tinoco

Me resulta simpático que llamen «dataset» al conjunto o listado de las palabras que recoge la RAE en su DLE. Los enlaces del proyecto de Andrés son fantásticos y es un trabajo divertido que seguro que además alguien considera útil.

En su proyecto mezclaba dos de mis grandes pasiones: la programación y el lenguaje, cosa que suelo hacer con frecuencia y que, próximamente, haré aún más. Así que estuve cotilleando con suma atención hasta que creí que podía hacerle una sugerencia útil, además de agradecerle su agradecimiento (entrando en un curioso bucle)

Me alegra saber que te sirve el material recopilado.

He estado ojeando tu proyecto y tiene una pinta estupenda. Me encantan los análisis y tu codificación es muy limpia y bien comentada.

Como única sugerencia (no muy difícil de hacer) es la de escribir todas las frases del análisis en un array (o un archivo externo) que puede modificarse sencillamente para traducciones a otros idiomas. Me explico, por ejemplo, en la parte del código:

"source": [
  "# Show results\n",
  "n_words = len(word_dict)\n",
  "print('Total of different words: %d' % n_words)"
]

podrías sustituir el print por algo así como:

"print('%s: %d' % msg_total_words[i], n_words)"

y tener un array de cadenas msg_total_words[LANGUAGES] o algo similar… (disculpa mi escaso conocimiento de python)

Es sólo una insignificante sugerencia que, seguramente, se puede hacer mejor que como te sugiero. (Leyendo los textos/mensajes de un archivo idiomático, por ejemplo)

Quizá me ha llamado la atención especialmente por el hecho de que no esté en español el resultado, lo que comprendo desde el punto de vista de la divulgación, pero también me resulta paradójico siendo que se habla sobre el español… 😉

Muchísimas gracias por la atribución y espero que no te molesten mis sugerencias.

Un cordial saludo,
Giusseppe

PS: No uso Twitter. Tengo cuenta de Facebook e Instagram, just in case…
https://www.facebook.com/giusseppe.dominguez (perfil personal)
https://www.facebook.com/giusseppedelaaalaz (página «oficial»)
https://www.instagram.com/giusseppe.dominguez

Y en último agradecimiento, me escribió unos días después con los resultados que estaba obteniendo para hacerme partícipe de su publicación. (Lo que es de agradecer).

Estimado Giusseppe,

Muchas gracias por tu sugerencia. Me parece súper válida y útil para mayor y mejor divulgación del material publicado. La tendré en cuenta para este y futuros proyectos.

Aprovecho el correo y te comento 3 cosas brevemente:
1. Cree un hilo en Twitter publicando algunos de los resultados obtenidos en mi análisis y al final hay un tweet agradeciendo y reconociendo tu aporte con link directo a tu sitio web. Te comparto el enlace al hilo (son solo 8 tweets) por si los quieres revisar: https://twitter.com/seguraandres7/status/1298025632090259458?s=21

2. He hecho algunas correcciones sobre las palabras recopiladas. Encontré como 2 o 3 palabras en donde se acentuaban consonantes en vez de vocales y otros pequeños errores, en donde se invertían letras, sin embargo han sido menos de 10 correcciones hasta el momento. Una vez termine el proyecto, te envío de vuelta el diccionario de palabras, para que puedas actualizar el tuyo, de así considerarlo.

3. Para futuro networking o trabajos, te comparto mi sitio web y mi perfil de Twitter donde constantemente estoy publicando resultados de mis trabajos de investigación personales o académicos. Curiosamente, yo no tengo Facebook. Website: https://ansegura7.github.io/ y usuario de twitter: https://twitter.com/SeguraAndres7

Una vez mas, muchas gracias por recopilar y compartir este dataset tan valioso.

Saludos cordiales,
Andres Segura Tinoco
Telf: +57 3555590546

Actualicé mi diccionario con su revisión incorporada, para poder utilizarlo en nuevos proyectos, pero sé, soy consciente, que seguro que habrá más errores. Quizá por ello en el proyecto «Cocinillas» en el que estoy metido ahora mismo he querido incorporar un «testeador» o comprobador, para saber si la palabra que busco en el diccionario existe o no y, en caso contrario, hacer un listado con todas las palabras erróneas que tengo y poder mejorar mi diccionario en texto plano (aunque espero que la próxima vez que lo actualice pueda incorporar, incluso, todas las definiciones).

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
Esto no es una broma