Compress: automaticé la mitad de mi escritura
(github.com/eschluntz)- Una herramienta que crea automáticamente abreviaturas de escritura a partir de tu propio corpus de textos y genera atajos de entrada para usar en email y Slack
- Analiza un corpus de texto para sugerir abreviaturas que permitan ahorrar la mayor cantidad de caracteres al escribir, y genera archivos de configuración para Autokey, un programa de atajos de teclado para Linux
- Encuentra n-gramas frecuentes en el corpus para crear candidatos que se reemplacen por expresiones más cortas, y calcula el ranking de sugerencias como
[cantidad de caracteres ahorrados] * [frecuencia de la frase] - La selección de abreviaturas busca que sean fáciles de recordar; excluye mediante una lista negra las abreviaturas que uno querría escribir como palabras, y asigna primero las abreviaturas más fáciles de recordar a las frases usadas con mayor frecuencia
- También ofrece una herramienta de análisis de Slack Data Export para usar mensajes de Slack como corpus
- Solo los administradores del workspace de Slack pueden exportar
- Solo se exportan canales públicos
- Es necesario cambiar
USERNAME_TO_EXPORTpor el nombre de usuario de Slack y luego ejecutarparse_slack.py - La exportación de Slack incluye un procedimiento para eliminarla con
srm
- El flujo de uso básico consiste en colocar el corpus en
data/corpus/*.txt, generar los 200 principales candidatos enoutput/suggested_shortcuts.yamlconfind_suggested_phrases.py, mover los elementos deseados ashortcuts.yamly generar los archivos de configuración de Autokey congenerate_autokeys.py - Instala las dependencias con
install.shy actualmente fue probado con Python3.10.12 - Autokey actualmente solo soporta X11 en Linux y no soporta Wayland
- La configuración de Autokey generada está preparada para aplicarse solo cuando Chrome tenga el foco; se incluye la experiencia del usuario de que en terminal y vscode había más problemas porque comandos cortos de Linux o nombres de variables se solapaban con las abreviaturas
1 comentarios
Opiniones de Hacker News
También escribí una entrada de blog con un video sobre el proyecto: https://erikschluntz.com/software/2023/08/26/compressing-my-...
Rara vez un proyecto paralelo realmente me ahorró más tiempo del que le invertí :)
La idea es muy ingeniosa, pero creo que no querría usarla si va cambiando con el tiempo
Por ejemplo, si la ejecutara cada 6 meses y el año pasado
dbsignificabadebugpero este año pasa a serdatabase, podría arruinar la memoria muscular y los hábitosPor eso me interesa más una versión general que, al ejecutarla sobre libros, correos y mensajes escritos por miles de personas de distintos contextos y ámbitos, ayude de forma estable a todo el mundo
Expandir
tatheystasomethingparece obvio, pero me pregunto si se podría crear un conjunto mínimo de unas 200 a 500 abreviaturas que todos puedan aprender, como un “teclado estándar”https://archive.org/details/evansbasicenglis00evan
Conviene usar el PDF; el archivo TXT tiene OCR de mala calidad y casi no sirve
Esto también es útil: https://en.m.wikipedia.org/wiki/Most_common_words_in_English
suggested_shortcuts.yamly luego uno copia desde ahí ashortcuts.yaml, así que puedes controlar manualmente qué atajos se activan realmente :)Y, como era de esperarse,
the -> testá al inicio de la lista: https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...Un químico podría escribir
droppercon frecuencia y quererdp, mientras que un burócrata quizá prefieradepartmentSi no eres hablante nativo de chino, quizá no lo sepas, pero el chino trae algo así integrado
Oficialmente se llama 双拼(Shuangpin), y consiste en escribir 2 letras inglesas por palabra para introducir la palabra completa: https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
Incluso sin usar Shuangpin formalmente, la mayoría de los métodos de entrada chinos admiten una función similar de 简拼 para frases populares, que permite escribir frases de varias palabras ingresando solo la primera letra inglesa de cada palabra
Por ejemplo, para escribir
xiexie, que significa “thank you” en chino, normalmente basta con teclearxxy la mayoría de los métodos de entrada chinos sugerirá automáticamente los caracteres correspondientesPor ejemplo, 「你想吃什麼」, que significa “what do you want to eat”, se ingresa como
n x c s mXiao long baoconXLBentra en este ejemplo. No sabía que existía un sistema más amplio; qué genialMe encanta ver proyectos como este
El fin de semana abordé un problema parecido, pero orientado a palabras completas en lugar de abreviaturas de un diccionario propio, y en el caso general se adaptaba a un corpus de texto dado
Lo que me preguntaba era: “¿se puede crear un autocorrector ajustado a un corpus de texto dado?”. Por ejemplo, si en un documento se usa mucho una expresión larga como
data augmentation, quería ver si se podía automatizarEl enfoque consistía en calcular la sorpresa de palabras individuales y 2-gramas en un corpus general, el corpus del NYT; sumar peso a las palabras presentes en el índice objetivo de ajuste; y luego construir una estructura de datos trie ponderada por sorpresa para usarla como autocompletado avanzado
La solución funcional está aquí: https://github.com/capjamesg/autowrite/blob/main/autocomplet...
Todavía no hay documentación; la agregaré en unos días. Si quieres conversar, puedes dejar un Issue en GitHub
Aunque quizá yo entendí mal y lo que buscas es encontrar formas más creativas de decir la misma expresión
Como idea de extensión, se podría agregar un keylogger que observe lo que se escribe. Claro que eso en sí mismo es una desventaja.
Sería un enfoque en el que aprende las frases que el usuario usa con frecuencia, encuentra expresiones comunes y sugiere atajos; luego, cada vez que el usuario escribe la frase completa, le avisa suavemente cuál es el atajo.
Así cualquiera podría instalarlo, la barrera de entrada sería baja y, con el tiempo, la productividad podría aumentar de forma gradual.
La idea era guardar los datos en un almacenamiento seguro dentro del dispositivo para que no representaran un riesgo de seguridad.
Un método de entrada que ofrezca autocompletado en inglés en el escritorio como en un teléfono, o que proporcione atajos mediante un framework de métodos de entrada como
fcitx5, parece un concepto interesante.¿Sería algo como exportar automáticamente el historial de Slack cada semana, calcular la frecuencia de palabras y luego definir manualmente varias expansiones a partir de los resultados visibles?
La estructura era usar
Bluetooth Keyboard -> ESP32como host de teclado y enviar las pulsaciones a USB y a un archivo.Si tienes dinero, también existen loggers de teclado USB/PS2 que almacenan los datos en disco.
Hacer que todo converja hacia eso ayudaría a mantener consistencia entre varias computadoras y también sería bueno cuando se usan varias máquinas.
En mi caso, salvo en algunas situaciones de chat, casi nunca siento que escribir sea el cuello de botella.
Más bien, solo he tenido interacciones en las que el ancho de banda adicional del video o la voz habría ayudado. Me pregunto si este tipo de atajos realmente se traduce en ahorro de tiempo de trabajo.
Por ejemplo, conversaciones como “¿puedes subir una captura de pantalla?” o respuestas como enviar un enlace de Calendly.
Incluso al escribir textos largos, muchas veces frustra que el pensamiento vaya más rápido que el tecleo, así que también ayuda en esa parte.
Escribir es una tarea manual que interrumpe el pensamiento; cuanto menos tiempo pases entrando y saliendo del modo de tecleo, más rápido puedes volver a pensar.
Dediqué bastante tiempo a crear una expansión de texto para uso propio.
Fue mucho más difícil de lo que esperaba, y cuesta encontrar alias que aporten suficiente valor sin fallar con demasiada frecuencia.
Como me comunico todos los días en varios idiomas, se volvió aún más complejo, así que ahora separé los alias por aplicación.
Aun así quedan falsos disparos, y en general estoy llegando a la conclusión de que se necesita un delimitador.
kk,zz,qq.Por ejemplo,
qqmees mi firma de correo.Me gustaría que la herramienta del artículo original también sugiriera alias para frases más largas que las que vi en el README. Oí que TextExpander para MacOS hace eso, pero no soy usuario de Mac.
Uno de los TODO es generar también una lista de bloqueo de alias que se deben evitar, usando el corpus real de texto analizado.
Como confesión personal, nunca me gustaron las abreviaturas estilo SMS que se usaban en los teléfonos anteriores al iPhone.
Fue una de las razones por las que casi no usaba SMS ni mensajes de texto salvo cuando era estrictamente necesario.
He usado expansión de texto desde los primeros tiempos de TextExpander, que funcionaba en iOS y macOS, y por muy bueno que sea el teclado del iPhone, era incómodo escribir repetidamente cosas como la dirección de casa, mapas de casa/oficina e información laboral o personal. TextExpander ayudó mucho.
Después, cuando TextExpander pasó a un modelo de suscripción, empecé a buscar alternativas, porque personalmente no creo que el modelo de suscripción encaje con este tipo de herramientas. Snippets, incluido en el Powerpack de Alfred, fue una mejor alternativa.
macOS/iOS también tienen “Text Replacements” integrado, pero suele fallar fuera de las apps de Apple. Lo de aquí se parece a Text Replacement de Apple; yo dejo esa función activa, pero gestiono lo demás con Alfred. Sinceramente, si pudiera alejarme por completo de Alfred, tal vez me pasaría a esto.
Dicho eso, quiero usar un delimitador para las expansiones, de modo que no interfieran con el tecleo normal. Ahora uso
,como delimitador, porque en inglés después de una coma siempre viene un espacio, y mis expansiones solo ocurren cuando escribo una coma seguida de un texto corto sin espacio. La posición de la tecla de coma también es cómoda al escribir al tacto.Incluso si me quedo con Text Replacement del sistema operativo, probablemente introduciría un delimitador para evitar que las palabras se expandan automáticamente en situaciones no intencionales.
https://textexpander.com
https://www.alfredapp.com
El caso de excepción más granular es
.py. En general,.es un delimitador, pero lo hice una excepción delante depypara que no interfiera al escribir nombres de archivos de Python.Años de autocompletado ya han empeorado mi nivel de inglés como segunda lengua.
Muchas veces conozco la palabra, pero no recuerdo cómo se escribe y termino olvidando la pronunciación; siento que una herramienta así acabaría por eliminar por completo lo que me queda de habilidad.
Me pregunto si, en vez de memorizar palabras clave, no se podrían escribir las primeras letras
Hace unas semanas hice una prueba con ChatGPT, pero no parece existir software ya hecho que tenga una función así
No soy muy bueno programando, pero ojalá alguien lo hiciera: https://imgur.com/a/0o4zLwT
La precisión es bastante buena, pero cuando falla es muy molesto
Aunque funcionara a la perfección, al usarlo en la práctica me generó una carga cognitiva mucho mayor que escribir como siempre
Si me concentraba mucho, podía escribir con abreviaturas más o menos a la misma velocidad cómoda de siempre, pero no superarla, y al final terminaba volviendo naturalmente a la escritura normal
Dicho eso, yo escribo rápido y bastante, así que este prototipo está intentando ganarle a un proceso mental fuertemente optimizado durante unos 30 años. Para alguien que no sea ya un mecanógrafo rápido, quizá encaje mejor