{"id":9370,"date":"2020-09-25T09:21:08","date_gmt":"2020-09-25T07:21:08","guid":{"rendered":"https:\/\/www.giusseppe.net\/blog\/?p=9370"},"modified":"2021-03-12T18:14:29","modified_gmt":"2021-03-12T17:14:29","slug":"busqueda-de-palabras-en-la-rae-en-linea-de-comandos","status":"publish","type":"post","link":"https:\/\/www.giusseppe.net\/blog\/archivo\/2020\/09\/25\/busqueda-de-palabras-en-la-rae-en-linea-de-comandos\/","title":{"rendered":"B\u00fasqueda de palabras en la RAE en l\u00ednea de comandos"},"content":{"rendered":"<p>He fabricado un script (un lote de comandos) de bash shell en Linux para descargar y juguetear con b\u00fasquedas en la RAE, ya que resulta complicado pedir que tengan la deferencia de hacerla disponible para el p\u00fablico, como si la RAE fuese un organismo p\u00fablico pagado con dinero p\u00fablico.<\/p>\n<p>Es el paso intermedio entre buscar una palabra y descargarme el diccionario completo palabra a palabra. Ahora toca hacer un peque\u00f1o programita que lo invoque para cada una de las palabras que tecle\u00e9 para el proyecto de Isidoro Valc\u00e1rcel Medina hace unos a\u00f1os y traiga sus definiciones.<\/p>\n<p>Lo he llamado buscaenrae.sh.<\/p>\n<p>Esta versi\u00f3n est\u00e1 modificada sobre la que publiqu\u00e9 hace unos d\u00edas para subsanar errores relacionados con las palabras que contienen varias entradas\/acepciones (<em>no es lo mismo acepciones que entradas y soy consciente de ello, pero no es importante<\/em>), as\u00ed como para retirar las conjugaciones en los verbos.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\r\n#!\/bin\/bash\r\n\r\n### FUNCIONES \u00daTILES PARA EL PROGRAMA\r\n# uso() Instrucciones del programa y salida en caso de error.\r\nuso () {\r\n  echo \"Uso: $0 salida palabra\"\r\n  echo -e \"\\tsalida es un valor n\u00famerico que identifica:\"\r\n\techo -e \"\\t[0] para generar un archivo HTML con la respuesta\"\r\n\techo -e \"\\t[1] para generar un archivo TXT  con la respuesta\"\r\n\techo -e \"\\t[2] para generar una l\u00ednea  TXT  con la respuesta\"\r\n  exit\r\n}\r\nf_verbos=\"00000_VERBOS.txt\"\r\nf_errores=\"00000_ERRORES.txt\"\r\n\r\n# CONTROL DE ENTRADA DE VARIABLES y ASIGNACI\u00d3N\r\nif [ $# -lt 2 ]\r\nthen\r\n  # Reportar uso inapropiado\r\n  uso\r\nelse\r\n  salida=$1\r\n  if [ $# -eq 2 ]; then\r\n    palabra=\"$2\"\r\n  elif [ $# -eq 3 ]; then \r\n    palabra=\"$2 $3\"\r\n  elif [ $# -eq 4 ]; then \r\n    palabra=\"$2 $3 $4\"\r\n  elif [ $# -eq 5 ]; then \r\n    palabra=\"$2 $3 $4 $5\"\r\n  fi\r\n  # echo \"Palabra es #$palabra#\"\r\nfi\r\n\r\n# CONSULTA DEL SERVIDOR de la RAE simulando ser uno de los diversos navegadores posibles\r\nnavegador=(\r\n  \"Mozilla\/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko\/20100101 Firefox\/15.0.1\"\r\n  \"Mozilla\/5.0 (Windows NT 10.0; WOW64; rv:77.0) Gecko\/20100101 Firefox\/77.0\"\r\n  \"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko\/20190101 Firefox\/77.0\"\r\n  \"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\/537.75.14 (KHTML, like Gecko) Version\/7.0.3 Safari\/7046A194A\"\r\n)\r\nrnd=`echo $(($RANDOM%${#navegador[@]}))` # Elegimos un navegador al azar\r\n# Hacemos la petici\u00f3n a la web de la RAE\r\ncurl -s --user-agent \"${navegador[$rnd]}\" https:\/\/dle.rae.es\/\"$palabra\" > .\/\"$palabra.html\"\r\n\r\n# PROCESAMOS EL ARCHIVO OBTENIDO (Cortamos, retiramos lo innecesario, etc)\r\n# Si se trata de un verbo, quitar las conjugaciones\r\nid_conjugacion=\"<div id='conjugacion'>\"\r\nesunverbo=`grep -c \"$id_conjugacion\" .\/\"$palabra.html\"`\r\nif [ $esunverbo -gt 0 ]\r\nthen\r\n  echo \"$palabra es un verbo\" >> $f_verbos\r\n  # ELIMINAMOS la(s) CONJUGACI\u00d3N(ES)\r\n  sed -i \"\/${id_conjugacion}\/d\" .\/\"$palabra.html\"\r\nfi\r\n\r\n# Si tiene m\u00e1s de una acepci\u00f3n (Calcular cu\u00e1ntas despu\u00e9s de saber si es un verbo)\r\nid_acepcion=\"<article id=\"\r\nid_acepcion_fin=\"<\\\/article>\"\r\nnum_acepciones=`grep -c \"$id_acepcion\" .\/\"$palabra.html\"`\r\n# Si no tiene acepciones, la palabra no existe. No continuamos.\r\nif [ $num_acepciones -eq 0 ]\r\nthen\r\n  echo \"$palabra no se ha encontrado en la RAE\" >> $f_errores\r\n  rm \".\/$palabra.html\"\r\n  exit\r\nfi\r\n\r\n# PARTIR en $num_acepciones EL FICHERO $palabra.html\"\r\n# acepciones y acepciones_fin son 2 arrays de l\u00edneas PRECISO CONVERTIRLOS a cortes[]\r\nacepciones=`grep -n \"$id_acepcion\" .\/\"$palabra.html\"|awk -F\":\" '{print $1}'|sed ':a;N;$!ba;s\/\\n\/ \/g'`\r\nc=0\r\nfor i in $acepciones\r\ndo\r\n  let cortes[$c]=$(($i))\r\n  let c=$(($c+1))\r\ndone\r\nacepciones_fin=`grep -n \"$id_acepcion_fin\" .\/\"$palabra.html\"|awk -F\":\" '{print $1}'|sed ':a;N;$!ba;s\/\\n\/ \/g'`\r\nc=0\r\nfor i in $acepciones_fin\r\ndo\r\n  let cortes_fin[$c]=$(($i))\r\n  let c=$(($c+1))\r\ndone\r\n\r\n# GENERA FICHEROS palabra.X.html por cada ACEPCI\u00d3N\r\nfor (( i=0; i<$num_acepciones; i++ ))\r\ndo\r\n  # echo \"El comienzo del corte est\u00e1 en ${cortes[$((i))]}\"\r\n  # echo \"El fin del corte est\u00e1 en ${cortes_fin[$((i))]}\"\r\n  sed \"${cortes[$((i))]},${cortes_fin[$((i))]} !d\" \".\/$palabra.html\" > \".\/$palabra.$i.html\"\r\n  # Distintas salidas del programa, en funci\u00f3n de la variable \"salida\"\r\n  if [ $salida -gt 0 ]   # Salida a modo TXT\r\n  then\r\n    w3m \".\/$palabra.$i.html\" > \".\/$palabra.$i.txt\"\r\n    if [ $salida -gt 1 ] # En una s\u00f3la l\u00ednea\r\n    then\r\n      sed ':a;N;$!ba;s\/\\n\/ \/g' \".\/$palabra.$i.txt\"|sed 's\/  \/ \/g' > \".\/$palabra.$i.1linea\"\r\n    fi\r\n  fi\r\ndone\r\n\r\n# BORRAR indica si dejar o no los archivos que no se deseen como salida \r\nBORRAR=1\r\nif [[ $BORRAR -eq 1 ]] && [[ $salida -gt 0 ]]\r\nthen\r\n  rm \".\/$palabra.\"*html\r\n  if [ $salida -eq 2 ]\r\n  then\r\n    rm \".\/$palabra.\"*txt\r\n  fi\r\nfi\r\n# SALIDA FORZADA\r\nexit<\/article><\/div><\/pre>\n<p>Las primeras pruebas las he realizado con la palabra palabra, como debe ser.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">buscaenrae.sh 2 palabra<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>He fabricado un script (un lote de comandos) de bash shell en Linux para descargar y juguetear con b\u00fasquedas en la RAE, ya que resulta complicado pedir que tengan la deferencia de hacerla disponible para el p\u00fablico, como si la RAE fuese un organismo p\u00fablico pagado con dinero p\u00fablico. Es el paso intermedio entre buscar &#8230; <a title=\"B\u00fasqueda de palabras en la RAE en l\u00ednea de comandos\" class=\"read-more\" href=\"https:\/\/www.giusseppe.net\/blog\/archivo\/2020\/09\/25\/busqueda-de-palabras-en-la-rae-en-linea-de-comandos\/\">Read more<span class=\"screen-reader-text\">B\u00fasqueda de palabras en la RAE en l\u00ednea de comandos<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[232,128,110],"tags":[106,96,162,76,98,182,74,287,130,105],"class_list":["post-9370","post","type-post","status-publish","format-standard","hentry","category-programable","category-proyectos","category-tecnologia-opinion","tag-constitucion","tag-detalles","tag-diccionario","tag-informatica","tag-internet","tag-isidoro-valcarcel-medina","tag-linux","tag-programable","tag-proyectos-2","tag-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/comments?post=9370"}],"version-history":[{"count":5,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9370\/revisions"}],"predecessor-version":[{"id":9382,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9370\/revisions\/9382"}],"wp:attachment":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/media?parent=9370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/categories?post=9370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/tags?post=9370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}