2 points par GN⁺ 2023-08-31 | 1 commentaires | Partager sur WhatsApp
  • Un outil qui crée automatiquement des raccourcis de frappe à partir de son propre corpus de textes et génère des raccourcis de saisie utilisés dans les e-mails et sur Slack
  • Il analyse un corpus textuel pour proposer les raccourcis qui permettent d’économiser le plus de caractères lors de la frappe, et génère un fichier de configuration pour Autokey, un programme Linux de raccourcis clavier
  • Il repère les n-grammes fréquents dans le corpus et crée des candidats pour les remplacer par des expressions plus courtes, avec un classement des suggestions calculé comme [nombre de caractères économisés] * [fréquence de l’expression]
  • Le choix des raccourcis vise des abréviations faciles à mémoriser ; les abréviations que l’on souhaite pouvoir taper comme des mots sont exclues via une blacklist, et les abréviations les plus faciles à retenir sont attribuées en priorité aux expressions les plus fréquentes
  • Un outil d’analyse de Slack Data Export est également fourni pour utiliser des messages Slack comme corpus
    • seul l’administrateur de l’espace de travail Slack peut effectuer l’export
    • seuls les canaux publics sont exportés
    • il faut remplacer USERNAME_TO_EXPORT par le nom d’utilisateur Slack, puis exécuter parse_slack.py
    • la procédure inclut la suppression de l’export Slack avec srm
  • Le flux d’utilisation de base consiste à placer le corpus dans data/corpus/*.txt, à générer les 200 meilleurs candidats dans output/suggested_shortcuts.yaml avec find_suggested_phrases.py, puis à déplacer les éléments souhaités dans shortcuts.yaml et à créer le fichier de configuration Autokey avec generate_autokeys.py
  • Les dépendances s’installent avec install.sh, et l’outil est actuellement testé avec Python 3.10.12
  • Autokey ne prend actuellement en charge que X11 sur Linux, pas Wayland
  • La configuration Autokey générée est conçue pour ne s’appliquer que lorsque Chrome a le focus ; l’auteur indique aussi avoir rencontré davantage de problèmes dans le terminal et dans vscode, où les abréviations entraient plus souvent en conflit avec de courtes commandes Linux ou des noms de variables

1 commentaires

 
GN⁺ 2023-08-31
Avis sur Hacker News
  • J’ai aussi écrit un billet de blog avec une vidéo du projet : https://erikschluntz.com/software/2023/08/26/compressing-my-...
    Pour une fois, c’était un side project qui m’a réellement fait gagner plus de temps que je n’en ai investi :)

  • L’idée est très astucieuse, mais si elle évolue avec le temps, je ne pense pas que j’aurais envie de l’utiliser.
    Par exemple, si on le relance tous les six mois et que l’an dernier db voulait dire debug, mais que cette année cela devient database, cela peut ruiner la mémoire musculaire et les habitudes.
    Du coup, je serais plus intéressé par une version universelle qui aide de façon stable tout le monde, lorsqu’on la lance sur des livres, e-mails et SMS écrits par des milliers de personnes aux profils et contextes variés.
    Développer t en the et st en something semble évident ; je me demande s’il serait possible de constituer un ensemble minimal d’environ 200 à 500 éléments, que tout le monde pourrait apprendre, pour en faire une sorte de « clavier standard ».

    • Ça vaut le coup de regarder l’Evans Basic English Code. C’est un système de sténographie fondé sur le Phillips Code utilisé en télégraphie, et même s’il est un peu ancien, les mots les plus fréquents sont assez utiles pour l’écriture ou la saisie.
      https://archive.org/details/evansbasicenglis00evan
      Mieux vaut utiliser le PDF ; le fichier TXT est quasiment inutilisable à cause de la mauvaise qualité de l’OCR.
      Ceci est également utile : https://en.m.wikipedia.org/wiki/Most_common_words_in_English
    • C’est précisément pour cette raison que ce n’est pas exécuté automatiquement. Le programme génère suggested_shortcuts.yaml, puis on copie ce qu’on veut dans shortcuts.yaml, ce qui permet de contrôler manuellement les raccourcis réellement activés :)
    • J’ai l’impression qu’une telle version universelle finirait par ressembler à un clavier de sténographie.
    • J’étais tombé autrefois sur Yublin, qui était exactement une tentative de ce genre : créer des abréviations de 1 à 3 lettres pour les 600 mots les plus fréquents en anglais.
      Et, comme on pouvait s’y attendre, the -> t est tout en haut de la liste : https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...
    • Une solution générale risque de ne convenir que vaguement à beaucoup de monde.
      Un chimiste tape peut-être souvent dropper et voudra dp, tandis qu’un fonctionnaire préférera sans doute department.
  • Si vous n’êtes pas locuteur natif du chinois, vous ne le savez peut-être pas, mais le chinois intègre déjà ce type de fonctionnalité.
    Officiellement, cela s’appelle Shuangpin et consiste à saisir deux lettres latines par mot pour entrer le mot entier : https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
    Même sans utiliser Shuangpin à proprement parler, la plupart des méthodes de saisie chinoises prennent en charge une fonction similaire, appelée Jianpin, pour les expressions populaires : on peut saisir seulement la première lettre latine de chaque mot afin d’entrer une expression de plusieurs mots.
    Par exemple, pour saisir xiexie, qui signifie « thank you » en chinois, il suffit généralement de taper xx pour que la plupart des méthodes de saisie chinoises proposent automatiquement les caractères chinois correspondants.

    • Avec un bon clavier pinyin, il est facile de saisir rapidement des phrases courantes.
      Par exemple, « what do you want to eat », c’est-à-dire 「你想吃什麼」, se saisit avec n x c s m.
    • J’ai récemment écouté un podcast intéressant sur la façon de saisir du chinois avec un clavier standard : https://radiolab.org/podcast/wubi-effect
    • Je me demande si écrire Xiao long bao avec XLB relève aussi de ce cas. Je ne savais pas qu’il existait un système plus large, c’est chouette.
    • Cela ne semble avoir absolument aucun rapport avec le sujet discuté ici.
  • J’aime vraiment voir ce genre de projets.
    Ce week-end, j’ai travaillé sur un problème similaire, mais portant sur des mots entiers plutôt que sur des abréviations issues d’un dictionnaire créé à la main, et, dans le cas général, avec une adaptation à un corpus de texte donné.
    Ce qui m’intéressait, c’était : « peut-on construire un correcteur automatique adapté à un corpus de texte donné ? » Par exemple, si l’on utilise souvent dans un document une longue expression comme data augmentation, je voulais voir si l’on pouvait automatiser cela.
    L’approche consistait à calculer la surprise de mots isolés et de bigrammes dans un dataset général, le corpus du NYT, à ajouter un poids aux mots présents dans l’index à adapter, puis à construire une structure de données trie pondérée par la surprise, pour l’utiliser comme autocomplétion avancée.
    Une solution fonctionnelle se trouve ici : https://github.com/capjamesg/autowrite/blob/main/autocomplet...
    Il n’y a pas encore de documentation ; je prévois de l’ajouter dans les prochains jours. Si vous voulez en discuter, vous pouvez ouvrir une issue GitHub.

    • Ça ressemble pas mal à https://github.com/wolfgarbe/SymSpell
      À moins que j’aie mal compris et que l’objectif soit de trouver des façons plus créatives de dire la même chose.
  • Comme idée d’extension, on pourrait ajouter un keylogger qui surveille la saisie. Bien sûr, c’est aussi un inconvénient en soi
    Le principe serait d’apprendre les formulations que l’utilisateur emploie souvent, de repérer les phrases courantes, de proposer des raccourcis, puis de suggérer discrètement le raccourci chaque fois que l’utilisateur saisit la phrase complète
    Ainsi, n’importe qui pourrait l’installer, la barrière à l’entrée serait faible, et la productivité pourrait augmenter progressivement avec le temps

    • Je voulais créer un clavier à keylogger intégré qui propose de l’autocomplétion quand on appuie sur une touche spéciale
      L’idée était de conserver les données dans un stockage sécurisé sur l’appareil, afin que cela ne devienne pas un risque de sécurité
    • Une partie pourrait être implémentée sous forme de méthode de saisie (IME). Une méthode de saisie est en fait un keylogger approuvé capable de modifier l’entrée, et elle est surtout nécessaire pour la saisie du chinois/japonais
      Une méthode de saisie qui fournirait sur desktop de l’autocomplétion en anglais comme sur mobile, ou des raccourcis via un framework de méthode de saisie comme fcitx5, serait un concept intéressant
    • Je me demande comment cela fonctionnerait
      Est-ce que ce serait du genre : exporter automatiquement chaque semaine l’historique Slack, calculer la fréquence des mots, puis définir manuellement plusieurs expansions à partir des résultats visibles ?
    • J’ai déjà creusé assez loin l’idée de prototyper quelque chose de similaire
      La structure utilisait Bluetooth Keyboard -> ESP32 comme hôte clavier, puis envoyait les frappes vers l’USB et vers un fichier
      Si l’on a le budget, il existe aussi des loggers de clavier USB/PS2 qui stockent les données sur disque
    • Je me demande s’il ne vaudrait pas mieux disposer d’abréviations standardisées
      Faire converger les usages dans cette direction aiderait aussi à garder de la cohérence entre plusieurs ordinateurs, et serait utile quand on utilise plusieurs machines
  • Pour ma part, j’ai l’impression que la saisie n’est presque jamais le goulot d’étranglement, sauf dans quelques situations de chat
    Il y a plutôt des interactions où la bande passante supplémentaire de la vidéo ou de la voix aurait aidé. Je me demande si ce type de raccourcis se traduit vraiment par un gain de temps de travail

    • La motivation principale était les conversations Slack très rapides et des réponses par e-mail assez formalisées
      Par exemple des échanges du type « Pouvez-vous envoyer une capture d’écran ? » ou des réponses consistant à envoyer un lien Calendly
      Même quand j’écris de longs textes, il m’arrive souvent d’être frustré parce que mes pensées vont plus vite que ma frappe, donc cela aide aussi sur ce point
    • Le gain de temps est un aspect, mais cela peut aussi être utile aux personnes souffrant de troubles musculosquelettiques liés aux gestes répétitifs ou du syndrome du canal carpien
    • Taper plus vite n’est pas tant une question de réduire le temps total que de réduire la latence entre les pensées
      La frappe est une tâche manuelle qui interrompt la réflexion ; plus on réduit le temps passé à entrer et sortir de la saisie, plus on peut revenir rapidement à la pensée
    • Je me demande aussi si la capacité à taper au clavier sans regarder joue un rôle
  • J’ai passé pas mal de temps à essayer de créer ma propre extension de texte
    C’était beaucoup plus difficile que prévu, et il est compliqué de trouver des alias qui apportent suffisamment de valeur sans se déclencher trop souvent par erreur
    Comme je communique tous les jours dans plusieurs langues, c’est devenu encore plus complexe, si bien que j’ai maintenant séparé les alias par application
    Malgré tout, les déclenchements intempestifs restent présents, et j’en arrive plutôt à la conclusion qu’un délimiteur est généralement nécessaire

    • Ikclaks fait un travail intéressant autour de la disposition de clavier magic sturdy : https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic...
    • Je préfixe les alias avec des combinaisons de lettres qui apparaissent rarement au début d’un mot ou d’un nom de variable, comme kk, zz, qq
      Par exemple, qqme correspond à ma signature d’e-mail
      J’aimerais que l’outil de l’article propose aussi des alias pour des phrases plus longues que ce que j’ai vu dans le README. J’ai entendu dire que TextExpander pour macOS faisait cela, mais je ne suis pas utilisateur de Mac
    • Un bon compromis pourrait consister à n’utiliser des abréviations que pour les mots les plus fréquents, et à rechercher puis coller le reste via une recherche floue dans une petite popup GUI
    • Avec plusieurs langues, j’ai l’impression que le nombre de raccourcis utilisables devient beaucoup plus réduit
      L’une des tâches TODO consiste aussi à générer une liste de blocage des alias à éviter à partir du corpus de textes réels analysé
  • À titre personnel, je l’avoue, je n’ai jamais aimé les abréviations façon SMS utilisées sur les téléphones d’avant l’iPhone
    C’est l’une des raisons pour lesquelles j’utilisais très peu les SMS ou messages texte, sauf quand c’était vraiment nécessaire
    J’utilise l’extension de texte depuis les débuts de TextExpander sur iOS et macOS, et même si le clavier de l’iPhone est très bon, ressaisir sans cesse des informations comme mon adresse personnelle, des plans domicile/bureau, ou des informations professionnelles et personnelles restait pénible. TextExpander m’a beaucoup aidé
    Plus tard, quand TextExpander est passé à un modèle par abonnement, j’ai commencé à chercher des alternatives, car personnellement je ne pense pas que ce modèle convienne à ce type d’outil. Les Snippets inclus dans le Powerpack d’Alfred étaient une meilleure alternative
    macOS/iOS disposent aussi de « Text Replacements » intégrés, mais ils échouent souvent hors des apps Apple. Ce qui est présenté ici ressemble à Text Replacement d’Apple ; pour ma part, je garde cette fonctionnalité, mais je gère le reste avec Alfred. Honnêtement, si je pouvais me passer complètement d’Alfred, je pourrais migrer vers cette solution
    Cela dit, je veux utiliser un délimiteur pour les expansions afin de ne pas perturber la frappe normale. Pour l’instant, j’utilise , comme délimiteur, parce qu’en anglais une virgule est toujours suivie d’une espace, et mes expansions ne se produisent que lorsque je tape une virgule suivie d’un court texte sans espace. La position de la touche virgule est aussi pratique quand on tape sans regarder
    Même si je décidais de rester avec Text Replacement de l’OS, j’introduirais probablement un délimiteur pour éviter qu’un mot ne soit automatiquement étendu dans une situation non voulue
    https://textexpander.com
    https://www.alfredapp.com

    • J’ai passé pas mal de temps à régler la gestion des délimiteurs dans la configuration Autokey générée
      Le cas d’exception le plus fin est .py. En général, . est un délimiteur, mais j’ai ajouté une exception devant py pour que cela ne gêne pas la saisie de noms de fichiers Python
  • Des années d’autocomplétion ont déjà détérioré mon niveau d’anglais, qui est ma deuxième langue
    Il m’arrive souvent de connaître un mot mais de ne plus me souvenir de son orthographe, au point d’en oublier la prononciation, et ce genre d’outil risque d’achever complètement ce qu’il me reste de compétence

  • Et si, au lieu de mémoriser des mots-clés, on pouvait écrire les premières lettres ?
    J’ai fait un essai avec ChatGPT il y a quelques semaines, mais il ne semble pas exister de logiciel proposant ce genre de fonctionnalité
    Je ne suis pas très bon en programmation, mais j’aimerais que quelqu’un le crée : https://imgur.com/a/0o4zLwT

    • J’ai réalisé un prototype avec un concept similaire. On abrège comme on veut, puis ChatGPT corrige après chaque phrase
      La précision est plutôt correcte, mais quand il se trompe, c’est très agaçant
      Même lorsque ça fonctionne parfaitement, à l’usage, la charge cognitive était bien plus élevée que de taper normalement
      En me concentrant beaucoup, j’arrivais à peu près à atteindre ma vitesse de frappe confortable habituelle en utilisant des abréviations, mais pas à la dépasser, et je finissais naturellement par revenir à la frappe classique
      Cela dit, je tape vite et j’écris beaucoup, donc ce prototype essaie en quelque sorte de battre un processus mental fortement optimisé depuis environ 30 ans. Il pourrait mieux convenir à quelqu’un qui n’est pas déjà rapide au clavier