2 pontos por GN⁺ 2023-08-31 | 1 comentários | Compartilhar no WhatsApp
  • Ferramenta que cria automaticamente atalhos de digitação a partir do seu próprio corpus de textos e gera atalhos de entrada usados em e-mails e no Slack
  • Analisa o corpus de texto para sugerir atalhos que economizam o maior número de caracteres ao digitar e gera arquivos de configuração para o programa de atalhos de teclado do Linux, Autokey
  • Encontra n-gramas frequentes no corpus e cria candidatos para substituí-los por expressões mais curtas, e a ordem das sugestões é calculada como [número de caracteres economizados] * [frequência da frase]
  • A seleção de atalhos busca abreviações fáceis de memorizar; abreviações que você queira digitar como palavras podem ser excluídas por blacklist, e abreviações mais fáceis de lembrar são priorizadas para frases usadas com mais frequência
  • Também fornece uma ferramenta para analisar Slack Data Export e usá-lo como corpus
    • Apenas administradores do workspace do Slack podem fazer export
    • Apenas canais públicos são exportados
    • É necessário substituir USERNAME_TO_EXPORT pelo nome de usuário do Slack e depois executar parse_slack.py
    • O procedimento inclui apagar o export do Slack com srm
  • O fluxo básico de uso é colocar o corpus em data/corpus/*.txt, gerar os 200 principais candidatos em output/suggested_shortcuts.yaml com find_suggested_phrases.py, mover os itens desejados para shortcuts.yaml e então gerar os arquivos de configuração do Autokey com generate_autokeys.py
  • As dependências são instaladas com install.sh, e no momento o projeto foi testado com Python 3.10.12
  • O Autokey atualmente oferece suporte apenas a X11 no Linux e não oferece suporte a Wayland
  • A configuração gerada do Autokey é feita para ser aplicada apenas quando o Chrome estiver em foco, e a experiência de uso menciona que, no terminal e no vscode, houve mais problemas porque comandos curtos do Linux ou nomes de variáveis entravam em conflito com as abreviações

1 comentários

 
GN⁺ 2023-08-31
Comentários do Hacker News
  • Também escrevi um post no blog com um vídeo sobre o projeto: https://erikschluntz.com/software/2023/08/26/compressing-my-...
    Raramente acontece, mas foi um projeto paralelo que de fato economizou mais tempo do que o tempo investido nele :)

  • A ideia é muito esperta, mas acho que eu não gostaria de usar algo cujo comportamento muda com o tempo
    Por exemplo, se eu rodasse a cada 6 meses e no ano passado db fosse debug, mas este ano virasse database, isso poderia atrapalhar a memória muscular e os hábitos
    Por isso fico mais curioso com uma versão genérica que ajudasse de forma estável todo mundo quando aplicada a livros, e-mails e mensagens escritos por milhares de pessoas de diferentes contextos
    Expandir t para the e st para something parece óbvio, mas fico imaginando se daria para criar um conjunto mínimo de umas 200 a 500 opções que todo mundo pudesse aprender, como um “teclado padrão”

    • Vale a pena dar uma olhada no Evans Basic English Code. É um sistema de taquigrafia baseado no Phillips Code para telégrafo e, embora seja um pouco antigo, as palavras mais comuns são bem úteis para escrever ou digitar
      https://archive.org/details/evansbasicenglis00evan
      É melhor usar o PDF; o arquivo TXT tem uma qualidade de OCR ruim e é praticamente inutilizável
      Isto também é útil: https://en.m.wikipedia.org/wiki/Most_common_words_in_English
    • É exatamente por esse motivo que ele não roda automaticamente. Ele gera um suggested_shortcuts.yaml, e então você copia dali para o shortcuts.yaml, de modo que dá para controlar manualmente os atalhos que serão ativados de fato :)
    • Acho que uma versão genérica dessas acabaria sendo parecida com um teclado de taquigrafia
    • Há um tempo encontrei o Yublin, que era justamente uma tentativa desse tipo: criar abreviações de 1 a 3 letras para as 600 palavras mais comuns em inglês
      E, claro, the -> t está no topo da lista: https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...
    • Uma solução genérica provavelmente só vai servir de forma mais ou menos adequada para muita gente
      Um químico pode digitar dropper com frequência e querer dp, enquanto um burocrata talvez prefira department
  • Quem não é falante nativo de chinês talvez não saiba, mas o chinês tem esse recurso embutido
    Oficialmente se chama 双拼 (Shuangpin), e é um método em que você digita 2 letras latinas para cada palavra para inserir a palavra inteira: https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
    Mesmo sem usar o Shuangpin formalmente, a maioria dos métodos de entrada chineses oferece um recurso parecido de 简拼 para frases populares, permitindo digitar expressões com várias palavras inserindo apenas a primeira letra latina de cada palavra
    Por exemplo, para digitar xiexie, que significa “thank you” em chinês, geralmente basta digitar xx e a maioria dos métodos de entrada chineses sugere automaticamente os caracteres correspondentes

    • Em bons teclados de pinyin, é fácil inserir frases comuns rapidamente
      Por exemplo, 「你想吃什麼」, que significa “what do you want to eat”, é digitado como n x c s m
    • Ouvi recentemente um podcast interessante sobre como se digita chinês em um teclado padrão: https://radiolab.org/podcast/wubi-effect
    • Fico me perguntando se escrever Xiao long bao com XLB também é um exemplo disso. Eu não sabia que havia um sistema mais amplo; muito legal
    • Isso não parece ter nenhuma relação com o assunto em discussão aqui
  • Gosto muito de ver projetos assim
    No fim de semana lidei com um problema parecido, mas voltado a palavras inteiras, não a abreviações de um dicionário criado manualmente, e no caso geral era uma abordagem ajustada a um determinado corpus de texto
    A pergunta que eu tinha era: “será que dá para criar um corretor automático ajustado a um determinado corpus de texto?” Por exemplo, se em um documento eu uso muito uma expressão longa como data augmentation, queria ver se dava para automatizar isso
    A abordagem foi calcular a surpresa de palavras individuais e 2-gramas no corpus genérico do NYT, adicionar peso às palavras no índice-alvo a ser ajustado e então criar uma estrutura de dados trie ponderada pela surpresa para usar como autocomplete avançado
    Uma solução funcional está aqui: https://github.com/capjamesg/autowrite/blob/main/autocomplet...
    Ainda não há documentação; pretendo adicioná-la em alguns dias. Se quiser conversar, é só abrir uma GitHub Issue

  • Como ideia de extensão, seria possível acoplar um keylogger que observa a digitação. Claro, isso em si é uma desvantagem
    A abordagem seria aprender as frases que o usuário usa com frequência, encontrar frases comuns, sugerir atalhos e então avisar suavemente o usuário sobre o atalho sempre que ele digitasse a frase completa
    Assim, qualquer pessoa poderia instalar, a barreira de entrada seria baixa e a produtividade poderia aumentar gradualmente com o tempo

    • Eu queria criar um teclado com keylogger embutido que oferecesse autocompletar ao pressionar uma tecla especial
      A ideia era manter os dados em um armazenamento seguro no próprio dispositivo, para que não se tornassem um risco de segurança
    • Parte disso pode ser implementada como um método de entrada (IME). Um método de entrada é, na prática, um keylogger aprovado que pode editar a entrada, e é necessário principalmente para entrada em chinês/japonês
      Um método de entrada que ofereça autocompletar em inglês no desktop como em celulares, ou forneça atalhos por meio de um framework de método de entrada como fcitx5, parece um conceito interessante
    • Fico curioso sobre como isso funcionaria
      Seria algo como exportar automaticamente o histórico do Slack toda semana, calcular a frequência das palavras e, com base nos resultados visíveis, definir manualmente várias expansões?
    • Já me aprofundei bastante tentando fazer um protótipo de algo parecido
      A estrutura era usar Bluetooth Keyboard -> ESP32 como host de teclado e enviar as teclas digitadas para USB e para um arquivo
      Se você tiver dinheiro, também existem loggers de teclado USB/PS2 que salvam os dados em disco
    • Acho que talvez fosse melhor haver abreviações padronizadas
      Fazer as coisas convergirem nessa direção também ajudaria na consistência entre vários computadores, e seria bom para quem usa mais de uma máquina
  • Para mim, fora algumas situações de chat, acho que digitar quase nunca foi o gargalo
    Em vez disso, só houve interações em que a largura de banda extra de vídeo ou voz teria ajudado. Fico curioso se esses atalhos realmente se traduzem em economia de tempo no trabalho

    • A principal motivação eram conversas no Slack muito rápidas e respostas de e-mail bastante padronizadas
      Por exemplo, conversas como “você pode enviar uma captura de tela?” ou respostas do tipo enviar um link do Calendly
      Mesmo ao escrever textos longos, muitas vezes é frustrante perceber que o pensamento é mais rápido que a digitação, então isso também ajuda nessa parte
    • Economizar tempo é um aspecto, mas isso também pode ser útil para pessoas que sofrem de lesão por esforço repetitivo ou síndrome do túnel do carpo
    • Digitar mais rápido é menos uma questão de reduzir o tempo total e mais de reduzir a latência entre pensamentos
      Digitar é uma tarefa manual que interrompe o pensamento, então quanto menos tempo você passa entrando e saindo da digitação, mais rápido consegue voltar a pensar
    • Fico curioso se a habilidade de digitação por toque também influencia
  • Passei bastante tempo tentando criar uma expansão de texto para uso próprio
    Foi muito mais difícil do que eu esperava, e é difícil encontrar aliases que tenham valor suficiente sem falhar com frequência demais
    Como me comunico diariamente em vários idiomas, ficou ainda mais complexo, então hoje separo os aliases por aplicativo
    Mesmo assim, os falsos acionamentos continuam existindo, e estou chegando à conclusão de que, em geral, é preciso ter um delimitador

    • Ikclaks está fazendo um trabalho interessante em cima do layout de teclado magic sturdy: https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic...
    • Coloco antes do alias combinações de letras como kk, zz, qq, que raramente aparecem como primeiras letras de palavras ou nomes de variáveis
      Por exemplo, qqme é a minha assinatura de e-mail
      Seria bom se a ferramenta do post original também sugerisse aliases para frases mais longas do que as que vi no README. Ouvi dizer que o TextExpander para macOS faz isso, mas não sou usuário de Mac
    • Um bom meio-termo pode ser usar abreviações apenas para as palavras mais comuns e, para o restante, localizar e colar por meio de busca fuzzy em um popup simples de GUI
    • Ao usar vários idiomas, acho que a quantidade de atalhos disponíveis fica muito menor
      Um dos TODOs é também gerar uma lista de bloqueio de aliases a evitar, usando o corpus real de textos analisado
  • Fazendo uma confissão pessoal, eu nunca gostei das abreviações estilo SMS usadas nos celulares anteriores ao iPhone
    Esse foi um dos motivos pelos quais eu quase não usava SMS ou mensagens de texto, exceto quando era realmente necessário
    Uso expansão de texto desde os primeiros tempos do TextExpander no iOS e no macOS, e, por melhor que o teclado do iPhone fosse, era incômodo digitar repetidamente coisas como endereço de casa, mapas de casa/trabalho e informações profissionais e pessoais. O TextExpander ajudou muito
    Depois que o TextExpander passou para um modelo de assinatura, comecei a procurar alternativas, porque pessoalmente não acho que assinatura combine com esse tipo de ferramenta. Os Snippets incluídos no Powerpack do Alfred foram uma alternativa melhor
    O macOS/iOS também têm “Text Replacements” embutido, mas isso falha com frequência fora dos apps da Apple. O que está aqui é parecido com o Text Replacement da Apple, e eu mantenho esse recurso, mas gerencio o restante pelo Alfred. Sinceramente, se isso me permitisse sair completamente do Alfred, talvez eu migrasse para este lado
    No entanto, eu gostaria de usar um delimitador nas expansões para não atrapalhar a digitação normal. Hoje uso , como delimitador, porque em inglês a vírgula é sempre seguida de espaço, e minhas expansões só acontecem quando digito uma vírgula e um texto curto sem espaço. A posição da tecla de vírgula também é confortável ao digitar por toque
    Mesmo que eu continue com o Text Replacement do sistema operacional, acho que introduziria um delimitador para impedir que palavras sejam expandidas automaticamente em situações não intencionais
    https://textexpander.com
    https://www.alfredapp.com

    • Passei bastante tempo ajustando o tratamento de delimitadores na configuração gerada para o Autokey
      O tratamento de exceção mais refinado é .py. Em geral, . é um delimitador, mas fiz uma exceção antes de py para não atrapalhar ao digitar nomes de arquivos Python
  • Anos de autocompletar já pioraram meu domínio de inglês, que é minha segunda língua
    Eu sei as palavras, mas com frequência não lembro a grafia e acabo esquecendo a pronúncia; ferramentas assim parecem capazes de acabar de vez até com o que resta dessa habilidade

  • Em vez de memorizar palavras-chave, será que não daria para escrever as primeiras letras?
    Fiz um experimento com o ChatGPT algumas semanas atrás, mas parece que não existe um software já existente com esse tipo de recurso
    Não sou muito bom em programação, mas seria ótimo se alguém criasse algo assim: https://imgur.com/a/0o4zLwT

    • Criei um protótipo com um conceito parecido. Você abrevia como quiser, e o ChatGPT corrige depois de cada frase
      A precisão é bem boa, mas quando erra é extremamente irritante
      Mesmo funcionando perfeitamente, ao usar na prática a carga cognitiva foi muito maior do que digitar como de costume
      Com muita concentração, eu conseguia usar abreviações e chegar mais ou menos à minha velocidade confortável de digitação normal, mas não ultrapassava isso; no fim, acabava voltando naturalmente à digitação comum
      Dito isso, eu digito rápido e escrevo bastante, então esse protótipo estava tentando superar um processo mental fortemente otimizado ao longo de uns 30 anos. Talvez funcione melhor para quem não é originalmente um digitador rápido