Utilizo regularmente un diccionario de sinónimos, tanto mientras escribo textos para documentación y archivos README, como mientras escribo código para nombrar variables y funciones.
Solía usar tesauros en línea, especialmente thesaurus.com, pero odiaba la experiencia. Aunque los resultados son útiles y están muy bien organizados, no son compatibles con el teclado y su navegación es lenta, especialmente cuando los resultados se extienden a muchas páginas.
Así que hice mi propio diccionario de sinónimos. Lo uso mucho más a menudo que thesaurus.com. Tiene menos funciones, pero es mucho más rápido de acceder y menos disruptivo en el proceso creativo.
En una ventana de terminal, escriba th
seguido de una palabra. Por ejemplo, para buscar la palabra atención :
Invocando th atención |
El resultado es una lista de palabras y frases relacionadas, organizadas en columnas, con líneas de contexto arriba y abajo, y una lista de opciones de navegación en la parte inferior.
Resultado de la búsqueda de atención |
La línea inferior de la pantalla de resultados muestra la lista de acciones disponibles. Inicie una acción escribiendo la primera letra de la acción (resaltada en la pantalla para darle énfasis).
Los datos están organizados como entradas de tesauro, cada una con una colección de palabras y frases relacionadas. Una entrada es un tronco y las palabras y frases relacionadas son las ramas .
La vista predeterminada está en modo ramas. Las palabras que se muestran son las palabras y frases enumeradas después de la entrada en el tesauro de origen. Al cambiar al modo de troncales se mostrarán las entradas que contienen la palabra. Esto se demuestra más claramente con un ejemplo sin ramas:
disparador es una palabra sin una entrada |
No hay ninguna entrada en el tesauro para la palabra desencadenante . La palabra desencadenante está en el tesauro, sin embargo, como ramas de otras entradas. Cambie al modo de troncales para ver las entradas que incluyen el disparador :
Lista de palabras para las cuales el desencadenante es una palabra relacionada |
Este programa no está disponible como paquete; se debe descargar el código fuente y construir el proyecto. Los siguientes pasos producirán un tesauro funcional:
git clone https://www.github.com/cjungmann/th.git
cd th
make
make thesaurus.db
Juega con el programa a ver si te gusta. Si desea instalarlo para que esté disponible fuera del directorio de compilación, invoque el siguiente comando:
sudo make install
Es fácil eliminar el programa si decide que no lo necesita.
Si ha instalado el programa, primero desinstálelo con sudo make uninstall
Esto eliminará el programa, los archivos de soporte y el directorio en el que se instalaron los archivos de soporte.
Si el programa no está instalado, puede eliminar de forma segura el directorio clonado.
El siguiente material interesará principalmente a los desarrolladores, si es que hay alguno.
El proyecto es fácil de construir, pero depende de otro software. La siguiente es una lista de dependencias, de las cuales sólo la primera (la base de datos de Berkeley) puede requerir alguna intervención. Los elementos 3 y 4 a continuación se descargan en un subdirectorio bajo el directorio de compilación, y el código que se encuentra allí está vinculado estáticamente al ejecutable, por lo que no afectarán su entorno.
La versión 5 de db (Berkeley Database) es necesaria para las bases de datos B-Tree del proyecto. Si estás usando git , ya deberías tenerlo, incluso en FreeBSD , que de otro modo solo incluye una versión anterior de db . Make terminará inmediatamente con un mensaje si no puede encontrar una base de datos adecuada, en cuyo caso depende de usted usar su administrador de paquetes para instalar la base de datos o compilarla a partir de las fuentes.
git se usa para descargar algunas dependencias. Si bien las dependencias del proyecto se pueden descargar directamente sin git , hacerlo requiere conocimiento no documentado sobre los archivos fuente, un problema que se evita cuando make puede usar git para descargar las dependencias.
readargs es uno de mis proyectos que procesa argumentos de línea de comando. Si bien este proyecto todavía lo utiliza, ya no es necesario instalar esta biblioteca para que funcione. El º Makefile ahora descarga el proyecto readargs en un subdirectorio, lo construye y usa la biblioteca estática en su lugar.
c_patterns es otro de mis proyectos, un experimento en la gestión de código reutilizable sin necesidad de biblioteca. Makefile usa git para descargar el proyecto, luego crea enlaces a algunos módulos c_patterns en el directorio src para incluirlos en la compilación .
Este proyecto, si bien es útil (al menos para mí), también es un experimento. Uno de mis objetivos aquí es mejorar mis habilidades de escritura de archivos MAKE. Es posible que algunas de las decisiones de compilación e instalación que he tomado no sean las mejores prácticas o incluso que los desarrolladores más experimentados las desaprueben. Si le preocupa lo que le sucederá a su sistema si th
instala, espero que lo siguiente le ayude a tomar una decisión.
Como era de esperar, make compilará la décima aplicación. Quizás de forma no convencional, make realiza otras tareas que pueden llevar algún tiempo:
Descarga mi repositorio de módulos C y utiliza varios de ellos creando enlaces al directorio src .
En lugar de usar configure
para verificar las dependencias, el archivo MAKE identifica y finaliza inmediatamente con un mensaje útil si detecta dependencias faltantes.
Descargue e importe el tesauro moby de dominio público del Proyecto Gutenberg. Esto llena la base de datos de Word de la aplicación.
Abandonado Descargue e importe una base de datos de recuento de palabras. La idea es ofrecer órdenes de clasificación alternativos para que sea más fácil encontrar una palabra en una lista más larga. Esto no está funcionando en este momento. No estoy seguro de volver a esto porque estoy descubriendo que el beneficio de leer una lista alfabética supera con creces el dudoso beneficio de intentar poner primero las palabras más utilizadas. La razón es que es mucho más fácil realizar un seguimiento de las palabras en consideración cuando no están dispersas al azar en una larga lista de palabras.
Me acabo de dar cuenta de que hay un recurso de lista de Moby Part of Speech que podría ayudar a organizar el resultado. Es intrigante, pero no estoy seguro de que sea útil, en función de cuánto ayuda la clasificación alfabética con el uso de la salida. Ya veremos.
Tenía varios objetivos cuando comencé este proyecto.
Quería tener más experiencia con la base de datos Berkeley . Esta base de datos de almacén de claves sustenta muchas otras aplicaciones, incluidas git y sqlite .
Quería practicar el uso de algunos de los módulos de mi proyecto c_patterns. Usar estos módulos en un proyecto real me ayuda a comprender sus defectos de diseño y las características que faltan. yo uso
columnize.c para generar la salida en columnas,
apuntador.c para el menú de opciones mínimas en la parte inferior de la salida,
get_keypress.c para pulsaciones de teclas sin eco, utilizado principalmente por Prompter.c .
Quería practicar el diseño de un proceso de compilación que funcione tanto en Gnu Linux como en BSD. Esto incluye identificar módulos faltantes (especialmente db , de los cuales BSD incluye una biblioteca demasiado antigua) y procesamiento condicional rediseñado.
No me refiero a Windows porque varía más significativamente de Linux que de BSD, y no espero que muchos usuarios de Windows se sientan cómodos utilizando una aplicación de línea de comandos.
La base de datos Berkeley ( bdb ) parece un producto de base de datos interesante. Su enfoque de biblioteca C de bajo nivel parece similar al motor FairCom DB que usé a finales de los años 1990.
La base de datos Berkeley es atractiva porque forma parte de las distribuciones Linux y BSD y ocupa poco espacio. Recompensa la planificación detallada de los datos y es una excusa para explorar algunas de mis ideas en lenguaje C.
Este proyecto es un reinicio de mi proyecto de palabras, que pretende ser un diccionario de sinónimos y de línea de comandos. Ese proyecto fue mi primer uso de bdb , por lo que parte de mi trabajo allí es un poco torpe. Quiero volver a diseñar el código bdb desde cero. Copiaré parte del código de análisis de texto del proyecto de palabras que será aplicable aquí.
Utilizando los grandes conjuntos de datos que son el tesauro y el diccionario, también quiero probar las diferencias de rendimiento entre los métodos de acceso a datos Queue y Recno. Espero que la cola sea más rápida y se puedan calcular el principio y el final de los registros de longitud fija. Acceder por número de registro de un registro de longitud variable determinado requeriría una búsqueda de la ubicación del archivo. Me gustaría medir la diferencia de rendimiento para comparar esa ventaja con la eficiencia del almacenamiento de registros de longitud variable.
Hay dos fuentes de tesauros de dominio público:
Estoy usando el diccionario de sinónimos de Moby porque su organización es mucho más simple y, por tanto, más fácil de analizar. El problema es que los sinónimos son numerosos y, al carecer de organización, es mucho más difícil escanearlos cuando se busca un sinónimo apropiado.
Con cientos de sinónimos para muchas palabras, es muy difícil escanear la lista para encontrar una palabra adecuada. Intentaré imponer cierto orden en la lista para que sea más fácil de usar. Después de usar la herramienta durante algún tiempo, he llegado a la conclusión de que lo mejor es el orden alfabético. Es mucho más fácil volver a una palabra en una lista alfabética. He eliminado la opción de seleccionar otros órdenes de palabras.
La clasificación más sencilla de utilizar es la frecuencia de uso de las palabras. Planeo enumerar las palabras de mayor a menor frecuencia de uso. Presumiblemente, las palabras más populares pueden ser las mejores opciones, mientras que las palabras menos populares pueden quedar obsoletas.
Hay varias fuentes de frecuencias de palabras. El que estoy usando está basado en ngrams de Google:
Datos del corpus del lenguaje natural: datos hermosos
Realmente no he estudiado la fuente de Norvig, por lo que es posible que tenga muchas tonterías. Hay otra fuente que puede tener una lista más limpia, hackerb9/gwordlist. Si Norvig es un problema, quiero recordar esta lista alternativa con la que puedo reemplazarlo.
Esta parte ya no se intenta. La interpretación de los datos de origen se complica por la necesidad de reconocer y convertir la notación única del diccionario a caracteres Unicode. Resolví muchos de estos problemas, pero muchos aún persisten. El Makefile todavía incluye instrucciones para descargar esta información y el repositorio conserva algunos scripts de conversión en caso de que quiera volver a esto.
Agrupar sinónimos por parte de la oración (es decir, sustantivo, verbo, adjetivo, etc.) también puede resultar útil. El primer problema es identificar la parte del discurso representada por cada palabra. El segundo problema está en la presentación: sería mejor, pero más difícil de programar, tener una interfaz que haga que el usuario elija la parte del discurso antes de mostrar las palabras.
Diccionarios electrónicos de dominio público.
Mi primer intento es utilizar el Diccionario Colaborativo Internacional de Inglés (GCIDE) de GNU. Está basado en una versión antigua (1914) de Webster, con algunas palabras añadidas por editores más modernos.