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