Durante el semestre pasado fue común el que mi hija preguntara definiciones de términos que aparecían en sus libros. Como todo buen ciudadano de la Internet, siempre recurrí a Google utilizando el modificador “define” que provee un listado de posibles definiciones del término deseado, tomados de varios lugares incluyendo Wikipedia. Esto es un ejemplo de cómo solicitar definiciones a Google, en este caso la definición del término pascal:
define:pascal
El url o dirección web que Google genera automáticamente para la búsqueda es:
http://www.google.com/search?q=define:pascal
En realidad es más largo e incluye más parámetros, pero lo que ven arriba es lo mínimo necesario.
Pero a veces la respuesta no llegaba tan rápido como quería porque los navegadores de web, especialmente Firefox, se toman su tiempo en reproducir el código HTML de las páginas. Tomaba aún más tiempo si tenía una descarga en proceso o si tenía muchas pestañas abiertas en el navegador.
Se me ocurrió entonces buscar diccionarios o enciclopedias que pudiera consultar desde la consola de texto de Linux. Las aplicaciones para la consola son muchísimo más rápidas que los navegadores web o que casi cualquier otra aplicación con interfaz gráfica (”GUI”). Probablemente no utilicé los términos apropiados en mi búsqueda, porque no encontré mucho. Estoy seguro de que deben existir decenas de esas aplicaciones.
En vista de que la búsqueda me iba a tomar más tiempo, decidí desarrollar mi propia solución y de una vez practicar la programación de consola en Linux con el “bash shell”.
En una entrada anterior mostré a través de un “screencast” el navegador web Lynx, que toma las páginas HTML y las reproduce en texto solamente pero con un formato muy atractivo y enlaces web activos. Una característica de Lynx que comparte con casi todas las aplicaciones de consola de texto es que su salida pueden redirigirse hacia otros programas para ser procesadas (“piping”). Lo que hice fue tomar el texto que produce Lynx y quitarle todo lo que consideraba innecesario. Ahora, cuando desde la consola de Linux escribo algo como esto:
$ define pascal
Recibo algo como esto que muestro resumido:
Buscando definiciones de pascal …
* a unit of pressure equal to one newton per square meter
* French mathematician and philosopher and Jansenist; invented an
adding machine; contributed (with Fermat) to the theory of
probability (1623-1662)
* a programing language designed to teach programming through a
top-down modular approach
[26]wordnet.princeton.edu/perl/webwn
* The pascal (symbol Pa) is the SI unit of pressure.It is equivalent
to one newton per square metre. The unit is named after Blaise
Pascal, the eminent French mathematician, physicist and
philosopher.
[27]en.wikipedia.org/wiki/Pascal
* Pascal is the stage name of drum and bass DJ and producer Pascal
Redpath.
[28]en.wikipedia.org/wiki/Pascal_(artist)
* Pascal is a lunar crater that lies near the northern limb of the
Moon, on the western side of the pole. It is located to the north
of the eroded Desargues crater, and just east of the Brianchon
crater. Pascal can be located by finding the Carpenter crater and
then following the surface to the northwest toward the limb.
However the visibility of this formation can be affected by
libration.
[29]en.wikipedia.org/wiki/Pascal_(crater)
:
:
:
* is a high-level procedural language, named after the French
mathematician Blase Pascal, with power, flexibility, and a
self-documenting structure that makes it an attractive choice for
academic, business, and scientific applications.
[54]www.wiley.co.uk/college/turban/glossary.html
Find definitions of pascal\ in: [55]Chinese (Simplified)
[56]Chinese (Traditional) [57]Dutch English [58]French [59]German
[60]Italian [61]Portuguese [62]Russian [63]Spanish [64]all
languages
Se hallaron 31 definiciones
Tengo que aclarar que el proceso completo de descubrir cómo extraer solamente lo que necesitaba de la página de Google, según vista en Lynx, me tomó un día entero porque tuve que aprender sobre las aplicaciones sed (stream editor) y egrep, ambas son aplicaciones para buscar patrones de texto y alterarlos. El código final, luego de horas de pruebas, es este (casi todo lo que ven es el texto de ayuda al usuario):
# Si no encuentra argumentos o encuentra -h o –help
# muestra ayuda sobre cómo usar el programa
if [ $# -eq 0 ] || [ “$1″ = “–help” ] || [ “$1″ = “-h” ]; then
echo
echo “===========================================”
echo define v1.0
echo Este programa busca definiciones
echo utilizando Google
echo “============================================”
echo “Licencia GPL 2.0″
echo “Derechos Reservados 2006: Edwood Ocasio”
echo “Email: edwood_ocasio at yahoo.com”
echo “——————————————–”
echo
echo “Uso: define ‘término’ [lenguaje]”
echo
echo El término es compulsorio, pero el lenguaje
echo es opcional, se presume el inglés si no se indica
echo algún lenguaje
echo
echo ” Ej. define linux es”
echo
echo “En el ejemplo aparecerían definiciones de ‘linux’ en español”
echo
echo “Opciones de algunos lenguajes: es (español), fr (francés), pt (portugués)”
echo
echo Para consultar términos que incluyen espacios
echo debe encerrarse entre comillas dobles
echo
echo ” Ej. define \”ad hoc\” ”
echo
echo “define -h o define –help muestran esta ayuda”
echo
exit 0
fi
echo
#
# ****** Aquí comienza el código ******
#
echo Buscando definiciones de $1 …
echo
tempfile=def$$.$$
lynx -dump “http://www.google.com/search?q=define:$1\&defl=$2″|sed -e ‘1,/Definitions/ d’\
-e ‘/\s*Search/,$ d’ > $tempfile
cat $tempfile
echo Se hallaron `egrep -c “\*” $tempfile` definiciones
rm -f $tempfile
echo
El programita extrae el trozo de la página de Google que contiene la lista de definiciones, todo lo que está entre Definitions of y el encasillado Search al final de la página. Se crea un archivo temporero $tempfile que contiene ese texto filtrado y éste a su vez es filtrado nuevamente para contar la cantidad de líneas que comienzan con un asterisco “*”. Ese número representa la cantidad de definiciones encontradas ya que cada una comienza con un “*”.
Estos lugares web me ayudaron en este pequeño proyecto:
En el próximo artículo les mostraré un programita para consultar desde la consola el Diccionario En Línea de la Real Academia Española (RAE).
Instalación en Linux
- Copie y pegue el código de arriba en un editor de texto.
-
Guarde el archivo como ‘define’
- Desde la consola de texto haga el archivo ejecutable:
chmod +x define
Más artículos como este en:
Algunos artículos relacionados: