{"id":9769,"date":"2021-03-18T09:00:30","date_gmt":"2021-03-18T08:00:30","guid":{"rendered":"https:\/\/www.giusseppe.net\/blog\/?p=9769"},"modified":"2021-03-12T19:13:18","modified_gmt":"2021-03-12T18:13:18","slug":"diccionario-rae-completo","status":"publish","type":"post","link":"https:\/\/www.giusseppe.net\/blog\/archivo\/2021\/03\/18\/diccionario-rae-completo\/","title":{"rendered":"Diccionario RAE Completo"},"content":{"rendered":"<p>He decidido dar por <a href=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/RAE-COMPLETO.tar.gz\" rel=\"noopener\" target=\"_blank\">concluida la ordenaci\u00f3n del Diccionario de la RAE<\/a>, que me descargu\u00e9 con el <a href=\"https:\/\/www.giusseppe.net\/blog\/archivo\/2020\/09\/25\/busqueda-de-palabras-en-la-rae-en-linea-de-comandos\/\">programa buscaenrae.sh<\/a> y el programa descargarae.sh hecho para la ocasi\u00f3n y que le\u00eda el archivo con la lista de palabras (al que impropiamente denominaba diccionario), para descargar, una a una, las p\u00e1ginas correspondientes.<\/p>\n<p>Todo parti\u00f3 del trabajo que realic\u00e9 para el proyecto del Diccionario Personal de Isidoro Valc\u00e1rcel Medina, en 2015.<\/p>\n<p>Ah\u00ed nos encontramos con la negativa de la RAE a ceder el diccionario en modo digital, as\u00ed que tuve que teclear las entradas del mismo a lo largo de m\u00e1s de 3 meses. Finalmente, acab\u00e9 teniendo una lista de 90940 palabras, algunas de las cuales eran acepciones repetidas. Si quit\u00e1bamos las palabras que ten\u00edan m\u00e1s de una acepci\u00f3n y que estaban en el archivo etiquetadas con un n\u00famero 1,2,&#8230; seg\u00fan procediera, nos quedaban 88296 palabras (deber\u00eda llamarlas \u00abentradas\u00bb).<\/p>\n<p>Por supuesto, estaban plagadas de errores:<\/p>\n<ol>\n<li>En primer lugar los propios de tecleo.<\/li>\n<li>En segundo lugar (oh, my god!) ten\u00eda incluidas en mi colecci\u00f3n las palabras que Isidoro hab\u00eda decidido incluir en su diccionario personal independientemente de las que hubiera en el de la RAE.<\/li>\n<li>En tercer lugar (y esto result\u00f3 ser lo peor), muchas palabras han \u00abdesaparecido\u00bb, pues la entrada no corresponde a la palabra&#8230; por ejemplo, la palabra \u00abpoeta, tisa\u00bb, no est\u00e1 en el diccionario sino en \u00abpoetisa\u00bb, as\u00ed que <a href=\"https:\/\/www.giusseppe.net\/blog\/archivo\/2020\/11\/23\/nosotros-tras\/\">la palabra poeta no se encuentra en la RAE<\/a> como tal.<\/li>\n<\/ol>\n<p>As\u00ed que el programa contemplaba la necesidad de decirme si tal o cual palabra no estaba en el diccionario de la RAE (en la versi\u00f3n online)<\/p>\n<blockquote><p><a href=\"https:\/\/dle.rae.es\/contenido\/actualizaci%C3%B3n-2020\" target=\"_blank\" rel=\"noopener\">Actualizaci\u00f3n 2020<\/a><br \/>\nLa Real Academia Espa\u00f1ola (RAE) y la Asociaci\u00f3n de Academias de la Lengua Espa\u00f1ola (ASALE) han emprendido ya las tareas de redacci\u00f3n de la nueva edici\u00f3n de su Diccionario de la lengua espa\u00f1ola (DLE), que tendr\u00e1 las caracter\u00edsticas fijadas en la planta aprobada por todas las Academias de ASALE. Con el objetivo de que el desarrollo de esa nueva edici\u00f3n, forzosamente lento, no retrase la inclusi\u00f3n de nuevas palabras y acepciones ni la modificaci\u00f3n de las ya incorporadas que necesiten enmienda, se ha optado por publicar estas actualizaciones anualmente.<\/p>\n<p>La que ahora se pone a disposici\u00f3n de todas las personas interesadas recoge las modificaciones aprobadas por todas las Academias en 2020 y tendr\u00e1 la consideraci\u00f3n de versi\u00f3n electr\u00f3nica 23.4.<\/p><\/blockquote>\n<p>Ya de paso, como pod\u00eda hacerlo, me inform\u00e9 de si la palabra que estaba consultando era o no conjugada, lo que significaba que era un verbo. Un bonito plus que no esperaba.<\/p>\n<p>Con la lista de errores generada, fui revis\u00e1ndolas palabra a palabra, las 1245 entradas no encontradas, entre las que estaban, ni m\u00e1s ni menos: poeta.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-9771\" src=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/nopoeta.jpg\" alt=\"\" width=\"50%\" srcset=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/nopoeta.jpg 406w, https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/nopoeta-300x141.jpg 300w\" sizes=\"(max-width: 406px) 100vw, 406px\" \/><\/p>\n<p>As\u00ed que a lo largo de los \u00faltimos meses del 2020 fui dej\u00e1ndome los ojos para ir revisando esos errores y fabricando una lista de palabras que se corresponda lo m\u00e1s posible con la \u00aboficial\u00bb de la RAE.<\/p>\n<p>Ha quedado una lista de 88024 \u00abentradas\u00bb que se corresponden con 90452 palabras (ya teniendo en cuenta que algunas entradas o vocablos tienen varias palabras (<a href=\"https:\/\/www.edistribucion.es\/anayaeducacion\/8420048\/fuentes\/diccionario.htm\" target=\"_blank\" rel=\"noopener\">a veces me confundo y denomino a eso acepciones<\/a>).<\/p>\n<p>Una vez corregida y revisada, aunque asumo a\u00fan un error considerable que no puedo prever, tengo la posibilidad de descargar el diccionario completo palabra a palabra con el programa buscaenrae.sh<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">#!\/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    echo -e \"\\t[0] para generar un archivo HTML con la respuesta\"\r\n    echo -e \"\\t[1] para generar un archivo TXT  con la respuesta\"\r\n    echo -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\" &gt; .\/\"$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=\"&lt;div id='conjugacion'&gt;\"\r\nesunverbo=`grep -c \"$id_conjugacion\" .\/\"$palabra.html\"`\r\nif [ $esunverbo -gt 0 ]\r\nthen\r\n  echo \"$palabra es un verbo\" &gt;&gt; $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=\"&lt;article id=\"\r\nid_acepcion_fin=\"&lt;\\\/article&gt;\"\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\" &gt;&gt; $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&lt;$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\" &gt; \".\/$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\" &gt; \".\/$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' &gt; \".\/$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 ]] &amp;&amp; [[ $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\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Este programa era invocado con el siguiente miniprogramita que, leyendo de la lista de palabras corregidas que, impropiamente, denomin\u00e9 diccionariosinrepes.txt, obtiene las diversas, impropiamente denominadas, acepciones y las separa en 90452 archivos de una \u00fanica l\u00ednea.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">#!\/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 [diccionario]\"\r\n  exit\r\n}\r\n\r\n# CONTROL DE ENTRADA DE VARIABLES y ASIGNACI\u00d3N\r\nif [ $# -gt 1 ]\r\nthen\r\n  # Reportar uso inapropiado\r\n  uso\r\nelif [ $# -eq 1 ]\r\nthen\r\n  diccionario=$1\r\nelse\r\n  diccionario=diccionariosinrepes.txt\r\nfi\r\n\r\nwhile IFS= read -r line\r\ndo\r\n  buscaenrae.sh 2 $line\r\ndone &lt; $diccionario\r\n<\/pre>\n<p>Descargadas y archivadas en una estructura de carpetas obvia:<\/p>\n<p>dict -&gt; LETRA<\/p>\n<p>Se pueden reordenar o \u00abrecompilar\u00bb en una LETRA, con sus definiciones incluidas, sin incluir, etc&#8230;<\/p>\n<p>Lo hago usando otro script simple:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">#!\/bin\/bash\r\n\r\n# El diccionario completo est\u00e1 por acepciones en las carpetas\r\n# dict\/LETRA\r\n# Cada acepci\u00f3n (en realidad entrada en el diccionario) tiene\r\n# un archivo denominado PALABRA.N.1linea conteniendo su definici\u00f3n.\r\n# (donde N es el n\u00famero de acepci\u00f3n contando desde cero)\r\n\r\nletras=\"A B C D E F G H I J K L M N \u00d1 O P Q R S T U V W X Y Z\"\r\nfor letra in $letras\r\ndo\r\n  ls dict\/$letra &gt; dictporletra\/$letra.archivos.txt\r\n  awk -F\".\" '{print $1}' dictporletra\/$letra.archivos.txt &gt; dictporletra\/$letra.acepciones.txt\r\n  ls dict\/$letra\/*.0.1linea |awk -F\"\/\" '{print $3}'|awk -F\".\" '{print $1}' &gt; dictporletra\/$letra.sinrepes.txt\r\n  cat dict\/$letra\/* &gt; dictporletra\/$letra.definiciones.txt\r\ndone\r\n\r\ncat dictporletra\/*.archivos.txt &gt; DICCIONARIO_TOTAL.archivos.txt\r\ncat dictporletra\/*.acepciones.txt &gt; DICCIONARIO_TOTAL.acepciones.txt\r\ncat dictporletra\/*.sinrepes.txt &gt; DICCIONARIO_TOTAL.sinrepes.txt\r\ncat dictporletra\/*.definiciones.txt &gt; DICCIONARIO_TOTAL.definiciones.txt\r\n<\/pre>\n<p>Pero queda por resolver un problema que me tiene algo martirizado desde hace meses y es que la ordenaci\u00f3n es muy compleja realizarla, pues muchas entradas en el diccionario son dobles, como \u00abad hoc\u00bb, pero las definiciones descargadas incluyen l\u00edneas que son del tipo: \u00abi Escrito con&#8230;\u00bb y desde el punto de vista del uso del comando sort, es m\u00e1s o menos lo mismo que decir que si quiero ordenar las primeras como \u00abadhoc\u00bb, la \u00abiEscrito\u00bb se sale de su lugar.<\/p>\n<p>He ordenado muchas manualmente sobre esta compilaci\u00f3n, pero es un trabajo absolutamente aberrante y seguro que se puede hacer mejor, as\u00ed 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.<\/p>\n<p>Espero que el orden no sea algo tan terrible en esos otros proyectos venideros.<\/p>\n<p><a href=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/RAE-COMPLETO.tar.gz\" rel=\"noopener\" target=\"_blank\">Dejo a disposici\u00f3n p\u00fablica el Diccionario Completo<\/a> que he generado de esta manera, con la estructura de carpetas generada, as\u00ed como los programas utilizados para su procesamiento.<\/p>\n<p><a href=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/RAE-COMPLETO.tar.gz\">RAE-COMPLETO.tar<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>He decidido dar por concluida la ordenaci\u00f3n del Diccionario de la RAE, que me descargu\u00e9 con el programa buscaenrae.sh y el programa descargarae.sh hecho para la ocasi\u00f3n y que le\u00eda el archivo con la lista de palabras (al que impropiamente denominaba diccionario), para descargar, una a una, las p\u00e1ginas correspondientes. Todo parti\u00f3 del trabajo que &#8230; <a title=\"Diccionario RAE Completo\" class=\"read-more\" href=\"https:\/\/www.giusseppe.net\/blog\/archivo\/2021\/03\/18\/diccionario-rae-completo\/\">Read more<span class=\"screen-reader-text\">Diccionario RAE Completo<\/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":[10,128,110],"tags":[324,162,182,108,74,157,130,105],"class_list":["post-9769","post","type-post","status-publish","format-standard","hentry","category-libros","category-proyectos","category-tecnologia-opinion","tag-cocinillas","tag-diccionario","tag-isidoro-valcarcel-medina","tag-lecturas","tag-linux","tag-ortografia","tag-proyectos-2","tag-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9769","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=9769"}],"version-history":[{"count":3,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9769\/revisions"}],"predecessor-version":[{"id":9775,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9769\/revisions\/9775"}],"wp:attachment":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/media?parent=9769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/categories?post=9769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/tags?post=9769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}