2 puntos por GN⁺ 2023-08-31 | 1 comentarios | Compartir por WhatsApp
  • 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_EXPORT por el nombre de usuario de Slack y luego ejecutar parse_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 en output/suggested_shortcuts.yaml con find_suggested_phrases.py, mover los elementos deseados a shortcuts.yaml y generar los archivos de configuración de Autokey con generate_autokeys.py
  • Instala las dependencias con install.sh y actualmente fue probado con Python 3.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

 
GN⁺ 2023-08-31
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 db significaba debug pero este año pasa a ser database, podría arruinar la memoria muscular y los hábitos
    Por 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 t a the y st a something parece 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”

    • Vale la pena ver Evans Basic English Code. Es un sistema de taquigrafía basado en el Phillips Code para telégrafo y, aunque es algo antiguo, las palabras más comunes son bastante útiles para escribir o teclear
      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
    • Justamente por esa razón no se ejecuta automáticamente. Genera suggested_shortcuts.yaml y luego uno copia desde ahí a shortcuts.yaml, así que puedes controlar manualmente qué atajos se activan realmente :)
    • Creo que una versión general así termina pareciéndose a un teclado de taquigrafía
    • Hace tiempo encontré Yublin, que era exactamente ese intento: crear abreviaturas de 1 a 3 letras para las 600 palabras más comunes en inglés
      Y, como era de esperarse, the -> t está al inicio de la lista: https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...
    • Una solución general probablemente solo encaje más o menos con mucha gente
      Un químico podría escribir dropper con frecuencia y querer dp, mientras que un burócrata quizá prefiera department
  • Si 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 teclear xx y la mayoría de los métodos de entrada chinos sugerirá automáticamente los caracteres correspondientes

    • Con un buen teclado pinyin es fácil escribir rápido oraciones comunes
      Por ejemplo, 「你想吃什麼」, que significa “what do you want to eat”, se ingresa como n x c s m
    • Hace poco escuché un podcast interesante sobre cómo se escribe chino con un teclado estándar: https://radiolab.org/podcast/wubi-effect
    • Me pregunto si escribir Xiao long bao con XLB entra en este ejemplo. No sabía que existía un sistema más amplio; qué genial
    • Esto no parece tener nada que ver con el tema que se está discutiendo
  • Me 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 automatizar
    El 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

  • 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.

    • Quería crear un teclado con keylogger integrado que ofreciera autocompletado al presionar una tecla especial.
      La idea era guardar los datos en un almacenamiento seguro dentro del dispositivo para que no representaran un riesgo de seguridad.
    • Parte de esto se podría implementar como un método de entrada (IME). Un método de entrada es, en la práctica, un keylogger autorizado que puede editar la entrada, y se necesita sobre todo para escribir en chino/japonés.
      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.
    • Me da curiosidad cómo funcionaría.
      ¿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?
    • Una vez me metí bastante a fondo intentando prototipar algo parecido.
      La estructura era usar Bluetooth Keyboard -> ESP32 como 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.
    • Me parece que sería mejor tener abreviaturas estandarizadas.
      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.

    • La motivación principal eran las conversaciones de Slack muy rápidas y respuestas de correo bastante formalizadas.
      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.
    • El ahorro de tiempo es un aspecto, pero también puede ser útil para personas que sufren lesiones por esfuerzo repetitivo o síndrome del túnel carpiano.
    • Escribir más rápido no se trata tanto de reducir el tiempo total, sino de reducir la latencia entre pensamientos.
      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.
    • Me pregunto si la habilidad para escribir al tacto también influye.
  • 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.

    • Ikclaks está haciendo un trabajo interesante sobre la distribución de teclado magic sturdy: https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic...
    • Antepondría a los alias combinaciones de letras que rara vez aparecen como inicio de una palabra o de un nombre de variable, como kk, zz, qq.
      Por ejemplo, qqme es 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.
    • Un punto medio razonable podría ser usar abreviaturas solo para las palabras más frecuentes y pegar el resto buscándolo con búsqueda difusa en un popup simple de GUI.
    • Si usas varios idiomas, parece que la cantidad de atajos disponibles se reduce mucho.
      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

    • Dediqué bastante tiempo a ajustar el manejo de delimitadores en la configuración de Autokey que genera.
      El caso de excepción más granular es .py. En general, . es un delimitador, pero lo hice una excepción delante de py para 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

    • Hice un prototipo con un concepto parecido. La idea es que uno abrevie como quiera y ChatGPT lo vaya corrigiendo después de cada oración
      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